From 6da760a2c904898a62a5cc1ee3ce7a3cee3eb0b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Santamar=C3=ADa?= Date: Tue, 6 Jul 2021 09:28:04 +0200 Subject: [PATCH 01/40] Fix psalm errors after update (#265) --- .../src/Controller/Courses/CoursesGetController.php | 6 ++++-- .../Persistence/Doctrine/CourseIdsType.php | 1 - .../Bus/CallableFirstParameterExtractor.php | 11 ++++++++++- .../Bus/Event/MySql/MySqlDoctrineEventBus.php | 4 ++-- .../Infrastructure/Persistence/Doctrine/UuidType.php | 2 +- 5 files changed, 17 insertions(+), 7 deletions(-) diff --git a/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php b/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php index 0f57df285..578e04589 100644 --- a/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php +++ b/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php @@ -20,6 +20,8 @@ public function __construct(private QueryBus $queryBus) public function __invoke(Request $request): JsonResponse { + $orderBy = $request->query->get('order_by'); + $order = $request->query->get('order'); $limit = $request->query->get('limit'); $offset = $request->query->get('offset'); @@ -27,8 +29,8 @@ public function __invoke(Request $request): JsonResponse $response = $this->queryBus->ask( new SearchBackofficeCoursesByCriteriaQuery( (array) $request->query->get('filters'), - $request->query->get('order_by'), - $request->query->get('order'), + null === $orderBy ? null : (string) $orderBy, + null === $order ? null: (string) $order, null === $limit ? null : (int) $limit, null === $offset ? null : (int) $offset ) diff --git a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php index d3646755f..9606fc65f 100644 --- a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php +++ b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php @@ -22,7 +22,6 @@ public function getName(): string return self::customTypeName(); } - /** @var CourseId[] $value */ public function convertToDatabaseValue($value, AbstractPlatform $platform) { return parent::convertToDatabaseValue(map(fn(CourseId $id) => $id->value(), $value), $platform); diff --git a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php index 3753542f4..4d0ac9b07 100644 --- a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php +++ b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php @@ -5,8 +5,10 @@ namespace CodelyTv\Shared\Infrastructure\Bus; use CodelyTv\Shared\Domain\Bus\Event\DomainEventSubscriber; +use LogicException; use ReflectionClass; use ReflectionMethod; +use ReflectionNamedType; use function Lambdish\Phunctional\map; use function Lambdish\Phunctional\reduce; use function Lambdish\Phunctional\reindex; @@ -60,7 +62,14 @@ public function extract($class): ?string private function firstParameterClassFrom(ReflectionMethod $method): string { - return $method->getParameters()[0]->getType()->getName(); + /** @var ReflectionNamedType $fistParameterType */ + $fistParameterType = $method->getParameters()[0]->getType(); + + if (null === $fistParameterType) { + throw new LogicException('Missing type hint for the first parameter of __invoke'); + } + + return $fistParameterType->getName(); } private function hasOnlyOneParameter(ReflectionMethod $method): bool diff --git a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php index e34059237..003465fbc 100644 --- a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php @@ -21,9 +21,9 @@ public function __construct(EntityManager $entityManager) $this->connection = $entityManager->getConnection(); } - public function publish(DomainEvent ...$domainEvents): void + public function publish(DomainEvent ...$events): void { - each($this->publisher(), $domainEvents); + each($this->publisher(), $events); } private function publisher(): callable diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php b/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php index e116edbd2..76df29d11 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php @@ -32,9 +32,9 @@ public function convertToPHPValue($value, AbstractPlatform $platform) return new $className($value); } - /** @var Uuid $value */ public function convertToDatabaseValue($value, AbstractPlatform $platform) { + /** @var Uuid $value */ return $value->value(); } } From 0f6f3ed620daf4f446a5f4671c49bbb8c87871e4 Mon Sep 17 00:00:00 2001 From: Javier Ferrer Date: Mon, 10 Jan 2022 19:31:25 +0100 Subject: [PATCH 02/40] Fix readme CI status badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0d510980b..51bbcde86 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ codely.tv CodelyTV Courses Symfony 5.0 - CI pipeline status + CI pipeline status

From 0e79862df4a856e94d2cef0dd66b9d10946ff24b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Mon, 14 Feb 2022 18:45:55 +0100 Subject: [PATCH 03/40] feat: upgrade to php 8.1 (#277) * feat: upgrade to php 8.1 * feat: upgrade psalm version * feat: upgrade pickle version * feat: upgrade to stable php 8.1 * feat: update deps * feat: add compatibility to symfony 5 and php 8 * feat: add compatibility proxy manager and php 8.1 --- Dockerfile | 6 +- Makefile | 2 +- apps/backoffice/backend/public/index.php | 2 +- .../backend/src/BackofficeBackendKernel.php | 8 - apps/backoffice/frontend/public/index.php | 2 +- .../frontend/src/BackofficeFrontendKernel.php | 8 - apps/mooc/backend/public/index.php | 2 +- apps/mooc/backend/src/MoocBackendKernel.php | 8 - composer.json | 38 +- composer.lock | 3170 +++++++++-------- .../Infrastructure/Logger/MonologLogger.php | 2 +- 11 files changed, 1673 insertions(+), 1575 deletions(-) diff --git a/Dockerfile b/Dockerfile index f9d6048a3..096c79bb9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ -FROM php:8.0-fpm-alpine +FROM php:8.1.1-fpm-alpine WORKDIR /app -RUN wget https://github.com/FriendsOfPHP/pickle/releases/download/v0.7.2/pickle.phar \ +RUN wget https://github.com/FriendsOfPHP/pickle/releases/download/v0.7.9/pickle.phar \ && mv pickle.phar /usr/local/bin/pickle \ && chmod +x /usr/local/bin/pickle @@ -14,7 +14,7 @@ RUN apk --update upgrade \ zip \ pdo_mysql -RUN pickle install apcu@5.1.20 +RUN pickle install apcu@5.1.21 ADD etc/infrastructure/php/extensions/rabbitmq.sh /root/install-rabbitmq.sh ADD etc/infrastructure/php/extensions/xdebug.sh /root/install-xdebug.sh diff --git a/Makefile b/Makefile index 5508edf8f..e79984f36 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,7 @@ composer-require-module: INTERACTIVE=-ti --interactive .PHONY: composer composer composer-install composer-update composer-require composer-require-module: composer-env-file @docker run --rm $(INTERACTIVE) --volume $(current-dir):/app --user $(id -u):$(id -g) \ - composer:2 $(CMD) \ + composer:2.2.6 $(CMD) \ --ignore-platform-reqs \ --no-ansi diff --git a/apps/backoffice/backend/public/index.php b/apps/backoffice/backend/public/index.php index b2f76b290..8c109ee2d 100644 --- a/apps/backoffice/backend/public/index.php +++ b/apps/backoffice/backend/public/index.php @@ -1,7 +1,7 @@ load($confDir . '/services_' . $this->environment . self::CONFIG_EXTS, 'glob'); $loader->load($confDir . '/services/*' . self::CONFIG_EXTS, 'glob'); } - - protected function configureRoutes(RouteCollectionBuilder $routes): void - { - $confDir = $this->getProjectDir() . '/config'; - - $routes->import($confDir . '/{routes}/*' . self::CONFIG_EXTS, '/', 'glob'); - } } diff --git a/apps/backoffice/frontend/public/index.php b/apps/backoffice/frontend/public/index.php index 5e6452e04..af90aac44 100644 --- a/apps/backoffice/frontend/public/index.php +++ b/apps/backoffice/frontend/public/index.php @@ -1,7 +1,7 @@ load($confDir . '/services_' . $this->environment . self::CONFIG_EXTS, 'glob'); $loader->load($confDir . '/services/*' . self::CONFIG_EXTS, 'glob'); } - - protected function configureRoutes(RouteCollectionBuilder $routes): void - { - $confDir = $this->getProjectDir() . '/config'; - - $routes->import($confDir . '/{routes}/*' . self::CONFIG_EXTS, '/', 'glob'); - } } diff --git a/apps/mooc/backend/public/index.php b/apps/mooc/backend/public/index.php index 00bf627a9..9d02406aa 100644 --- a/apps/mooc/backend/public/index.php +++ b/apps/mooc/backend/public/index.php @@ -1,7 +1,7 @@ load($confDir . '/services_' . $this->environment . self::CONFIG_EXTS, 'glob'); $loader->load($confDir . '/services/*' . self::CONFIG_EXTS, 'glob'); } - - protected function configureRoutes(RouteCollectionBuilder $routes): void - { - $confDir = $this->getProjectDir() . '/config'; - - $routes->import($confDir . '/{routes}/*' . self::CONFIG_EXTS, '/', 'glob'); - } } diff --git a/composer.json b/composer.json index f545044a3..84eadf11b 100644 --- a/composer.json +++ b/composer.json @@ -4,7 +4,7 @@ "type": "project", "description": "An example project applying Domain-Driven Design, Hexagonal Architecture and CQRS in a Monorepository", "require": { - "php": "^8.0", + "php": "^8.1", "ext-amqp": "*", "ext-apcu": "*", @@ -12,20 +12,23 @@ "ext-zend-opcache": "*", "ext-pdo": "*", - "symfony/framework-bundle": "^5.3", - "symfony/messenger": "^5.3", - "symfony/dotenv": "^5.3", - "symfony/yaml": "^5.3", - "symfony/twig-bundle": "^5.3", - "symfony/validator": "^5.3", + "symfony/framework-bundle": "^5.4", + "symfony/messenger": "^5.4", + "symfony/dotenv": "^5.4", + "symfony/yaml": "^5.4", + "symfony/twig-bundle": "^5.4", + "symfony/validator": "^5.4", + "symfony/cache": "^5.4", "lambdish/phunctional": "^2.0", - "ramsey/uuid": "^3.9", + "ramsey/uuid": "^4.2", "doctrine/dbal": "^2.10", "doctrine/orm": "^2.7", - "ocramius/proxy-manager": "2.8.1", + + "ocramius/proxy-manager": "^2.13", + "laminas/laminas-zendframework-bridge": "^1.4", "elasticsearch/elasticsearch": "^7.3", "monolog/monolog": "^2.1", @@ -37,10 +40,10 @@ "roave/security-advisories": "dev-master", - "behat/behat": "^3.6", - "friends-of-behat/mink-extension": "^2.4", - "behat/mink-browserkit-driver": "^1.3", - "friends-of-behat/symfony-extension": "^2.1", + "behat/behat": "^3.10", + "friends-of-behat/mink-extension": "^2.6", + "friends-of-behat/symfony-extension": "^2.3", + "behat/mink-browserkit-driver": "^2.0", "phpunit/phpunit": "^9.2", "mockery/mockery": "^1.4", @@ -48,7 +51,7 @@ "fzaninotto/faker": "^1.9", "symfony/debug": "^4.4", - "vimeo/psalm": "^4.1" + "vimeo/psalm": "^4.10" }, "autoload": { "psr-4": { @@ -66,5 +69,10 @@ "CodelyTv\\Tests\\": ["tests"] } }, - "minimum-stability": "RC" + "minimum-stability": "RC", + "config": { + "allow-plugins": { + "ocramius/package-versions": true + } + } } diff --git a/composer.lock b/composer.lock index 3a830a86b..2511b3011 100644 --- a/composer.lock +++ b/composer.lock @@ -4,173 +4,87 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "fd5ca2317656ef5a38a2382763b46ac2", + "content-hash": "545aff6813f8015080116169f732d738", "packages": [ { - "name": "composer/package-versions-deprecated", - "version": "1.8.2", + "name": "brick/math", + "version": "0.9.3", "source": { "type": "git", - "url": "https://github.com/composer/package-versions-deprecated.git", - "reference": "7a8001fe2c9befad9d001bf54ef0b4a17d950d0f" + "url": "https://github.com/brick/math.git", + "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/7a8001fe2c9befad9d001bf54ef0b4a17d950d0f", - "reference": "7a8001fe2c9befad9d001bf54ef0b4a17d950d0f", + "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae", + "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae", "shasum": "" }, "require": { - "composer-plugin-api": "^1.1.0 || ^2.0", - "php": "^7" - }, - "replace": { - "ocramius/package-versions": "1.8.99" + "ext-json": "*", + "php": "^7.1 || ^8.0" }, "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" - } + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", + "vimeo/psalm": "4.9.2" }, + "type": "library", "autoload": { "psr-4": { - "PackageVersions\\": "src/PackageVersions" + "Brick\\Math\\": "src/" } }, "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": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" ], - "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.8.2" + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.9.3" }, "funding": [ { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", + "url": "https://github.com/BenMorel", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "url": "https://tidelift.com/funding/github/packagist/brick/math", "type": "tidelift" } ], - "time": "2020-07-10T14:10:26+00:00" - }, - { - "name": "doctrine/annotations", - "version": "1.13.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f", - "reference": "e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f", - "shasum": "" - }, - "require": { - "doctrine/lexer": "1.*", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^0.12.20", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2" - }, - "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.13.1" - }, - "time": "2021-05-16T18:07:53+00:00" + "time": "2021-08-15T20:50:18+00:00" }, { "name": "doctrine/cache", - "version": "2.0.3", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "c9622c6820d3ede1e2315a6a377ea1076e421d88" + "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/c9622c6820d3ede1e2315a6a377ea1076e421d88", - "reference": "c9622c6820d3ede1e2315a6a377ea1076e421d88", + "url": "https://api.github.com/repos/doctrine/cache/zipball/331b4d5dbaeab3827976273e9356b3b453c300ce", + "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce", "shasum": "" }, "require": { "php": "~7.1 || ^8.0" }, "conflict": { - "doctrine/common": ">2.2,<2.4", - "psr/cache": ">=3" + "doctrine/common": ">2.2,<2.4" }, "require-dev": { "alcaeus/mongo-php-adapter": "^1.1", @@ -179,8 +93,9 @@ "mongodb/mongodb": "^1.1", "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", "predis/predis": "~1.0", - "psr/cache": "^1.0 || ^2.0", - "symfony/cache": "^4.4 || ^5.2" + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/cache": "^4.4 || ^5.2 || ^6.0@dev", + "symfony/var-exporter": "^4.4 || ^5.2 || ^6.0@dev" }, "suggest": { "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" @@ -232,7 +147,7 @@ ], "support": { "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.0.3" + "source": "https://github.com/doctrine/cache/tree/2.1.1" }, "funding": [ { @@ -248,30 +163,30 @@ "type": "tidelift" } ], - "time": "2021-05-25T09:43:04+00:00" + "time": "2021-07-17T14:49:29+00:00" }, { "name": "doctrine/collections", - "version": "1.6.7", + "version": "1.6.8", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a" + "reference": "1958a744696c6bb3bb0d28db2611dc11610e78af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/55f8b799269a1a472457bd1a41b4f379d4cfba4a", - "reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a", + "url": "https://api.github.com/repos/doctrine/collections/zipball/1958a744696c6bb3bb0d28db2611dc11610e78af", + "reference": "1958a744696c6bb3bb0d28db2611dc11610e78af", "shasum": "" }, "require": { "php": "^7.1.3 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan-shim": "^0.9.2", - "phpunit/phpunit": "^7.0", - "vimeo/psalm": "^3.8.1" + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.1.5", + "vimeo/psalm": "^4.2.1" }, "type": "library", "autoload": { @@ -315,22 +230,22 @@ ], "support": { "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/1.6.7" + "source": "https://github.com/doctrine/collections/tree/1.6.8" }, - "time": "2020-07-27T17:53:49+00:00" + "time": "2021-08-10T18:51:53+00:00" }, { "name": "doctrine/common", - "version": "3.1.2", + "version": "3.2.2", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "a036d90c303f3163b5be8b8fde9b6755b2be4a3a" + "reference": "295082d3750987065912816a9d536c2df735f637" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/a036d90c303f3163b5be8b8fde9b6755b2be4a3a", - "reference": "a036d90c303f3163b5be8b8fde9b6755b2be4a3a", + "url": "https://api.github.com/repos/doctrine/common/zipball/295082d3750987065912816a9d536c2df735f637", + "reference": "295082d3750987065912816a9d536c2df735f637", "shasum": "" }, "require": { @@ -338,9 +253,9 @@ "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0 || ^8.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", + "doctrine/coding-standard": "^9.0", + "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": "^4.0.5", @@ -391,7 +306,7 @@ ], "support": { "issues": "https://github.com/doctrine/common/issues", - "source": "https://github.com/doctrine/common/tree/3.1.2" + "source": "https://github.com/doctrine/common/tree/3.2.2" }, "funding": [ { @@ -407,20 +322,20 @@ "type": "tidelift" } ], - "time": "2021-02-10T20:18:51+00:00" + "time": "2022-02-02T09:15:57+00:00" }, { "name": "doctrine/dbal", - "version": "2.13.2", + "version": "2.13.7", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "8dd39d2ead4409ce652fd4f02621060f009ea5e4" + "reference": "6e22f6012b42d7932674857989fcf184e9e9b1c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/8dd39d2ead4409ce652fd4f02621060f009ea5e4", - "reference": "8dd39d2ead4409ce652fd4f02621060f009ea5e4", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/6e22f6012b42d7932674857989fcf184e9e9b1c3", + "reference": "6e22f6012b42d7932674857989fcf184e9e9b1c3", "shasum": "" }, "require": { @@ -432,13 +347,14 @@ }, "require-dev": { "doctrine/coding-standard": "9.0.0", - "jetbrains/phpstorm-stubs": "2020.2", - "phpstan/phpstan": "0.12.81", - "phpunit/phpunit": "^7.5.20|^8.5|9.5.5", - "squizlabs/php_codesniffer": "3.6.0", + "jetbrains/phpstorm-stubs": "2021.1", + "phpstan/phpstan": "1.3.0", + "phpunit/phpunit": "^7.5.20|^8.5|9.5.11", + "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.6.4" + "vimeo/psalm": "4.16.1" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -499,7 +415,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/2.13.2" + "source": "https://github.com/doctrine/dbal/tree/2.13.7" }, "funding": [ { @@ -515,7 +431,7 @@ "type": "tidelift" } ], - "time": "2021-06-18T21:48:39+00:00" + "time": "2022-01-06T09:08:04+00:00" }, { "name": "doctrine/deprecations", @@ -656,34 +572,30 @@ }, { "name": "doctrine/inflector", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210" + "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/9cf661f4eb38f7c881cac67c75ea9b00bf97b210", - "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", + "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^7.0", - "phpstan/phpstan": "^0.11", - "phpstan/phpstan-phpunit": "^0.11", - "phpstan/phpstan-strict-rules": "^0.11", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "doctrine/coding-standard": "^8.2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "vimeo/psalm": "^4.10" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" @@ -731,7 +643,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.x" + "source": "https://github.com/doctrine/inflector/tree/2.0.4" }, "funding": [ { @@ -747,7 +659,7 @@ "type": "tidelift" } ], - "time": "2020-05-29T15:13:26+00:00" + "time": "2021-10-22T20:16:43+00:00" }, { "name": "doctrine/instantiator", @@ -820,32 +732,28 @@ }, { "name": "doctrine/lexer", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + "reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c", + "reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan": "^0.11.8", - "phpunit/phpunit": "^8.2" + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" @@ -880,7 +788,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.1" + "source": "https://github.com/doctrine/lexer/tree/1.2.2" }, "funding": [ { @@ -896,48 +804,55 @@ "type": "tidelift" } ], - "time": "2020-05-25T17:44:05+00:00" + "time": "2022-01-12T08:27:12+00:00" }, { "name": "doctrine/orm", - "version": "2.9.3", + "version": "2.11.1", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "82e77cf5089a1303733f75f0f0ed01be3ab9ec22" + "reference": "4b88ce787d3916c8366abf52f6c658a7a27ed3a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/82e77cf5089a1303733f75f0f0ed01be3ab9ec22", - "reference": "82e77cf5089a1303733f75f0f0ed01be3ab9ec22", + "url": "https://api.github.com/repos/doctrine/orm/zipball/4b88ce787d3916c8366abf52f6c658a7a27ed3a6", + "reference": "4b88ce787d3916c8366abf52f6c658a7a27ed3a6", "shasum": "" }, "require": { - "composer/package-versions-deprecated": "^1.8", - "doctrine/annotations": "^1.13", - "doctrine/cache": "^1.11.3|^2.0.3", + "composer-runtime-api": "^2", + "doctrine/cache": "^1.12.1 || ^2.1.1", "doctrine/collections": "^1.5", "doctrine/common": "^3.0.3", - "doctrine/dbal": "^2.13.0", + "doctrine/dbal": "^2.13.1 || ^3.2", "doctrine/deprecations": "^0.5.3", "doctrine/event-manager": "^1.1", - "doctrine/inflector": "^1.4|^2.0", + "doctrine/inflector": "^1.4 || ^2.0", "doctrine/instantiator": "^1.3", "doctrine/lexer": "^1.0", "doctrine/persistence": "^2.2", + "ext-ctype": "*", "ext-pdo": "*", - "php": "^7.1|^8.0", + "php": "^7.1 || ^8.0", "psr/cache": "^1 || ^2 || ^3", - "symfony/console": "^3.0|^4.0|^5.0|^6.0" + "symfony/console": "^3.0 || ^4.0 || ^5.0 || ^6.0", + "symfony/polyfill-php72": "^1.23", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "doctrine/annotations": "<1.13 || >= 2.0" }, "require-dev": { + "doctrine/annotations": "^1.13", "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "^0.12.83", - "phpunit/phpunit": "^7.5|^8.5|^9.4", - "squizlabs/php_codesniffer": "3.6.0", - "symfony/cache": "^4.4|^5.2", - "symfony/yaml": "^3.4|^4.0|^5.0|^6.0", - "vimeo/psalm": "4.7.0" + "phpbench/phpbench": "^0.16.10 || ^1.0", + "phpstan/phpstan": "1.4.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", + "squizlabs/php_codesniffer": "3.6.2", + "symfony/cache": "^4.4 || ^5.4 || ^6.0", + "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0", + "vimeo/psalm": "4.19.0" }, "suggest": { "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0", @@ -986,44 +901,45 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.9.3" + "source": "https://github.com/doctrine/orm/tree/2.11.1" }, - "time": "2021-06-13T10:29:22+00:00" + "time": "2022-01-30T21:47:06+00:00" }, { "name": "doctrine/persistence", - "version": "2.2.1", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "d138f3ab5f761055cab1054070377cfd3222e368" + "reference": "f8af155c1e7963f3d2b4415097d55757bbaa53d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/d138f3ab5f761055cab1054070377cfd3222e368", - "reference": "d138f3ab5f761055cab1054070377cfd3222e368", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/f8af155c1e7963f3d2b4415097d55757bbaa53d8", + "reference": "f8af155c1e7963f3d2b4415097d55757bbaa53d8", "shasum": "" }, "require": { - "doctrine/annotations": "^1.0", "doctrine/cache": "^1.11 || ^2.0", "doctrine/collections": "^1.0", "doctrine/deprecations": "^0.5.3", "doctrine/event-manager": "^1.0", "php": "^7.1 || ^8.0", - "psr/cache": "^1.0|^2.0|^3.0" + "psr/cache": "^1.0 || ^2.0 || ^3.0" }, "conflict": { + "doctrine/annotations": "<1.0 || >=2.0", "doctrine/common": "<2.10@dev" }, "require-dev": { "composer/package-versions-deprecated": "^1.11", + "doctrine/annotations": "^1.0", "doctrine/coding-standard": "^6.0 || ^9.0", "doctrine/common": "^3.0", - "phpstan/phpstan": "0.12.84", + "phpstan/phpstan": "1.2.0", "phpunit/phpunit": "^7.5.20 || ^8.0 || ^9.0", - "symfony/cache": "^4.4|^5.0", - "vimeo/psalm": "4.7.0" + "symfony/cache": "^4.4 || ^5.0 || ^6.0", + "vimeo/psalm": "4.13.1" }, "type": "library", "autoload": { @@ -1073,29 +989,29 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/2.2.1" + "source": "https://github.com/doctrine/persistence/tree/2.3.0" }, - "time": "2021-05-19T07:07:01+00:00" + "time": "2022-01-09T19:58:46+00:00" }, { "name": "elasticsearch/elasticsearch", - "version": "v7.13.1", + "version": "v7.17.0", "source": { "type": "git", "url": "https://github.com/elastic/elasticsearch-php.git", - "reference": "45e17adacd3319958d6135e4ee3a21dbbe36a24b" + "reference": "1890f9d7fde076b5a3ddcf579a802af05b2e781b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/45e17adacd3319958d6135e4ee3a21dbbe36a24b", - "reference": "45e17adacd3319958d6135e4ee3a21dbbe36a24b", + "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/1890f9d7fde076b5a3ddcf579a802af05b2e781b", + "reference": "1890f9d7fde076b5a3ddcf579a802af05b2e781b", "shasum": "" }, "require": { "ext-json": ">=1.3.7", "ezimuel/ringphp": "^1.1.2", "php": "^7.3 || ^8.0", - "psr/log": "~1.0" + "psr/log": "^1|^2|^3" }, "require-dev": { "ext-yaml": "*", @@ -1121,7 +1037,8 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" + "Apache-2.0", + "LGPL-2.1-only" ], "authors": [ { @@ -1139,9 +1056,9 @@ ], "support": { "issues": "https://github.com/elastic/elasticsearch-php/issues", - "source": "https://github.com/elastic/elasticsearch-php/tree/v7.13.1" + "source": "https://github.com/elastic/elasticsearch-php/tree/v7.17.0" }, - "time": "2021-06-15T18:36:52+00:00" + "time": "2022-02-03T13:40:04+00:00" }, { "name": "endclothing/prometheus_client_php", @@ -1247,16 +1164,16 @@ }, { "name": "ezimuel/ringphp", - "version": "1.1.2", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/ezimuel/ringphp.git", - "reference": "0b78f89d8e0bb9e380046c31adfa40347e9f663b" + "reference": "92b8161404ab1ad84059ebed41d9f757e897ce74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezimuel/ringphp/zipball/0b78f89d8e0bb9e380046c31adfa40347e9f663b", - "reference": "0b78f89d8e0bb9e380046c31adfa40347e9f663b", + "url": "https://api.github.com/repos/ezimuel/ringphp/zipball/92b8161404ab1ad84059ebed41d9f757e897ce74", + "reference": "92b8161404ab1ad84059ebed41d9f757e897ce74", "shasum": "" }, "require": { @@ -1264,9 +1181,12 @@ "php": ">=5.4.0", "react/promise": "~2.0" }, + "replace": { + "guzzlehttp/ringphp": "self.version" + }, "require-dev": { "ext-curl": "*", - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "~9.0" }, "suggest": { "ext-curl": "Guzzle will use specific adapters if cURL is present" @@ -1295,9 +1215,9 @@ ], "description": "Fork of guzzle/RingPHP (abandoned) to be used with elasticsearch-php", "support": { - "source": "https://github.com/ezimuel/ringphp/tree/1.1.2" + "source": "https://github.com/ezimuel/ringphp/tree/1.2.0" }, - "time": "2020-02-14T23:51:21+00:00" + "time": "2021-11-16T11:51:30+00:00" }, { "name": "guzzlehttp/guzzle", @@ -1335,12 +1255,12 @@ } }, "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1372,16 +1292,16 @@ }, { "name": "guzzlehttp/promises", - "version": "1.4.1", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", - "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", "shasum": "" }, "require": { @@ -1393,7 +1313,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.5-dev" } }, "autoload": { @@ -1409,10 +1329,25 @@ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle promises library", @@ -1421,22 +1356,36 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.4.1" + "source": "https://github.com/guzzle/promises/tree/1.5.1" }, - "time": "2021-03-07T09:25:29+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2021-10-22T20:56:57+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.8.2", + "version": "1.8.3", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "dc960a912984efb74d0a90222870c72c87f10c91" + "reference": "1afdd860a2566ed3c2b0b4a3de6e23434a79ec85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91", - "reference": "dc960a912984efb74d0a90222870c72c87f10c91", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/1afdd860a2566ed3c2b0b4a3de6e23434a79ec85", + "reference": "1afdd860a2566ed3c2b0b4a3de6e23434a79ec85", "shasum": "" }, "require": { @@ -1461,25 +1410,46 @@ } }, "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, { "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", "homepage": "https://github.com/Tobion" } ], @@ -1496,9 +1466,23 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.8.2" + "source": "https://github.com/guzzle/psr7/tree/1.8.3" }, - "time": "2021-04-26T09:17:50+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2021-10-05T13:56:00+00:00" }, { "name": "lambdish/phunctional", @@ -1558,35 +1542,29 @@ }, { "name": "laminas/laminas-code", - "version": "3.5.1", + "version": "4.5.1", "source": { "type": "git", "url": "https://github.com/laminas/laminas-code.git", - "reference": "b549b70c0bb6e935d497f84f750c82653326ac77" + "reference": "6fd96d4d913571a2cd056a27b123fa28cb90ac4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/b549b70c0bb6e935d497f84f750c82653326ac77", - "reference": "b549b70c0bb6e935d497f84f750c82653326ac77", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/6fd96d4d913571a2cd056a27b123fa28cb90ac4e", + "reference": "6fd96d4d913571a2cd056a27b123fa28cb90ac4e", "shasum": "" }, "require": { - "laminas/laminas-eventmanager": "^3.3", - "laminas/laminas-zendframework-bridge": "^1.1", - "php": "^7.3 || ~8.0.0" - }, - "conflict": { - "phpspec/prophecy": "<1.9.0" - }, - "replace": { - "zendframework/zend-code": "^3.4.1" + "php": ">=7.4, <8.2" }, "require-dev": { - "doctrine/annotations": "^1.10.4", + "doctrine/annotations": "^1.13.2", "ext-phar": "*", - "laminas/laminas-coding-standard": "^1.0.0", - "laminas/laminas-stdlib": "^3.3.0", - "phpunit/phpunit": "^9.4.2" + "laminas/laminas-coding-standard": "^2.3.0", + "laminas/laminas-stdlib": "^3.6.1", + "phpunit/phpunit": "^9.5.10", + "psalm/plugin-phpunit": "^0.16.1", + "vimeo/psalm": "^4.13.1" }, "suggest": { "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", @@ -1596,7 +1574,10 @@ "autoload": { "psr-4": { "Laminas\\Code\\": "src/" - } + }, + "files": [ + "polyfill/ReflectionEnumPolyfill.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1606,7 +1587,8 @@ "homepage": "https://laminas.dev", "keywords": [ "code", - "laminas" + "laminas", + "laminasframework" ], "support": { "chat": "https://laminas.dev/chat", @@ -1622,93 +1604,27 @@ "type": "community_bridge" } ], - "time": "2020-11-30T20:16:31+00:00" - }, - { - "name": "laminas/laminas-eventmanager", - "version": "3.3.1", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-eventmanager.git", - "reference": "966c859b67867b179fde1eff0cd38df51472ce4a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/966c859b67867b179fde1eff0cd38df51472ce4a", - "reference": "966c859b67867b179fde1eff0cd38df51472ce4a", - "shasum": "" - }, - "require": { - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^7.3 || ^8.0" - }, - "replace": { - "zendframework/zend-eventmanager": "^3.2.1" - }, - "require-dev": { - "container-interop/container-interop": "^1.1", - "laminas/laminas-coding-standard": "~1.0.0", - "laminas/laminas-stdlib": "^2.7.3 || ^3.0", - "phpbench/phpbench": "^0.17.1", - "phpunit/phpunit": "^8.5.8" - }, - "suggest": { - "container-interop/container-interop": "^1.1, to use the lazy listeners feature", - "laminas/laminas-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" - }, - "type": "library", - "autoload": { - "psr-4": { - "Laminas\\EventManager\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Trigger and listen to events within a PHP application", - "homepage": "https://laminas.dev", - "keywords": [ - "event", - "eventmanager", - "events", - "laminas" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-eventmanager/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-eventmanager/issues", - "rss": "https://github.com/laminas/laminas-eventmanager/releases.atom", - "source": "https://github.com/laminas/laminas-eventmanager" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2021-03-08T15:24:29+00:00" + "time": "2021-12-19T18:06:55+00:00" }, { "name": "laminas/laminas-zendframework-bridge", - "version": "1.3.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/laminas/laminas-zendframework-bridge.git", - "reference": "13af2502d9bb6f7d33be2de4b51fb68c6cdb476e" + "reference": "88bf037259869891afce6504cacc4f8a07b24d0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/13af2502d9bb6f7d33be2de4b51fb68c6cdb476e", - "reference": "13af2502d9bb6f7d33be2de4b51fb68c6cdb476e", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/88bf037259869891afce6504cacc4f8a07b24d0f", + "reference": "88bf037259869891afce6504cacc4f8a07b24d0f", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": "^7.3 || ~8.0.0 || ~8.1.0" }, "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3", + "phpunit/phpunit": "^9.3", "psalm/plugin-phpunit": "^0.15.1", "squizlabs/php_codesniffer": "^3.5", "vimeo/psalm": "^4.6" @@ -1750,28 +1666,28 @@ "type": "community_bridge" } ], - "time": "2021-06-24T12:49:22+00:00" + "time": "2021-12-21T14:34:37+00:00" }, { "name": "monolog/monolog", - "version": "2.2.0", + "version": "2.3.5", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084" + "reference": "fd4380d6fc37626e2f799f29d91195040137eba9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1cb1cde8e8dd0f70cc0fe51354a59acad9302084", - "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd4380d6fc37626e2f799f29d91195040137eba9", + "reference": "fd4380d6fc37626e2f799f29d91195040137eba9", "shasum": "" }, "require": { "php": ">=7.2", - "psr/log": "^1.0.1" + "psr/log": "^1.0.1 || ^2.0 || ^3.0" }, "provide": { - "psr/log-implementation": "1.0.0" + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" }, "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", @@ -1779,14 +1695,14 @@ "elasticsearch/elasticsearch": "^7", "graylog2/gelf-php": "^1.4.2", "mongodb/mongodb": "^1.8", - "php-amqplib/php-amqplib": "~2.4", + "php-amqplib/php-amqplib": "~2.4 || ^3", "php-console/php-console": "^3.1.3", "phpspec/prophecy": "^1.6.1", - "phpstan/phpstan": "^0.12.59", + "phpstan/phpstan": "^0.12.91", "phpunit/phpunit": "^8.5", "predis/predis": "^1.1", "rollbar/rollbar": "^1.3", - "ruflin/elastica": ">=0.90 <7.0.1", + "ruflin/elastica": ">=0.90@dev", "swiftmailer/swiftmailer": "^5.3|^6.0" }, "suggest": { @@ -1794,8 +1710,11 @@ "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-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 library)", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", @@ -1834,7 +1753,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.2.0" + "source": "https://github.com/Seldaek/monolog/tree/2.3.5" }, "funding": [ { @@ -1846,43 +1765,45 @@ "type": "tidelift" } ], - "time": "2020-12-14T13:15:25+00:00" + "time": "2021-10-01T21:08:31+00:00" }, { "name": "ocramius/proxy-manager", - "version": "2.8.1", + "version": "2.13.0", "source": { "type": "git", "url": "https://github.com/Ocramius/ProxyManager.git", - "reference": "371c8f2d9d1e888ce1f8f2137d9187252b07ee94" + "reference": "21e2b4aa7d7661e7641cc6362fc8635ddcfa8464" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/371c8f2d9d1e888ce1f8f2137d9187252b07ee94", - "reference": "371c8f2d9d1e888ce1f8f2137d9187252b07ee94", + "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/21e2b4aa7d7661e7641cc6362fc8635ddcfa8464", + "reference": "21e2b4aa7d7661e7641cc6362fc8635ddcfa8464", "shasum": "" }, "require": { - "laminas/laminas-code": "^3.4.1", - "ocramius/package-versions": "^1.8.0,<1.10.0", - "php": "~7.4.1", - "webimpress/safe-writer": "^2.0.1" + "composer-runtime-api": "^2.1.0", + "laminas/laminas-code": "^4.3.0", + "php": "~7.4.1 || ~8.0.0", + "webimpress/safe-writer": "^2.2.0" }, "conflict": { "doctrine/annotations": "<1.6.1", "laminas/laminas-stdlib": "<3.2.1", + "thecodingmachine/safe": "<1.3.3", "zendframework/zend-stdlib": "<3.2.1" }, "require-dev": { - "doctrine/coding-standard": "^6.0.0", + "codelicia/xulieta": "^0.1.6", + "doctrine/coding-standard": "^8.2.1", "ext-phar": "*", - "infection/infection": "^0.16.2", - "nikic/php-parser": "^4.4.0", - "phpbench/phpbench": "^0.17.0", - "phpunit/phpunit": "^9.1.1", - "slevomat/coding-standard": "^5.0.4", - "squizlabs/php_codesniffer": "^3.5.4", - "vimeo/psalm": "^3.11.1" + "infection/infection": "^0.21.5", + "nikic/php-parser": "^4.10.5", + "phpbench/phpbench": "^0.17.1 || 1.0.0-alpha2", + "phpunit/phpunit": "^9.5.4", + "slevomat/coding-standard": "^6.3.10", + "squizlabs/php_codesniffer": "^3.6.0", + "vimeo/psalm": "^4.4.1" }, "suggest": { "laminas/laminas-json": "To have the JsonRpc adapter (Remote Object feature)", @@ -1923,7 +1844,7 @@ ], "support": { "issues": "https://github.com/Ocramius/ProxyManager/issues", - "source": "https://github.com/Ocramius/ProxyManager/tree/2.8.1" + "source": "https://github.com/Ocramius/ProxyManager/tree/2.13.0" }, "funding": [ { @@ -1935,57 +1856,7 @@ "type": "tidelift" } ], - "time": "2020-07-13T19:23:57+00:00" - }, - { - "name": "paragonie/random_compat", - "version": "v9.99.99", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "shasum": "" - }, - "require": { - "php": "^7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/random_compat/issues", - "source": "https://github.com/paragonie/random_compat" - }, - "time": "2018-07-02T15:55:56+00:00" + "time": "2021-06-09T10:16:06+00:00" }, { "name": "psr/cache", @@ -2038,20 +1909,20 @@ }, { "name": "psr/container", - "version": "1.1.1", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", "shasum": "" }, "require": { - "php": ">=7.2.0" + "php": ">=7.4.0" }, "type": "library", "autoload": { @@ -2080,9 +1951,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.1" + "source": "https://github.com/php-fig/container/tree/1.1.2" }, - "time": "2021-03-05T17:36:06+00:00" + "time": "2021-11-05T16:50:12+00:00" }, { "name": "psr/event-dispatcher", @@ -2189,30 +2060,30 @@ }, { "name": "psr/log", - "version": "1.1.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" }, "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/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2233,9 +2104,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "source": "https://github.com/php-fig/log/tree/3.0.0" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2021-07-14T16:46:02+00:00" }, { "name": "ralouphie/getallheaders", @@ -2281,55 +2152,147 @@ }, "time": "2019-03-08T08:55:37+00:00" }, + { + "name": "ramsey/collection", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8", + "symfony/polyfill-php81": "^1.23" + }, + "require-dev": { + "captainhook/captainhook": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "ergebnis/composer-normalize": "^2.6", + "fakerphp/faker": "^1.5", + "hamcrest/hamcrest-php": "^2", + "jangregor/phpstan-prophecy": "^0.8", + "mockery/mockery": "^1.3", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1", + "phpstan/phpstan": "^0.12.32", + "phpstan/phpstan-mockery": "^0.12.5", + "phpstan/phpstan-phpunit": "^0.12.11", + "phpunit/phpunit": "^8.5 || ^9", + "psy/psysh": "^0.10.4", + "slevomat/coding-standard": "^6.3", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/1.2.2" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2021-10-10T03:01:02+00:00" + }, { "name": "ramsey/uuid", - "version": "3.9.3", + "version": "4.2.3", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "7e1633a6964b48589b142d60542f9ed31bd37a92" + "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/7e1633a6964b48589b142d60542f9ed31bd37a92", - "reference": "7e1633a6964b48589b142d60542f9ed31bd37a92", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", "shasum": "" }, "require": { + "brick/math": "^0.8 || ^0.9", "ext-json": "*", - "paragonie/random_compat": "^1 | ^2 | 9.99.99", - "php": "^5.4 | ^7 | ^8", - "symfony/polyfill-ctype": "^1.8" + "php": "^7.2 || ^8.0", + "ramsey/collection": "^1.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php80": "^1.14" }, "replace": { "rhumsaa/uuid": "self.version" }, "require-dev": { - "codeception/aspect-mock": "^1 | ^2", - "doctrine/annotations": "^1.2", - "goaop/framework": "1.0.0-alpha.2 | ^1 | ^2.1", - "jakub-onderka/php-parallel-lint": "^1", - "mockery/mockery": "^0.9.11 | ^1", + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", "moontoast/math": "^1.1", "paragonie/random-lib": "^2", - "php-mock/php-mock-phpunit": "^0.3 | ^1.1", - "phpunit/phpunit": "^4.8 | ^5.4 | ^6.5", - "squizlabs/php_codesniffer": "^3.5" + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5 || ^9", + "slevomat/coding-standard": "^7.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" }, "suggest": { - "ext-ctype": "Provides support for PHP Ctype functions", - "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", - "ext-openssl": "Provides the OpenSSL extension for use with the OpenSslGenerator", - "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", - "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-ctype": "Enables faster processing of character classification using ctype functions.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.x-dev" + "dev-main": "4.x-dev" + }, + "captainhook": { + "force-install": true } }, "autoload": { @@ -2344,23 +2307,7 @@ "license": [ "MIT" ], - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - }, - { - "name": "Marijn Huizendveld", - "email": "marijn.huizendveld@gmail.com" - }, - { - "name": "Thibaud Fabre", - "email": "thibaud@aztech.io" - } - ], - "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", - "homepage": "https://github.com/ramsey/uuid", + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", "keywords": [ "guid", "identifier", @@ -2368,40 +2315,48 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "rss": "https://github.com/ramsey/uuid/releases.atom", - "source": "https://github.com/ramsey/uuid", - "wiki": "https://github.com/ramsey/uuid/wiki" + "source": "https://github.com/ramsey/uuid/tree/4.2.3" }, - "time": "2020-02-21T04:36:14+00:00" + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2021-09-25T23:10:38+00:00" }, { "name": "react/promise", - "version": "v2.8.0", + "version": "v2.9.0", "source": { "type": "git", "url": "https://github.com/reactphp/promise.git", - "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4" + "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4", - "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4", + "url": "https://api.github.com/repos/reactphp/promise/zipball/234f8fd1023c9158e2314fa9d7d0e6a83db42910", + "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910", "shasum": "" }, "require": { "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36" + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" }, "type": "library", "autoload": { - "psr-4": { - "React\\Promise\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "React\\Promise\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2410,7 +2365,23 @@ "authors": [ { "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com" + "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", @@ -2420,36 +2391,46 @@ ], "support": { "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v2.8.0" + "source": "https://github.com/reactphp/promise/tree/v2.9.0" }, - "time": "2020-05-12T15:16:56+00:00" + "funding": [ + { + "url": "https://github.com/WyriHaximus", + "type": "github" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2022-02-11T10:27:51+00:00" }, { "name": "symfony/amqp-messenger", - "version": "v5.3.2", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/amqp-messenger.git", - "reference": "2d8f975c1d0a826feb044dcbe5424cb9c35ae9fd" + "reference": "e1bb5b0c812290643615b0ecebfe8debfd42ce5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/amqp-messenger/zipball/2d8f975c1d0a826feb044dcbe5424cb9c35ae9fd", - "reference": "2d8f975c1d0a826feb044dcbe5424cb9c35ae9fd", + "url": "https://api.github.com/repos/symfony/amqp-messenger/zipball/e1bb5b0c812290643615b0ecebfe8debfd42ce5c", + "reference": "e1bb5b0c812290643615b0ecebfe8debfd42ce5c", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/messenger": "^5.3" + "ext-amqp": "*", + "php": ">=8.0.2", + "symfony/messenger": "^5.4|^6.0" }, "require-dev": { - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "symfony/property-access": "^4.4|^5.0", - "symfony/serializer": "^4.4|^5.0" + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" }, - "type": "symfony-bridge", + "type": "symfony-messenger-bridge", "autoload": { "psr-4": { "Symfony\\Component\\Messenger\\Bridge\\Amqp\\": "" @@ -2475,7 +2456,7 @@ "description": "Symfony AMQP extension Messenger Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/amqp-messenger/tree/v5.3.2" + "source": "https://github.com/symfony/amqp-messenger/tree/v6.0.3" }, "funding": [ { @@ -2491,55 +2472,56 @@ "type": "tidelift" } ], - "time": "2021-06-17T12:34:27+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/cache", - "version": "v5.3.0", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "44fd0f97d1fb198d344f22379dfc56af2221e608" + "reference": "4178f0a19ec3f1f76e7f1a07b8187cbe3d94b825" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/44fd0f97d1fb198d344f22379dfc56af2221e608", - "reference": "44fd0f97d1fb198d344f22379dfc56af2221e608", + "url": "https://api.github.com/repos/symfony/cache/zipball/4178f0a19ec3f1f76e7f1a07b8187cbe3d94b825", + "reference": "4178f0a19ec3f1f76e7f1a07b8187cbe3d94b825", "shasum": "" }, "require": { "php": ">=7.2.5", "psr/cache": "^1.0|^2.0", - "psr/log": "^1.1", + "psr/log": "^1.1|^2|^3", "symfony/cache-contracts": "^1.1.7|^2", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-php80": "^1.15", - "symfony/service-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0" + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/var-exporter": "^4.4|^5.0|^6.0" }, "conflict": { - "doctrine/dbal": "<2.10", + "doctrine/dbal": "<2.13.1", "symfony/dependency-injection": "<4.4", "symfony/http-kernel": "<4.4", "symfony/var-dumper": "<4.4" }, "provide": { "psr/cache-implementation": "1.0|2.0", - "psr/simple-cache-implementation": "1.0", + "psr/simple-cache-implementation": "1.0|2.0", "symfony/cache-implementation": "1.0|2.0" }, "require-dev": { "cache/integration-tests": "dev-master", "doctrine/cache": "^1.6|^2.0", - "doctrine/dbal": "^2.10|^3.0", + "doctrine/dbal": "^2.13.1|^3.0", "predis/predis": "^1.1", - "psr/simple-cache": "^1.0", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/filesystem": "^4.4|^5.0", - "symfony/http-kernel": "^4.4|^5.0", - "symfony/messenger": "^4.4|^5.0", - "symfony/var-dumper": "^4.4|^5.0" + "psr/simple-cache": "^1.0|^2.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" }, "type": "library", "autoload": { @@ -2571,7 +2553,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v5.3.0" + "source": "https://github.com/symfony/cache/tree/v5.4.3" }, "funding": [ { @@ -2587,20 +2569,20 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2022-01-26T16:28:35+00:00" }, { "name": "symfony/cache-contracts", - "version": "v2.4.0", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "c0446463729b89dd4fa62e9aeecc80287323615d" + "reference": "ac2e168102a2e06a2624f0379bde94cd5854ced2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/c0446463729b89dd4fa62e9aeecc80287323615d", - "reference": "c0446463729b89dd4fa62e9aeecc80287323615d", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/ac2e168102a2e06a2624f0379bde94cd5854ced2", + "reference": "ac2e168102a2e06a2624f0379bde94cd5854ced2", "shasum": "" }, "require": { @@ -2613,7 +2595,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -2650,7 +2632,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/cache-contracts/tree/v2.5.0" }, "funding": [ { @@ -2666,39 +2648,38 @@ "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2021-08-17T14:20:01+00:00" }, { "name": "symfony/config", - "version": "v5.3.2", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "9c307728cfacbd50914f0db28aee1e0ecd82b99f" + "reference": "c14f32ae4cd2a3c29d8825c5093463ac08ade7d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/9c307728cfacbd50914f0db28aee1e0ecd82b99f", - "reference": "9c307728cfacbd50914f0db28aee1e0ecd82b99f", + "url": "https://api.github.com/repos/symfony/config/zipball/c14f32ae4cd2a3c29d8825c5093463ac08ade7d8", + "reference": "c14f32ae4cd2a3c29d8825c5093463ac08ade7d8", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/filesystem": "^4.4|^5.0", + "php": ">=8.0.2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/filesystem": "^5.4|^6.0", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.15", "symfony/polyfill-php81": "^1.22" }, "conflict": { "symfony/finder": "<4.4" }, "require-dev": { - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/messenger": "^4.4|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/yaml": "^4.4|^5.0" + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/messenger": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/yaml": "^5.4|^6.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -2729,7 +2710,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/v5.3.2" + "source": "https://github.com/symfony/config/tree/v6.0.3" }, "funding": [ { @@ -2745,49 +2726,46 @@ "type": "tidelift" } ], - "time": "2021-06-12T10:15:17+00:00" + "time": "2022-01-03T09:53:43+00:00" }, { "name": "symfony/console", - "version": "v5.3.2", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "649730483885ff2ca99ca0560ef0e5f6b03f2ac1" + "reference": "22e8efd019c3270c4f79376234a3f8752cd25490" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/649730483885ff2ca99ca0560ef0e5f6b03f2ac1", - "reference": "649730483885ff2ca99ca0560ef0e5f6b03f2ac1", + "url": "https://api.github.com/repos/symfony/console/zipball/22e8efd019c3270c4f79376234a3f8752cd25490", + "reference": "22e8efd019c3270c4f79376234a3f8752cd25490", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", + "php": ">=8.0.2", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/polyfill-php80": "^1.15", - "symfony/service-contracts": "^1.1|^2", - "symfony/string": "^5.1" + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.4|^6.0" }, "conflict": { - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" }, "provide": { - "psr/log-implementation": "1.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/lock": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "symfony/var-dumper": "^4.4|^5.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" }, "suggest": { "psr/log": "For using the console logger", @@ -2827,7 +2805,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.3.2" + "source": "https://github.com/symfony/console/tree/v6.0.3" }, "funding": [ { @@ -2843,27 +2821,28 @@ "type": "tidelift" } ], - "time": "2021-06-12T09:42:48+00:00" + "time": "2022-01-26T17:23:29+00:00" }, { "name": "symfony/dependency-injection", - "version": "v5.3.2", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "ddbff73bc4fa3d5b415431d486770ab0e72f6516" + "reference": "974580fd67f14d65b045c11b09eb149cd4b13df5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ddbff73bc4fa3d5b415431d486770ab0e72f6516", - "reference": "ddbff73bc4fa3d5b415431d486770ab0e72f6516", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/974580fd67f14d65b045c11b09eb149cd4b13df5", + "reference": "974580fd67f14d65b045c11b09eb149cd4b13df5", "shasum": "" }, "require": { "php": ">=7.2.5", "psr/container": "^1.1.1", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-php80": "^1.15", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22", "symfony/service-contracts": "^1.1.6|^2" }, "conflict": { @@ -2878,9 +2857,9 @@ "symfony/service-implementation": "1.0|2.0" }, "require-dev": { - "symfony/config": "^5.3", - "symfony/expression-language": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0" + "symfony/config": "^5.3|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0" }, "suggest": { "symfony/config": "", @@ -2915,7 +2894,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/v5.3.2" + "source": "https://github.com/symfony/dependency-injection/tree/v5.4.3" }, "funding": [ { @@ -2931,29 +2910,29 @@ "type": "tidelift" } ], - "time": "2021-06-12T09:17:04+00:00" + "time": "2022-01-26T16:28:35+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.4.0", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" + "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/c726b64c1ccfe2896cb7df2e1331c357ad1c8ced", + "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.0.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -2982,7 +2961,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.0" }, "funding": [ { @@ -2998,38 +2977,37 @@ "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2021-11-01T23:48:49+00:00" }, { "name": "symfony/doctrine-messenger", - "version": "v5.3.2", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-messenger.git", - "reference": "beedb48475116c8c9c75fc6de70b35a656d4c442" + "reference": "3a51c50ecae4054b075ba23c7081be0bf536c785" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/beedb48475116c8c9c75fc6de70b35a656d4c442", - "reference": "beedb48475116c8c9c75fc6de70b35a656d4c442", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/3a51c50ecae4054b075ba23c7081be0bf536c785", + "reference": "3a51c50ecae4054b075ba23c7081be0bf536c785", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/messenger": "^5.1", - "symfony/service-contracts": "^1.1|^2" + "doctrine/dbal": "^2.13|^3.0", + "php": ">=8.0.2", + "symfony/messenger": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3" }, "conflict": { - "doctrine/dbal": "<2.10", "doctrine/persistence": "<1.3" }, "require-dev": { - "doctrine/dbal": "^2.10|^3.0", "doctrine/persistence": "^1.3|^2", - "symfony/property-access": "^4.4|^5.0", - "symfony/serializer": "^4.4|^5.0" + "symfony/property-access": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" }, - "type": "symfony-bridge", + "type": "symfony-messenger-bridge", "autoload": { "psr-4": { "Symfony\\Component\\Messenger\\Bridge\\Doctrine\\": "" @@ -3055,7 +3033,7 @@ "description": "Symfony Doctrine Messenger Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-messenger/tree/v5.3.2" + "source": "https://github.com/symfony/doctrine-messenger/tree/v6.0.3" }, "funding": [ { @@ -3071,28 +3049,29 @@ "type": "tidelift" } ], - "time": "2021-06-04T22:34:10+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/dotenv", - "version": "v5.3.0", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "1ac423fcc9548709077f90aca26c733cdb7e6e5c" + "reference": "84d1af2d39dd81b48eb1cd3af3f107eea7a275bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/1ac423fcc9548709077f90aca26c733cdb7e6e5c", - "reference": "1ac423fcc9548709077f90aca26c733cdb7e6e5c", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/84d1af2d39dd81b48eb1cd3af3f107eea7a275bb", + "reference": "84d1af2d39dd81b48eb1cd3af3f107eea7a275bb", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1" + "symfony/deprecation-contracts": "^2.1|^3" }, "require-dev": { - "symfony/process": "^4.4|^5.0" + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0" }, "type": "library", "autoload": { @@ -3125,7 +3104,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v5.3.0" + "source": "https://github.com/symfony/dotenv/tree/v5.4.3" }, "funding": [ { @@ -3141,33 +3120,35 @@ "type": "tidelift" } ], - "time": "2021-05-26T12:52:38+00:00" + "time": "2022-01-26T16:19:10+00:00" }, { "name": "symfony/error-handler", - "version": "v5.3.0", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "0e6768b8c0dcef26df087df2bbbaa143867a59b2" + "reference": "20343b3bad7ebafa38138ddcb97290a24722b57b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/0e6768b8c0dcef26df087df2bbbaa143867a59b2", - "reference": "0e6768b8c0dcef26df087df2bbbaa143867a59b2", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/20343b3bad7ebafa38138ddcb97290a24722b57b", + "reference": "20343b3bad7ebafa38138ddcb97290a24722b57b", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/log": "^1.0", - "symfony/polyfill-php80": "^1.15", - "symfony/var-dumper": "^4.4|^5.0" + "php": ">=8.0.2", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^5.4|^6.0" }, "require-dev": { - "symfony/deprecation-contracts": "^2.1", - "symfony/http-kernel": "^4.4|^5.0", - "symfony/serializer": "^4.4|^5.0" + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], "type": "library", "autoload": { "psr-4": { @@ -3194,7 +3175,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/v5.3.0" + "source": "https://github.com/symfony/error-handler/tree/v6.0.3" }, "funding": [ { @@ -3210,44 +3191,42 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.3.0", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "67a5f354afa8e2f231081b3fa11a5912f933c3ce" + "reference": "6472ea2dd415e925b90ca82be64b8bc6157f3934" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/67a5f354afa8e2f231081b3fa11a5912f933c3ce", - "reference": "67a5f354afa8e2f231081b3fa11a5912f933c3ce", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/6472ea2dd415e925b90ca82be64b8bc6157f3934", + "reference": "6472ea2dd415e925b90ca82be64b8bc6157f3934", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/event-dispatcher-contracts": "^2", - "symfony/polyfill-php80": "^1.15" + "php": ">=8.0.2", + "symfony/event-dispatcher-contracts": "^2|^3" }, "conflict": { - "symfony/dependency-injection": "<4.4" + "symfony/dependency-injection": "<5.4" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" + "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/error-handler": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^4.4|^5.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^5.4|^6.0" }, "suggest": { "symfony/dependency-injection": "", @@ -3279,7 +3258,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/v5.3.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.3" }, "funding": [ { @@ -3295,24 +3274,24 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.4.0", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11" + "reference": "aa5422287b75594b90ee9cd807caf8f0df491385" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11", - "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/aa5422287b75594b90ee9cd807caf8f0df491385", + "reference": "aa5422287b75594b90ee9cd807caf8f0df491385", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "psr/event-dispatcher": "^1" }, "suggest": { @@ -3321,7 +3300,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -3358,7 +3337,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.0" }, "funding": [ { @@ -3374,25 +3353,26 @@ "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2021-07-15T12:33:35+00:00" }, { "name": "symfony/filesystem", - "version": "v5.3.0", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "348116319d7fb7d1faa781d26a48922428013eb2" + "reference": "6ae49c4fda17322171a2b8dc5f70bc6edbc498e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/348116319d7fb7d1faa781d26a48922428013eb2", - "reference": "348116319d7fb7d1faa781d26a48922428013eb2", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/6ae49c4fda17322171a2b8dc5f70bc6edbc498e1", + "reference": "6ae49c4fda17322171a2b8dc5f70bc6edbc498e1", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8" + "php": ">=8.0.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" }, "type": "library", "autoload": { @@ -3420,7 +3400,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.3.0" + "source": "https://github.com/symfony/filesystem/tree/v6.0.3" }, "funding": [ { @@ -3436,24 +3416,24 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/finder", - "version": "v5.3.0", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6" + "reference": "8661b74dbabc23223f38c9b99d3f8ade71170430" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6", - "reference": "0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6", + "url": "https://api.github.com/repos/symfony/finder/zipball/8661b74dbabc23223f38c9b99d3f8ade71170430", + "reference": "8661b74dbabc23223f38c9b99d3f8ade71170430", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=8.0.2" }, "type": "library", "autoload": { @@ -3481,7 +3461,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.3.0" + "source": "https://github.com/symfony/finder/tree/v6.0.3" }, "funding": [ { @@ -3497,46 +3477,48 @@ "type": "tidelift" } ], - "time": "2021-05-26T12:52:38+00:00" + "time": "2022-01-26T17:23:29+00:00" }, { "name": "symfony/framework-bundle", - "version": "v5.3.2", + "version": "v5.4.4", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "120e80e882debd7e705d53a3b054e1a0fae91fbc" + "reference": "d848b8ca3d87d0fcc9d0ccbc88cf8e128db0d4c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/120e80e882debd7e705d53a3b054e1a0fae91fbc", - "reference": "120e80e882debd7e705d53a3b054e1a0fae91fbc", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/d848b8ca3d87d0fcc9d0ccbc88cf8e128db0d4c7", + "reference": "d848b8ca3d87d0fcc9d0ccbc88cf8e128db0d4c7", "shasum": "" }, "require": { "ext-xml": "*", "php": ">=7.2.5", - "symfony/cache": "^5.2", - "symfony/config": "^5.3", - "symfony/dependency-injection": "^5.3", - "symfony/deprecation-contracts": "^2.1", - "symfony/error-handler": "^4.4.1|^5.0.1", - "symfony/event-dispatcher": "^5.1", - "symfony/filesystem": "^4.4|^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/http-foundation": "^5.3", - "symfony/http-kernel": "^5.3", + "symfony/cache": "^5.2|^6.0", + "symfony/config": "^5.3|^6.0", + "symfony/dependency-injection": "^5.3|^6.0", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^4.4.1|^5.0.1|^6.0", + "symfony/event-dispatcher": "^5.1|^6.0", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^5.3|^6.0", + "symfony/http-kernel": "^5.4|^6.0", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15", - "symfony/routing": "^5.3" + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22", + "symfony/routing": "^5.3|^6.0" }, "conflict": { + "doctrine/annotations": "<1.13.1", + "doctrine/cache": "<1.11", "doctrine/persistence": "<1.3", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "phpunit/phpunit": "<5.4.3", "symfony/asset": "<5.3", - "symfony/browser-kit": "<4.4", "symfony/console": "<5.2.5", "symfony/dom-crawler": "<4.4", "symfony/dotenv": "<5.1", @@ -3544,13 +3526,13 @@ "symfony/http-client": "<4.4", "symfony/lock": "<4.4", "symfony/mailer": "<5.2", - "symfony/messenger": "<4.4", + "symfony/messenger": "<5.4", "symfony/mime": "<4.4", "symfony/property-access": "<5.3", "symfony/property-info": "<4.4", - "symfony/security-core": "<5.3", "symfony/security-csrf": "<5.3", "symfony/serializer": "<5.2", + "symfony/service-contracts": ">=3.0", "symfony/stopwatch": "<4.4", "symfony/translation": "<5.3", "symfony/twig-bridge": "<4.4", @@ -3560,72 +3542,40 @@ "symfony/workflow": "<5.2" }, "require-dev": { - "doctrine/annotations": "^1.10.4", - "doctrine/cache": "^1.0|^2.0", + "doctrine/annotations": "^1.13.1", + "doctrine/cache": "^1.11|^2.0", "doctrine/persistence": "^1.3|^2.0", "paragonie/sodium_compat": "^1.8", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/allmysms-notifier": "^5.3", - "symfony/asset": "^5.3", - "symfony/browser-kit": "^4.4|^5.0", - "symfony/clickatell-notifier": "^5.3", - "symfony/console": "^5.2", - "symfony/css-selector": "^4.4|^5.0", - "symfony/discord-notifier": "^5.3", - "symfony/dom-crawler": "^4.4|^5.0", - "symfony/dotenv": "^5.1", - "symfony/esendex-notifier": "^5.3", - "symfony/expression-language": "^4.4|^5.0", - "symfony/fake-chat-notifier": "^5.3", - "symfony/fake-sms-notifier": "^5.3", - "symfony/firebase-notifier": "^5.3", - "symfony/form": "^5.2", - "symfony/free-mobile-notifier": "^5.3", - "symfony/gatewayapi-notifier": "^5.3", - "symfony/gitter-notifier": "^5.3", - "symfony/google-chat-notifier": "^5.3", - "symfony/http-client": "^4.4|^5.0", - "symfony/infobip-notifier": "^5.3", - "symfony/iqsms-notifier": "^5.3", - "symfony/light-sms-notifier": "^5.3", - "symfony/linked-in-notifier": "^5.3", - "symfony/lock": "^4.4|^5.0", - "symfony/mailer": "^5.2", - "symfony/mattermost-notifier": "^5.3", - "symfony/message-bird-notifier": "^5.3", - "symfony/messenger": "^5.2", - "symfony/microsoft-teams-notifier": "^5.3", - "symfony/mime": "^4.4|^5.0", - "symfony/mobyt-notifier": "^5.3", - "symfony/nexmo-notifier": "^5.3", - "symfony/notifier": "^5.3", - "symfony/octopush-notifier": "^5.3", - "symfony/ovh-cloud-notifier": "^5.3", - "symfony/phpunit-bridge": "^5.3", + "symfony/asset": "^5.3|^6.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^4.4|^5.0|^6.0", + "symfony/dom-crawler": "^4.4.30|^5.3.7|^6.0", + "symfony/dotenv": "^5.1|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/form": "^5.2|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/mailer": "^5.2|^6.0", + "symfony/messenger": "^5.4|^6.0", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/notifier": "^5.4|^6.0", + "symfony/phpunit-bridge": "^5.3|^6.0", "symfony/polyfill-intl-icu": "~1.0", - "symfony/process": "^4.4|^5.0", - "symfony/property-info": "^4.4|^5.0", - "symfony/rate-limiter": "^5.2", - "symfony/rocket-chat-notifier": "^5.3", - "symfony/security-bundle": "^5.3", - "symfony/sendinblue-notifier": "^5.3", - "symfony/serializer": "^5.2", - "symfony/sinch-notifier": "^5.3", - "symfony/slack-notifier": "^5.3", - "symfony/sms-biuras-notifier": "^5.3", - "symfony/smsapi-notifier": "^5.3", - "symfony/spot-hit-notifier": "^5.3", - "symfony/stopwatch": "^4.4|^5.0", - "symfony/string": "^5.0", - "symfony/telegram-notifier": "^5.3", - "symfony/translation": "^5.3", - "symfony/twig-bundle": "^4.4|^5.0", - "symfony/twilio-notifier": "^5.3", - "symfony/validator": "^5.2", - "symfony/web-link": "^4.4|^5.0", - "symfony/workflow": "^5.2", - "symfony/yaml": "^4.4|^5.0", - "symfony/zulip-notifier": "^5.3", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/property-info": "^4.4|^5.0|^6.0", + "symfony/rate-limiter": "^5.2|^6.0", + "symfony/security-bundle": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/string": "^5.0|^6.0", + "symfony/translation": "^5.3|^6.0", + "symfony/twig-bundle": "^4.4|^5.0|^6.0", + "symfony/validator": "^5.2|^6.0", + "symfony/web-link": "^4.4|^5.0|^6.0", + "symfony/workflow": "^5.2|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0", "twig/twig": "^2.10|^3.0" }, "suggest": { @@ -3664,85 +3614,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/v5.3.2" - }, - "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": "2021-06-17T13:29:40+00:00" - }, - { - "name": "symfony/http-client-contracts", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/7e82f6084d7cae521a75ef2cb5c9457bbda785f4", - "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4", - "shasum": "" - }, - "require": { - "php": ">=7.2.5" - }, - "suggest": { - "symfony/http-client-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\HttpClient\\": "" - } - }, - "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 HTTP clients", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/framework-bundle/tree/v5.4.4" }, "funding": [ { @@ -3758,33 +3630,32 @@ "type": "tidelift" } ], - "time": "2021-04-11T23:07:08+00:00" + "time": "2022-01-29T17:49:40+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.3.2", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "7b6dd714d95106b831aaa7f3c9c612ab886516bd" + "reference": "ad157299ced81a637fade1efcadd688d6deba5c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/7b6dd714d95106b831aaa7f3c9c612ab886516bd", - "reference": "7b6dd714d95106b831aaa7f3c9c612ab886516bd", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ad157299ced81a637fade1efcadd688d6deba5c1", + "reference": "ad157299ced81a637fade1efcadd688d6deba5c1", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php80": "^1.15" + "php": ">=8.0.2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1" }, "require-dev": { "predis/predis": "~1.0", - "symfony/cache": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/mime": "^4.4|^5.0" + "symfony/cache": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0" }, "suggest": { "symfony/mime": "To use the file extension guesser" @@ -3815,7 +3686,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.3.2" + "source": "https://github.com/symfony/http-foundation/tree/v6.0.3" }, "funding": [ { @@ -3831,68 +3702,65 @@ "type": "tidelift" } ], - "time": "2021-06-12T10:15:17+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.3.2", + "version": "v6.0.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "e7021165d9dbfb4051296b8de827e92c8a7b5c87" + "reference": "9dce179ce52b0f4f669c07fd5e465e5d809a5d3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/e7021165d9dbfb4051296b8de827e92c8a7b5c87", - "reference": "e7021165d9dbfb4051296b8de827e92c8a7b5c87", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9dce179ce52b0f4f669c07fd5e465e5d809a5d3b", + "reference": "9dce179ce52b0f4f669c07fd5e465e5d809a5d3b", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/log": "~1.0", - "symfony/deprecation-contracts": "^2.1", - "symfony/error-handler": "^4.4|^5.0", - "symfony/event-dispatcher": "^5.0", - "symfony/http-client-contracts": "^1.1|^2", - "symfony/http-foundation": "^5.3", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.15" + "php": ">=8.0.2", + "psr/log": "^1|^2|^3", + "symfony/error-handler": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/browser-kit": "<4.4", - "symfony/cache": "<5.0", - "symfony/config": "<5.0", - "symfony/console": "<4.4", - "symfony/dependency-injection": "<5.3", - "symfony/doctrine-bridge": "<5.0", - "symfony/form": "<5.0", - "symfony/http-client": "<5.0", - "symfony/mailer": "<5.0", - "symfony/messenger": "<5.0", - "symfony/translation": "<5.0", - "symfony/twig-bridge": "<5.0", - "symfony/validator": "<5.0", + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.4", + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<5.4", "twig/twig": "<2.13" }, "provide": { - "psr/log-implementation": "1.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^4.4|^5.0", - "symfony/config": "^5.0", - "symfony/console": "^4.4|^5.0", - "symfony/css-selector": "^4.4|^5.0", - "symfony/dependency-injection": "^5.3", - "symfony/dom-crawler": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "symfony/routing": "^4.4|^5.0", - "symfony/stopwatch": "^4.4|^5.0", - "symfony/translation": "^4.4|^5.0", - "symfony/translation-contracts": "^1.1|^2", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", "twig/twig": "^2.13|^3.0.4" }, "suggest": { @@ -3927,7 +3795,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/v5.3.2" + "source": "https://github.com/symfony/http-kernel/tree/v6.0.4" }, "funding": [ { @@ -3943,49 +3811,50 @@ "type": "tidelift" } ], - "time": "2021-06-17T14:18:27+00:00" + "time": "2022-01-29T18:12:46+00:00" }, { "name": "symfony/messenger", - "version": "v5.3.2", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/messenger.git", - "reference": "552b671a36b3f58e32e8c551a92559e571f60613" + "reference": "4319c25b76573cff46f112ee8cc83fffa4b97579" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/messenger/zipball/552b671a36b3f58e32e8c551a92559e571f60613", - "reference": "552b671a36b3f58e32e8c551a92559e571f60613", + "url": "https://api.github.com/repos/symfony/messenger/zipball/4319c25b76573cff46f112ee8cc83fffa4b97579", + "reference": "4319c25b76573cff46f112ee8cc83fffa4b97579", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/log": "~1.0", - "symfony/amqp-messenger": "^5.1", - "symfony/deprecation-contracts": "^2.1", - "symfony/doctrine-messenger": "^5.1", - "symfony/polyfill-php80": "^1.15", - "symfony/redis-messenger": "^5.1" + "psr/log": "^1|^2|^3", + "symfony/amqp-messenger": "^5.1|^6.0", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/doctrine-messenger": "^5.1|^6.0", + "symfony/polyfill-php80": "^1.16", + "symfony/redis-messenger": "^5.1|^6.0" }, "conflict": { "symfony/event-dispatcher": "<4.4", "symfony/framework-bundle": "<4.4", - "symfony/http-kernel": "<4.4" + "symfony/http-kernel": "<4.4", + "symfony/serializer": "<5.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/console": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/http-kernel": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "symfony/property-access": "^4.4|^5.0", - "symfony/routing": "^4.4|^5.0", - "symfony/serializer": "^4.4|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^4.4|^5.0", - "symfony/validator": "^4.4|^5.0" + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.3|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/property-access": "^4.4|^5.0|^6.0", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/serializer": "^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/validator": "^4.4|^5.0|^6.0" }, "suggest": { "enqueue/messenger-adapter": "For using the php-enqueue library as a transport." @@ -4016,7 +3885,7 @@ "description": "Helps applications send and receive messages to/from other applications or via message queues", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/messenger/tree/v5.3.2" + "source": "https://github.com/symfony/messenger/tree/v5.4.3" }, "funding": [ { @@ -4032,11 +3901,11 @@ "type": "tidelift" } ], - "time": "2021-06-16T22:22:36+00:00" + "time": "2022-01-12T18:55:10+00:00" }, { "name": "symfony/polyfill-apcu", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-apcu.git", @@ -4062,12 +3931,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Apcu\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Apcu\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4093,7 +3962,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-apcu/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-apcu/tree/v1.24.0" }, "funding": [ { @@ -4113,21 +3982,24 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + "reference": "30885182c981ab175d4d034db0f6f469898070ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", + "reference": "30885182c981ab175d4d034db0f6f469898070ab", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-ctype": "*" + }, "suggest": { "ext-ctype": "For best performance" }, @@ -4172,7 +4044,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" }, "funding": [ { @@ -4188,20 +4060,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2021-10-20T20:35:02+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab" + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/24b72c6baa32c746a4d0840147c9715e42bb68ab", - "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", "shasum": "" }, "require": { @@ -4221,12 +4093,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4253,7 +4125,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0" }, "funding": [ { @@ -4269,20 +4141,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:17:38+00:00" + "time": "2021-11-23T21:10:46+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" + "reference": "749045c69efb97c70d25d7463abba812e91f3a44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44", + "reference": "749045c69efb97c70d25d7463abba812e91f3a44", "shasum": "" }, "require": { @@ -4304,12 +4176,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4340,7 +4212,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.24.0" }, "funding": [ { @@ -4356,11 +4228,11 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2021-09-14T14:02:44+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -4387,14 +4259,14 @@ "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, + }, + "autoload": { "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -4424,7 +4296,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0" }, "funding": [ { @@ -4444,21 +4316,24 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1" + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1", - "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-mbstring": "*" + }, "suggest": { "ext-mbstring": "For best performance" }, @@ -4473,12 +4348,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4504,7 +4379,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" }, "funding": [ { @@ -4520,11 +4395,11 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2021-11-30T18:21:41+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", @@ -4550,12 +4425,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4580,7 +4455,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.24.0" }, "funding": [ { @@ -4600,16 +4475,16 @@ }, { "name": "symfony/polyfill-php73", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" + "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", + "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", "shasum": "" }, "require": { @@ -4626,12 +4501,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -4659,7 +4534,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0" }, "funding": [ { @@ -4675,20 +4550,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2021-06-05T21:20:04+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0" + "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/eca0bf41ed421bed1b57c4958bab16aa86b757d0", - "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", + "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", "shasum": "" }, "require": { @@ -4705,12 +4580,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -4742,7 +4617,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" }, "funding": [ { @@ -4758,20 +4633,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2021-09-13T13:58:33+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "e66119f3de95efc359483f810c4c3e6436279436" + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", - "reference": "e66119f3de95efc359483f810c4c3e6436279436", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", "shasum": "" }, "require": { @@ -4788,12 +4663,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -4821,7 +4696,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.0" }, "funding": [ { @@ -4837,32 +4712,32 @@ "type": "tidelift" } ], - "time": "2021-05-21T13:25:03+00:00" + "time": "2021-09-13T13:58:11+00:00" }, { "name": "symfony/redis-messenger", - "version": "v5.3.2", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/redis-messenger.git", - "reference": "caf341c2e11335d8db5a261bb199be13804ee983" + "reference": "2977b1f207baf2de559ba881acab5976db9cbe18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/redis-messenger/zipball/caf341c2e11335d8db5a261bb199be13804ee983", - "reference": "caf341c2e11335d8db5a261bb199be13804ee983", + "url": "https://api.github.com/repos/symfony/redis-messenger/zipball/2977b1f207baf2de559ba881acab5976db9cbe18", + "reference": "2977b1f207baf2de559ba881acab5976db9cbe18", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/messenger": "^5.1" + "ext-redis": "*", + "php": ">=8.0.2", + "symfony/messenger": "^5.4|^6.0" }, "require-dev": { - "symfony/property-access": "^4.4|^5.0", - "symfony/serializer": "^4.4|^5.0" + "symfony/property-access": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" }, - "type": "symfony-bridge", + "type": "symfony-messenger-bridge", "autoload": { "psr-4": { "Symfony\\Component\\Messenger\\Bridge\\Redis\\": "" @@ -4888,7 +4763,7 @@ "description": "Symfony Redis extension Messenger Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/redis-messenger/tree/v5.3.2" + "source": "https://github.com/symfony/redis-messenger/tree/v6.0.3" }, "funding": [ { @@ -4904,41 +4779,39 @@ "type": "tidelift" } ], - "time": "2021-06-05T08:59:26+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/routing", - "version": "v5.3.0", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "368e81376a8e049c37cb80ae87dbfbf411279199" + "reference": "b1debdf7a40e6bc7eee0f363ab9dd667fe04f099" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/368e81376a8e049c37cb80ae87dbfbf411279199", - "reference": "368e81376a8e049c37cb80ae87dbfbf411279199", + "url": "https://api.github.com/repos/symfony/routing/zipball/b1debdf7a40e6bc7eee0f363ab9dd667fe04f099", + "reference": "b1debdf7a40e6bc7eee0f363ab9dd667fe04f099", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-php80": "^1.15" + "php": ">=8.0.2" }, "conflict": { "doctrine/annotations": "<1.12", - "symfony/config": "<5.3", - "symfony/dependency-injection": "<4.4", - "symfony/yaml": "<4.4" + "symfony/config": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" }, "require-dev": { "doctrine/annotations": "^1.12", - "psr/log": "~1.0", - "symfony/config": "^5.3", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" }, "suggest": { "symfony/config": "For using the all-in-one router or any loader", @@ -4978,7 +4851,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.3.0" + "source": "https://github.com/symfony/routing/tree/v6.0.3" }, "funding": [ { @@ -4994,26 +4867,29 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.4.0", + "version": "v2.4.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" + "reference": "d664541b99d6fb0247ec5ff32e87238582236204" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", - "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d664541b99d6fb0247ec5ff32e87238582236204", + "reference": "d664541b99d6fb0247ec5ff32e87238582236204", "shasum": "" }, "require": { "php": ">=7.2.5", "psr/container": "^1.1" }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, "suggest": { "symfony/service-implementation": "" }, @@ -5057,7 +4933,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/service-contracts/tree/v2.4.1" }, "funding": [ { @@ -5073,35 +4949,37 @@ "type": "tidelift" } ], - "time": "2021-04-01T10:43:52+00:00" + "time": "2021-11-04T16:37:19+00:00" }, { "name": "symfony/string", - "version": "v5.3.2", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "0732e97e41c0a590f77e231afc16a327375d50b0" + "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/0732e97e41c0a590f77e231afc16a327375d50b0", - "reference": "0732e97e41c0a590f77e231afc16a327375d50b0", + "url": "https://api.github.com/repos/symfony/string/zipball/522144f0c4c004c80d56fa47e40e17028e2eefc2", + "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.0" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0", - "symfony/http-client": "^4.4|^5.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0" + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -5140,7 +5018,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.3.2" + "source": "https://github.com/symfony/string/tree/v6.0.3" }, "funding": [ { @@ -5156,24 +5034,24 @@ "type": "tidelift" } ], - "time": "2021-06-06T09:51:56+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.4.0", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "95c812666f3e91db75385749fe219c5e494c7f95" + "reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95", - "reference": "95c812666f3e91db75385749fe219c5e494c7f95", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1b6ea5a7442af5a12dba3dbd6d71034b5b234e77", + "reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=8.0.2" }, "suggest": { "symfony/translation-implementation": "" @@ -5181,7 +5059,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -5218,7 +5096,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.0.0" }, "funding": [ { @@ -5234,65 +5112,64 @@ "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2021-09-07T12:43:40+00:00" }, { "name": "symfony/twig-bridge", - "version": "v5.3.0", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "cbd8f87a3d2445e566db3fe75e34a0bcad70c222" + "reference": "31a4ec953c20299cc828eb6a1ccdf86d7ecbe22c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/cbd8f87a3d2445e566db3fe75e34a0bcad70c222", - "reference": "cbd8f87a3d2445e566db3fe75e34a0bcad70c222", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/31a4ec953c20299cc828eb6a1ccdf86d7ecbe22c", + "reference": "31a4ec953c20299cc828eb6a1ccdf86d7ecbe22c", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.15", - "symfony/translation-contracts": "^1.1|^2", + "php": ">=8.0.2", + "symfony/translation-contracts": "^1.1|^2|^3", "twig/twig": "^2.13|^3.0.4" }, "conflict": { "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/console": "<4.4", - "symfony/form": "<5.3", - "symfony/http-foundation": "<5.3", - "symfony/http-kernel": "<4.4", - "symfony/translation": "<5.2", - "symfony/workflow": "<5.2" + "symfony/console": "<5.4", + "symfony/form": "<5.4", + "symfony/http-foundation": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/translation": "<5.4", + "symfony/workflow": "<5.4" }, "require-dev": { "doctrine/annotations": "^1.12", "egulias/email-validator": "^2.1.10|^3", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/asset": "^4.4|^5.0", - "symfony/console": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/form": "^5.3", - "symfony/http-foundation": "^5.3", - "symfony/http-kernel": "^4.4|^5.0", - "symfony/intl": "^4.4|^5.0", - "symfony/mime": "^5.2", + "symfony/asset": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/form": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", "symfony/polyfill-intl-icu": "~1.0", - "symfony/property-info": "^4.4|^5.1", - "symfony/routing": "^4.4|^5.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", "symfony/security-acl": "^2.8|^3.0", - "symfony/security-core": "^4.4|^5.0", - "symfony/security-csrf": "^4.4|^5.0", - "symfony/security-http": "^4.4|^5.0", - "symfony/serializer": "^5.2", - "symfony/stopwatch": "^4.4|^5.0", - "symfony/translation": "^5.2", - "symfony/web-link": "^4.4|^5.0", - "symfony/workflow": "^5.2", - "symfony/yaml": "^4.4|^5.0", + "symfony/security-core": "^5.4|^6.0", + "symfony/security-csrf": "^5.4|^6.0", + "symfony/security-http": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/web-link": "^5.4|^6.0", + "symfony/workflow": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0", "twig/cssinliner-extra": "^2.12|^3", "twig/inky-extra": "^2.12|^3", "twig/markdown-extra": "^2.12|^3" @@ -5339,7 +5216,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v5.3.0" + "source": "https://github.com/symfony/twig-bridge/tree/v6.0.3" }, "funding": [ { @@ -5355,50 +5232,52 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/twig-bundle", - "version": "v5.3.0", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "d386aaa46d1afe5afb51b39675fc2ab206159206" + "reference": "45ae3ee8155f93042a1033b166a7a3ed57b96a92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/d386aaa46d1afe5afb51b39675fc2ab206159206", - "reference": "d386aaa46d1afe5afb51b39675fc2ab206159206", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/45ae3ee8155f93042a1033b166a7a3ed57b96a92", + "reference": "45ae3ee8155f93042a1033b166a7a3ed57b96a92", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/config": "^4.4|^5.0", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/http-kernel": "^5.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^5.0|^6.0", "symfony/polyfill-ctype": "~1.8", - "symfony/twig-bridge": "^5.3", + "symfony/polyfill-php80": "^1.16", + "symfony/twig-bridge": "^5.3|^6.0", "twig/twig": "^2.13|^3.0.4" }, "conflict": { "symfony/dependency-injection": "<5.3", "symfony/framework-bundle": "<5.0", + "symfony/service-contracts": ">=3.0", "symfony/translation": "<5.0" }, "require-dev": { "doctrine/annotations": "^1.10.4", "doctrine/cache": "^1.0|^2.0", - "symfony/asset": "^4.4|^5.0", - "symfony/dependency-injection": "^5.3", - "symfony/expression-language": "^4.4|^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/form": "^4.4|^5.0", - "symfony/framework-bundle": "^5.0", - "symfony/routing": "^4.4|^5.0", - "symfony/stopwatch": "^4.4|^5.0", - "symfony/translation": "^5.0", - "symfony/web-link": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0" + "symfony/asset": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.3|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/form": "^4.4|^5.0|^6.0", + "symfony/framework-bundle": "^5.0|^6.0", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/translation": "^5.0|^6.0", + "symfony/web-link": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0" }, "type": "symfony-bundle", "autoload": { @@ -5426,7 +5305,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/v5.3.0" + "source": "https://github.com/symfony/twig-bundle/tree/v5.4.3" }, "funding": [ { @@ -5442,33 +5321,36 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/validator", - "version": "v5.3.2", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "87621b2503601673b7e76aeffac3234ada8e1bf2" + "reference": "b420894e98f414b9ad5d4494650bf281f6dd6028" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/87621b2503601673b7e76aeffac3234ada8e1bf2", - "reference": "87621b2503601673b7e76aeffac3234ada8e1bf2", + "url": "https://api.github.com/repos/symfony/validator/zipball/b420894e98f414b9ad5d4494650bf281f6dd6028", + "reference": "b420894e98f414b9ad5d4494650bf281f6dd6028", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php73": "~1.0", - "symfony/polyfill-php80": "^1.15", - "symfony/translation-contracts": "^1.1|^2" + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22", + "symfony/translation-contracts": "^1.1|^2|^3" }, "conflict": { - "doctrine/lexer": "<1.0.2", + "doctrine/annotations": "<1.13", + "doctrine/cache": "<1.11", + "doctrine/lexer": "<1.1", "phpunit/phpunit": "<5.4.3", "symfony/dependency-injection": "<4.4", "symfony/expression-language": "<5.1", @@ -5479,24 +5361,24 @@ "symfony/yaml": "<4.4" }, "require-dev": { - "doctrine/annotations": "^1.10.4", - "doctrine/cache": "^1.0|^2.0", + "doctrine/annotations": "^1.13", + "doctrine/cache": "^1.11|^2.0", "egulias/email-validator": "^2.1.10|^3", - "symfony/cache": "^4.4|^5.0", - "symfony/config": "^4.4|^5.0", - "symfony/console": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/expression-language": "^5.1", - "symfony/finder": "^4.4|^5.0", - "symfony/http-client": "^4.4|^5.0", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/http-kernel": "^4.4|^5.0", - "symfony/intl": "^4.4|^5.0", - "symfony/mime": "^4.4|^5.0", - "symfony/property-access": "^4.4|^5.0", - "symfony/property-info": "^5.3", - "symfony/translation": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0" + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^5.1|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/property-access": "^4.4|^5.0|^6.0", + "symfony/property-info": "^5.3|^6.0", + "symfony/translation": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0" }, "suggest": { "egulias/email-validator": "Strict (RFC compliant) email validation", @@ -5536,7 +5418,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v5.3.2" + "source": "https://github.com/symfony/validator/tree/v5.4.3" }, "funding": [ { @@ -5552,35 +5434,35 @@ "type": "tidelift" } ], - "time": "2021-06-17T12:34:27+00:00" + "time": "2022-01-26T16:28:35+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.3.2", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "905a22c68b292ffb6f20d7636c36b220d1fba5ae" + "reference": "7b701676fc64f9ef11f9b4870f16b48f66be4834" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/905a22c68b292ffb6f20d7636c36b220d1fba5ae", - "reference": "905a22c68b292ffb6f20d7636c36b220d1fba5ae", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7b701676fc64f9ef11f9b4870f16b48f66be4834", + "reference": "7b701676fc64f9ef11f9b4870f16b48f66be4834", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15" + "php": ">=8.0.2", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { "phpunit/phpunit": "<5.4.3", - "symfony/console": "<4.4" + "symfony/console": "<5.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", + "symfony/console": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", "twig/twig": "^2.13|^3.0.4" }, "suggest": { @@ -5624,7 +5506,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.3.2" + "source": "https://github.com/symfony/var-dumper/tree/v6.0.3" }, "funding": [ { @@ -5640,28 +5522,27 @@ "type": "tidelift" } ], - "time": "2021-06-06T09:51:56+00:00" + "time": "2022-01-17T16:30:44+00:00" }, { "name": "symfony/var-exporter", - "version": "v5.3.2", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "df663fb63bdcd7298373cbd431165ab031706cb2" + "reference": "1261b2d4a23081cb2b59a4caa311a5ac43b845b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/df663fb63bdcd7298373cbd431165ab031706cb2", - "reference": "df663fb63bdcd7298373cbd431165ab031706cb2", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/1261b2d4a23081cb2b59a4caa311a5ac43b845b6", + "reference": "1261b2d4a23081cb2b59a4caa311a5ac43b845b6", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.15" + "php": ">=8.0.2" }, "require-dev": { - "symfony/var-dumper": "^4.4.9|^5.0.9" + "symfony/var-dumper": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -5697,7 +5578,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v5.3.2" + "source": "https://github.com/symfony/var-exporter/tree/v6.0.3" }, "funding": [ { @@ -5713,32 +5594,32 @@ "type": "tidelift" } ], - "time": "2021-06-09T10:57:10+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/yaml", - "version": "v5.3.2", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "71719ab2409401711d619765aa255f9d352a59b2" + "reference": "e80f87d2c9495966768310fc531b487ce64237a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/71719ab2409401711d619765aa255f9d352a59b2", - "reference": "71719ab2409401711d619765aa255f9d352a59b2", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2", + "reference": "e80f87d2c9495966768310fc531b487ce64237a2", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-ctype": "~1.8" + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<4.4" + "symfony/console": "<5.3" }, "require-dev": { - "symfony/console": "^4.4|^5.0" + "symfony/console": "^5.3|^6.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -5772,7 +5653,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.3.2" + "source": "https://github.com/symfony/yaml/tree/v5.4.3" }, "funding": [ { @@ -5788,20 +5669,20 @@ "type": "tidelift" } ], - "time": "2021-06-06T09:51:56+00:00" + "time": "2022-01-26T16:32:32+00:00" }, { "name": "twig/twig", - "version": "v3.3.2", + "version": "v3.3.8", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "21578f00e83d4a82ecfa3d50752b609f13de6790" + "reference": "972d8604a92b7054828b539f2febb0211dd5945c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/21578f00e83d4a82ecfa3d50752b609f13de6790", - "reference": "21578f00e83d4a82ecfa3d50752b609f13de6790", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/972d8604a92b7054828b539f2febb0211dd5945c", + "reference": "972d8604a92b7054828b539f2febb0211dd5945c", "shasum": "" }, "require": { @@ -5811,7 +5692,7 @@ }, "require-dev": { "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4.9|^5.0.9" + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" }, "type": "library", "extra": { @@ -5852,7 +5733,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.3.2" + "source": "https://github.com/twigphp/Twig/tree/v3.3.8" }, "funding": [ { @@ -5864,7 +5745,7 @@ "type": "tidelift" } ], - "time": "2021-05-16T12:14:13+00:00" + "time": "2022-02-04T06:59:48+00:00" }, { "name": "webimpress/safe-writer", @@ -5929,27 +5810,27 @@ "packages-dev": [ { "name": "amphp/amp", - "version": "v2.5.2", + "version": "v2.6.1", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "efca2b32a7580087adb8aabbff6be1dc1bb924a9" + "reference": "c5fc66a78ee38d7ac9195a37bacaf940eb3f65ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/efca2b32a7580087adb8aabbff6be1dc1bb924a9", - "reference": "efca2b32a7580087adb8aabbff6be1dc1bb924a9", + "url": "https://api.github.com/repos/amphp/amp/zipball/c5fc66a78ee38d7ac9195a37bacaf940eb3f65ae", + "reference": "c5fc66a78ee38d7ac9195a37bacaf940eb3f65ae", "shasum": "" }, "require": { - "php": ">=7" + "php": ">=7.1" }, "require-dev": { "amphp/php-cs-fixer-config": "dev-master", "amphp/phpunit-util": "^1", "ext-json": "*", "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^6.0.9 | ^7", + "phpunit/phpunit": "^7 | ^8 | ^9", "psalm/phar": "^3.11@dev", "react/promise": "^2" }, @@ -6006,7 +5887,7 @@ "support": { "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.5.2" + "source": "https://github.com/amphp/amp/tree/v2.6.1" }, "funding": [ { @@ -6014,7 +5895,7 @@ "type": "github" } ], - "time": "2021-01-10T17:06:37+00:00" + "time": "2021-09-23T18:43:08+00:00" }, { "name": "amphp/byte-stream", @@ -6049,12 +5930,12 @@ } }, "autoload": { - "psr-4": { - "Amp\\ByteStream\\": "lib" - }, "files": [ "lib/functions.php" - ] + ], + "psr-4": { + "Amp\\ByteStream\\": "lib" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6095,36 +5976,37 @@ }, { "name": "behat/behat", - "version": "v3.8.1", + "version": "v3.10.0", "source": { "type": "git", "url": "https://github.com/Behat/Behat.git", - "reference": "fbb065457d523d9856d4b50775b4151a7598b510" + "reference": "a55661154079cf881ef643b303bfaf67bae3a09f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Behat/zipball/fbb065457d523d9856d4b50775b4151a7598b510", - "reference": "fbb065457d523d9856d4b50775b4151a7598b510", + "url": "https://api.github.com/repos/Behat/Behat/zipball/a55661154079cf881ef643b303bfaf67bae3a09f", + "reference": "a55661154079cf881ef643b303bfaf67bae3a09f", "shasum": "" }, "require": { - "behat/gherkin": "^4.6.0", + "behat/gherkin": "^4.9.0", "behat/transliterator": "^1.2", "ext-mbstring": "*", "php": "^7.2 || ^8.0", "psr/container": "^1.0", - "symfony/config": "^4.4 || ^5.0", - "symfony/console": "^4.4 || ^5.0", - "symfony/dependency-injection": "^4.4 || ^5.0", - "symfony/event-dispatcher": "^4.4 || ^5.0", - "symfony/translation": "^4.4 || ^5.0", - "symfony/yaml": "^4.4 || ^5.0" + "symfony/config": "^4.4 || ^5.0 || ^6.0", + "symfony/console": "^4.4 || ^5.0 || ^6.0", + "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0", + "symfony/event-dispatcher": "^4.4 || ^5.0 || ^6.0", + "symfony/translation": "^4.4 || ^5.0 || ^6.0", + "symfony/yaml": "^4.4 || ^5.0 || ^6.0" }, "require-dev": { "container-interop/container-interop": "^1.2", "herrera-io/box": "~1.6.1", "phpunit/phpunit": "^8.5 || ^9.0", - "symfony/process": "^4.4 || ^5.0" + "symfony/process": "^4.4 || ^5.0 || ^6.0", + "vimeo/psalm": "^4.8" }, "suggest": { "ext-dom": "Needed to output test results in JUnit format." @@ -6135,13 +6017,15 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.8.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { "Behat\\Behat\\": "src/Behat/Behat/", - "Behat\\Testwork\\": "src/Behat/Testwork/" + "Behat\\Testwork\\": "src/Behat/Testwork/", + "Behat\\Step\\": "src/Behat/Step/", + "Behat\\Hook\\": "src/Behat/Hook/" } }, "notification-url": "https://packagist.org/downloads/", @@ -6173,31 +6057,30 @@ ], "support": { "issues": "https://github.com/Behat/Behat/issues", - "source": "https://github.com/Behat/Behat/tree/v3.8.1" + "source": "https://github.com/Behat/Behat/tree/v3.10.0" }, - "time": "2020-11-07T15:55:18+00:00" + "time": "2021-11-02T20:09:40+00:00" }, { "name": "behat/gherkin", - "version": "v4.8.0", + "version": "v4.9.0", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "2391482cd003dfdc36b679b27e9f5326bd656acd" + "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/2391482cd003dfdc36b679b27e9f5326bd656acd", - "reference": "2391482cd003dfdc36b679b27e9f5326bd656acd", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/0bc8d1e30e96183e4f36db9dc79caead300beff4", + "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4", "shasum": "" }, "require": { "php": "~7.2|~8.0" }, "require-dev": { - "cucumber/cucumber": "dev-gherkin-16.0.0", + "cucumber/cucumber": "dev-gherkin-22.0.0", "phpunit/phpunit": "~8|~9", - "symfony/phpunit-bridge": "~3|~4|~5", "symfony/yaml": "~3|~4|~5" }, "suggest": { @@ -6206,7 +6089,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.4-dev" + "dev-master": "4.x-dev" } }, "autoload": { @@ -6237,32 +6120,33 @@ ], "support": { "issues": "https://github.com/Behat/Gherkin/issues", - "source": "https://github.com/Behat/Gherkin/tree/v4.8.0" + "source": "https://github.com/Behat/Gherkin/tree/v4.9.0" }, - "time": "2021-02-04T12:44:21+00:00" + "time": "2021-10-12T13:05:09+00:00" }, { "name": "behat/mink", - "version": "v1.8.1", + "version": "v1.9.0", "source": { "type": "git", "url": "https://github.com/minkphp/Mink.git", - "reference": "07c6a9fe3fa98c2de074b25d9ed26c22904e3887" + "reference": "e35f4695de8800fc776af34ebf665ad58ebdd996" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/Mink/zipball/07c6a9fe3fa98c2de074b25d9ed26c22904e3887", - "reference": "07c6a9fe3fa98c2de074b25d9ed26c22904e3887", + "url": "https://api.github.com/repos/minkphp/Mink/zipball/e35f4695de8800fc776af34ebf665ad58ebdd996", + "reference": "e35f4695de8800fc776af34ebf665ad58ebdd996", "shasum": "" }, "require": { - "php": ">=5.3.1", + "php": ">=5.4", "symfony/css-selector": "^2.7|^3.0|^4.0|^5.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20", - "symfony/debug": "^2.7|^3.0|^4.0", - "symfony/phpunit-bridge": "^3.4.38 || ^5.0.5" + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5 || ^9.5", + "symfony/debug": "^2.7|^3.0|^4.0|^5.0", + "symfony/phpunit-bridge": "^3.4.38 || ^4.4 || ^5.0.5", + "yoast/phpunit-polyfills": "^1.0" }, "suggest": { "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)", @@ -6274,7 +6158,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { @@ -6294,7 +6178,7 @@ } ], "description": "Browser controller/emulator abstraction for PHP", - "homepage": "http://mink.behat.org/", + "homepage": "https://mink.behat.org/", "keywords": [ "browser", "testing", @@ -6302,39 +6186,43 @@ ], "support": { "issues": "https://github.com/minkphp/Mink/issues", - "source": "https://github.com/minkphp/Mink/tree/v1.8.1" + "source": "https://github.com/minkphp/Mink/tree/v1.9.0" }, - "time": "2020-03-11T15:45:53+00:00" + "time": "2021-10-11T11:58:47+00:00" }, { "name": "behat/mink-browserkit-driver", - "version": "v1.3.4", + "version": "v2.0.0", "source": { "type": "git", "url": "https://github.com/minkphp/MinkBrowserKitDriver.git", - "reference": "e3b90840022ebcd544c7b394a3c9597ae242cbee" + "reference": "0d3d9c3b375be6f3d44fd6d1e08ed28c104b3bd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/e3b90840022ebcd544c7b394a3c9597ae242cbee", - "reference": "e3b90840022ebcd544c7b394a3c9597ae242cbee", + "url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/0d3d9c3b375be6f3d44fd6d1e08ed28c104b3bd4", + "reference": "0d3d9c3b375be6f3d44fd6d1e08ed28c104b3bd4", "shasum": "" }, "require": { - "behat/mink": "^1.7.1@dev", - "php": ">=5.3.6", - "symfony/browser-kit": "~2.3|~3.0|~4.0", - "symfony/dom-crawler": "~2.3|~3.0|~4.0" + "behat/mink": "^1.9.0@dev", + "php": ">=7.2", + "symfony/browser-kit": "^4.4 || ^5.0", + "symfony/dom-crawler": "^4.4 || ^5.0" }, "require-dev": { "mink/driver-testsuite": "dev-master", - "symfony/debug": "^2.7|^3.0|^4.0", - "symfony/http-kernel": "~2.3|~3.0|~4.0" + "phpunit/phpunit": "^8.5 || ^9.5", + "symfony/error-handler": "^4.4 || ^5.0", + "symfony/http-client": "^4.4 || ^5.0", + "symfony/http-kernel": "^4.4 || ^5.0", + "symfony/mime": "^4.4 || ^5.0", + "yoast/phpunit-polyfills": "^1.0" }, "type": "mink-driver", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -6354,7 +6242,7 @@ } ], "description": "Symfony2 BrowserKit driver for Mink framework", - "homepage": "http://mink.behat.org/", + "homepage": "https://mink.behat.org/", "keywords": [ "Mink", "Symfony2", @@ -6363,9 +6251,9 @@ ], "support": { "issues": "https://github.com/minkphp/MinkBrowserKitDriver/issues", - "source": "https://github.com/minkphp/MinkBrowserKitDriver/tree/v1.3.4" + "source": "https://github.com/minkphp/MinkBrowserKitDriver/tree/v2.0.0" }, - "time": "2020-03-11T09:49:45+00:00" + "time": "2021-12-13T10:31:49+00:00" }, { "name": "behat/transliterator", @@ -6416,25 +6304,169 @@ }, "time": "2020-01-14T16:39:13+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": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/67a32d7d6f9f560b726ab25a061b38ff3a80c560", + "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.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/1.0.1" + }, + "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-21T20:24:37+00:00" + }, { "name": "composer/semver", - "version": "3.2.5", + "version": "3.2.9", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9" + "reference": "a951f614bd64dcd26137bc9b7b2637ddcfc57649" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/31f3ea725711245195f62e54ffa402d8ef2fdba9", - "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9", + "url": "https://api.github.com/repos/composer/semver/zipball/a951f614bd64dcd26137bc9b7b2637ddcfc57649", + "reference": "a951f614bd64dcd26137bc9b7b2637ddcfc57649", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^0.12.54", + "phpstan/phpstan": "^1.4", "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", @@ -6479,7 +6511,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.2.5" + "source": "https://github.com/composer/semver/tree/3.2.9" }, "funding": [ { @@ -6495,29 +6527,31 @@ "type": "tidelift" } ], - "time": "2021-05-24T12:41:47+00:00" + "time": "2022-02-04T13:58:43+00:00" }, { "name": "composer/xdebug-handler", - "version": "2.0.1", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "964adcdd3a28bf9ed5d9ac6450064e0d71ed7496" + "reference": "12f1b79476638a5615ed00ea6adbb269cec96fd8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/964adcdd3a28bf9ed5d9ac6450064e0d71ed7496", - "reference": "964adcdd3a28bf9ed5d9ac6450064e0d71ed7496", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/12f1b79476638a5615ed00ea6adbb269cec96fd8", + "reference": "12f1b79476638a5615ed00ea6adbb269cec96fd8", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1.0" + "composer/pcre": "^1", + "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", + "symfony/phpunit-bridge": "^6.0" }, "type": "library", "autoload": { @@ -6543,7 +6577,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/2.0.1" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.1" }, "funding": [ { @@ -6559,7 +6593,7 @@ "type": "tidelift" } ], - "time": "2021-05-05T19:37:51+00:00" + "time": "2022-01-04T18:29:42+00:00" }, { "name": "dnoegel/php-xdg-base-dir", @@ -6701,30 +6735,30 @@ }, { "name": "friends-of-behat/mink-extension", - "version": "v2.5.0", + "version": "v2.6.1", "source": { "type": "git", "url": "https://github.com/FriendsOfBehat/MinkExtension.git", - "reference": "83119aa70be1f2c63061c29dced9d41775cd9db2" + "reference": "df04efb3e88833208c3a99a3efa3f7e9f03854db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfBehat/MinkExtension/zipball/83119aa70be1f2c63061c29dced9d41775cd9db2", - "reference": "83119aa70be1f2c63061c29dced9d41775cd9db2", + "url": "https://api.github.com/repos/FriendsOfBehat/MinkExtension/zipball/df04efb3e88833208c3a99a3efa3f7e9f03854db", + "reference": "df04efb3e88833208c3a99a3efa3f7e9f03854db", "shasum": "" }, "require": { "behat/behat": "^3.0.5", "behat/mink": "^1.5", - "php": ">=7.2", - "symfony/config": "^3.4 || ^4.4 || ^5.0" + "php": ">=7.4", + "symfony/config": "^4.4 || ^5.0 || ^6.0" }, "replace": { "behat/mink-extension": "self.version" }, "require-dev": { "behat/mink-goutte-driver": "^1.1", - "phpspec/phpspec": "^6.0 || ^7.0" + "phpspec/phpspec": "^6.0 || ^7.0 || 7.1.x-dev" }, "type": "behat-extension", "extra": { @@ -6760,30 +6794,30 @@ "web" ], "support": { - "source": "https://github.com/FriendsOfBehat/MinkExtension/tree/v2.5.0" + "source": "https://github.com/FriendsOfBehat/MinkExtension/tree/v2.6.1" }, - "time": "2021-01-21T09:27:44+00:00" + "time": "2021-12-24T13:19:26+00:00" }, { "name": "friends-of-behat/symfony-extension", - "version": "v2.2.0", + "version": "v2.3.1", "source": { "type": "git", "url": "https://github.com/FriendsOfBehat/SymfonyExtension.git", - "reference": "9954f5d4c34d5522ded781ba62b07e06fa71bd10" + "reference": "572c34e6483e70db0afd45111553332f95bc06ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfBehat/SymfonyExtension/zipball/9954f5d4c34d5522ded781ba62b07e06fa71bd10", - "reference": "9954f5d4c34d5522ded781ba62b07e06fa71bd10", + "url": "https://api.github.com/repos/FriendsOfBehat/SymfonyExtension/zipball/572c34e6483e70db0afd45111553332f95bc06ca", + "reference": "572c34e6483e70db0afd45111553332f95bc06ca", "shasum": "" }, "require": { "behat/behat": "^3.6.1", - "php": "^7.3 || ^8.0", - "symfony/dependency-injection": "^4.4 || ^5.1", - "symfony/http-kernel": "^4.4 || ^5.1", - "symfony/proxy-manager-bridge": "^4.4 || ^5.1" + "php": "^7.4 || ^8.0", + "symfony/dependency-injection": "^4.4 || ^5.3 || ^6.0", + "symfony/http-kernel": "^4.4 || ^5.3 || ^6.0", + "symfony/proxy-manager-bridge": "^4.4 || ^5.3 || ^6.0" }, "require-dev": { "behat/mink-selenium2-driver": "^1.3", @@ -6792,12 +6826,12 @@ "friends-of-behat/mink-extension": "^2.5", "friends-of-behat/page-object-extension": "^0.3.2", "friends-of-behat/service-container-extension": "^1.1", - "sylius-labs/coding-standard": "^3.2", - "symfony/browser-kit": "^4.4 || ^5.1", - "symfony/framework-bundle": "^4.4 || ^5.1", - "symfony/process": "^4.4 || ^5.1", - "symfony/yaml": "^4.4 || ^5.1", - "vimeo/psalm": "4.4.1" + "sylius-labs/coding-standard": "^4.1.1", + "symfony/browser-kit": "^4.4 || ^5.3 || ^6.0", + "symfony/framework-bundle": "^4.4 || ^5.3 || ^6.0", + "symfony/process": "^4.4 || ^5.3 || ^6.0", + "symfony/yaml": "^4.4 || ^5.3 || ^6.0", + "vimeo/psalm": "4.15.0" }, "suggest": { "friends-of-behat/mink": "^1.9", @@ -6829,9 +6863,9 @@ "description": "Integrates Behat with Symfony.", "support": { "issues": "https://github.com/FriendsOfBehat/SymfonyExtension/issues", - "source": "https://github.com/FriendsOfBehat/SymfonyExtension/tree/v2.2.0" + "source": "https://github.com/FriendsOfBehat/SymfonyExtension/tree/v2.3.1" }, - "time": "2021-02-04T15:45:42+00:00" + "time": "2021-12-24T13:14:59+00:00" }, { "name": "fzaninotto/faker", @@ -6941,16 +6975,16 @@ }, { "name": "mockery/mockery", - "version": "1.4.3", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "d1339f64479af1bee0e82a0413813fe5345a54ea" + "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/d1339f64479af1bee0e82a0413813fe5345a54ea", - "reference": "d1339f64479af1bee0e82a0413813fe5345a54ea", + "url": "https://api.github.com/repos/mockery/mockery/zipball/c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac", + "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac", "shasum": "" }, "require": { @@ -7007,9 +7041,9 @@ ], "support": { "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/1.4.3" + "source": "https://github.com/mockery/mockery/tree/1.5.0" }, - "time": "2021-02-24T09:51:49+00:00" + "time": "2022-01-20T13:18:17+00:00" }, { "name": "myclabs/deep-copy", @@ -7028,9 +7062,6 @@ "require": { "php": "^7.1 || ^8.0" }, - "replace": { - "myclabs/deep-copy": "self.version" - }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", @@ -7038,12 +7069,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, "files": [ "src/DeepCopy/deep_copy.php" - ] + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7122,16 +7153,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.10.5", + "version": "v4.13.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f" + "reference": "210577fe3cf7badcc5814d99455df46564f3c077" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4432ba399e47c66624bc73c8c0f811e5c109576f", - "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077", "shasum": "" }, "require": { @@ -7172,9 +7203,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.5" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" }, - "time": "2021-05-03T19:11:20+00:00" + "time": "2021-11-30T19:35:32+00:00" }, { "name": "openlss/lib-array2xml", @@ -7231,16 +7262,16 @@ }, { "name": "phar-io/manifest", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", "shasum": "" }, "require": { @@ -7285,22 +7316,22 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/master" + "source": "https://github.com/phar-io/manifest/tree/2.0.3" }, - "time": "2020-06-27T14:33:11+00:00" + "time": "2021-07-20T11:28:43+00:00" }, { "name": "phar-io/version", - "version": "3.1.0", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" + "reference": "15a90844ad40f127afd244c0cad228de2a80052a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "url": "https://api.github.com/repos/phar-io/version/zipball/15a90844ad40f127afd244c0cad228de2a80052a", + "reference": "15a90844ad40f127afd244c0cad228de2a80052a", "shasum": "" }, "require": { @@ -7336,9 +7367,9 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.1.0" + "source": "https://github.com/phar-io/version/tree/3.1.1" }, - "time": "2021-02-23T14:00:09+00:00" + "time": "2022-02-07T21:56:48+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -7395,16 +7426,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", "shasum": "" }, "require": { @@ -7415,7 +7446,8 @@ "webmozart/assert": "^1.9.1" }, "require-dev": { - "mockery/mockery": "~1.3.2" + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" }, "type": "library", "extra": { @@ -7445,22 +7477,22 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" }, - "time": "2020-09-03T19:13:55+00:00" + "time": "2021-10-19T17:43:47+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.4.0", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" + "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", + "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", "shasum": "" }, "require": { @@ -7468,7 +7500,8 @@ "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "ext-tokenizer": "*" + "ext-tokenizer": "*", + "psalm/phar": "^4.8" }, "type": "library", "extra": { @@ -7494,39 +7527,39 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" }, - "time": "2020-09-17T18:55:26+00:00" + "time": "2022-01-04T19:58:01+00:00" }, { "name": "phpspec/prophecy", - "version": "1.13.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", "shasum": "" }, "require": { "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.1", + "php": "^7.2 || ~8.0, <8.2", "phpdocumentor/reflection-docblock": "^5.2", "sebastian/comparator": "^3.0 || ^4.0", "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "phpspec/phpspec": "^6.0", + "phpspec/phpspec": "^6.0 || ^7.0", "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { @@ -7561,29 +7594,29 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.13.0" + "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" }, - "time": "2021-03-17T13:42:18+00:00" + "time": "2021-12-08T12:19:24+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.6", + "version": "9.2.10", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f6293e1b30a2354e8428e004689671b83871edde" + "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", - "reference": "f6293e1b30a2354e8428e004689671b83871edde", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d5850aaf931743067f4bfc1ae4cbd06468400687", + "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.10.2", + "nikic/php-parser": "^4.13.0", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -7632,7 +7665,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.10" }, "funding": [ { @@ -7640,20 +7673,20 @@ "type": "github" } ], - "time": "2021-03-28T07:26:59+00:00" + "time": "2021-12-05T09:12:13+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.5", + "version": "3.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", "shasum": "" }, "require": { @@ -7692,7 +7725,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" }, "funding": [ { @@ -7700,7 +7733,7 @@ "type": "github" } ], - "time": "2020-09-28T05:57:25+00:00" + "time": "2021-12-02T12:48:52+00:00" }, { "name": "phpunit/php-invoker", @@ -7885,16 +7918,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.6", + "version": "9.5.13", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "fb9b8333f14e3dce976a60ef6a7e05c7c7ed8bfb" + "reference": "597cb647654ede35e43b137926dfdfef0fb11743" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fb9b8333f14e3dce976a60ef6a7e05c7c7ed8bfb", - "reference": "fb9b8333f14e3dce976a60ef6a7e05c7c7ed8bfb", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/597cb647654ede35e43b137926dfdfef0fb11743", + "reference": "597cb647654ede35e43b137926dfdfef0fb11743", "shasum": "" }, "require": { @@ -7906,11 +7939,11 @@ "ext-xml": "*", "ext-xmlwriter": "*", "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.1", + "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.3", + "phpunit/php-code-coverage": "^9.2.7", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", @@ -7945,11 +7978,11 @@ } }, "autoload": { - "classmap": [ - "src/" - ], "files": [ "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -7972,11 +8005,11 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.6" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.13" }, "funding": [ { - "url": "https://phpunit.de/donate.html", + "url": "https://phpunit.de/sponsors.html", "type": "custom" }, { @@ -7984,7 +8017,7 @@ "type": "github" } ], - "time": "2021-06-23T05:14:38+00:00" + "time": "2022-01-24T07:33:35+00:00" }, { "name": "roave/security-advisories", @@ -7992,46 +8025,61 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "ac0d045cdd1a9f1c87a0225a1dcda2bfb71be924" + "reference": "a74c203357d9b250a4019bc18e9a23a050e16bef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/ac0d045cdd1a9f1c87a0225a1dcda2bfb71be924", - "reference": "ac0d045cdd1a9f1c87a0225a1dcda2bfb71be924", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/a74c203357d9b250a4019bc18e9a23a050e16bef", + "reference": "a74c203357d9b250a4019bc18e9a23a050e16bef", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", - "adodb/adodb-php": "<5.20.12", + "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", + "akaunting/akaunting": "<2.1.13", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", "amphp/artax": "<1.0.6|>=2,<2.0.6", "amphp/http": "<1.0.1", "amphp/http-client": ">=4,<4.4", + "anchorcms/anchor-cms": "<=0.12.7", "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6", + "area17/twill": "<1.2.5|>=2,<2.5.3", "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99", "aws/aws-sdk-php": ">=3,<3.2.1", "bagisto/bagisto": "<0.1.5", "barrelstrength/sprout-base-email": "<1.2.7", "barrelstrength/sprout-forms": "<3.9", - "baserproject/basercms": "<4.4.5", + "baserproject/basercms": "<4.5.4", + "billz/raspap-webgui": "<=2.6.6", "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3", "bolt/bolt": "<3.7.2", "bolt/core": "<4.1.13", + "bottelet/flarepoint": "<2.2.1", "brightlocal/phpwhois": "<=4.2.5", - "buddypress/buddypress": "<5.1.2", + "buddypress/buddypress": "<7.2.1", "bugsnag/bugsnag-laravel": ">=2,<2.0.2", - "cakephp/cakephp": ">=1.3,<1.3.18|>=2,<2.4.99|>=2.5,<2.5.99|>=2.6,<2.6.12|>=2.7,<2.7.6|>=3,<3.5.18|>=3.6,<3.6.15|>=3.7,<3.7.7", + "bytefury/crater": "<6.0.2", + "cachethq/cachet": "<2.5.1", + "cakephp/cakephp": "<4.0.6", + "cardgate/magento2": "<2.0.33", "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", "cartalyst/sentry": "<=2.1.6", + "catfan/medoo": "<1.7.5", "centreon/centreon": "<20.10.7", "cesnet/simplesamlphp-module-proxystatistics": "<3.1", + "codeception/codeception": "<3.1.3|>=4,<4.1.22", "codeigniter/framework": "<=3.0.6", - "composer/composer": "<1.10.22|>=2-alpha.1,<2.0.13", + "codeigniter4/framework": "<4.1.8", + "codiad/codiad": "<=2.8.4", + "composer/composer": "<1.10.23|>=2-alpha.1,<2.1.9", + "concrete5/concrete5": "<8.5.5", + "concrete5/core": "<8.5.7", "contao-components/mediaelement": ">=2.14.2,<2.21.1", "contao/core": ">=2,<3.5.39", - "contao/core-bundle": ">=4,<4.4.52|>=4.5,<4.9.16|>=4.10,<4.11.5|= 4.10.0", + "contao/core-bundle": "<4.9.18|>=4.10,<4.11.7|= 4.10.0", "contao/listing-bundle": ">=4,<4.4.8", + "craftcms/cms": "<3.7.14", "croogo/croogo": "<3.0.7", "datadog/dd-trace": ">=0.30,<0.30.2", "david-garcia/phpwhois": "<=4.3.1", @@ -8040,150 +8088,193 @@ "doctrine/annotations": ">=1,<1.2.7", "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1", - "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2", + "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2|>=3,<3.1.4", "doctrine/doctrine-bundle": "<1.5.2", "doctrine/doctrine-module": "<=0.7.1", "doctrine/mongodb-odm": ">=1,<1.0.2", "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", - "dolibarr/dolibarr": "<11.0.4", + "dolibarr/dolibarr": "<=14.0.5|>= 3.3.beta1, < 13.0.2", "dompdf/dompdf": ">=0.6,<0.6.2", - "drupal/core": ">=7,<7.80|>=8,<8.9.14|>=9,<9.0.12|>=9.1,<9.1.7", - "drupal/drupal": ">=7,<7.80|>=8,<8.9.14|>=9,<9.0.12|>=9.1,<9.1.7", + "drupal/core": ">=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", + "drupal/drupal": ">=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", "dweeves/magmi": "<=0.7.24", + "ecodev/newsletter": "<=4", + "elgg/elgg": "<3.3.24|>=4,<4.0.5", "endroid/qr-code-bundle": "<3.4.2", "enshrined/svg-sanitize": "<0.13.1", "erusev/parsedown": "<1.7.2", + "ether/logs": "<3.0.4", "ezsystems/demobundle": ">=5.4,<5.4.6.1", "ezsystems/ez-support-tools": ">=2.2,<2.2.3", "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1", "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1|>=5.4,<5.4.11.1|>=2017.12,<2017.12.0.1", - "ezsystems/ezplatform": ">=1.7,<1.7.9.1|>=1.13,<1.13.5.1|>=2.5,<2.5.4", - "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6", + "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24", + "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<=1.5.25", "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", "ezsystems/ezplatform-kernel": "<=1.2.5|>=1.3,<=1.3.1", - "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<=1.3.1", + "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", + "ezsystems/ezplatform-richtext": ">=2.3,<=2.3.7", "ezsystems/ezplatform-user": ">=1,<1.0.1", - "ezsystems/ezpublish-kernel": "<=6.13.8.1|>=7,<=7.5.15.1", - "ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.6|>=5.4,<5.4.14.2|>=2011,<2017.12.7.3|>=2018.6,<2018.6.1.4|>=2018.9,<2018.9.1.3|>=2019.3,<2019.3.5.1", + "ezsystems/ezpublish-kernel": "<=6.13.8.1|>=7,<7.5.26", + "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.3.5.1", "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", "ezsystems/repository-forms": ">=2.3,<2.3.2.1", "ezyang/htmlpurifier": "<4.1.1", - "facade/ignition": "<1.16.14|>=2,<2.4.2|>=2.5,<2.5.2", + "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", "feehi/cms": "<=2.1.1", + "feehi/feehicms": "<=0.1.3", "firebase/php-jwt": "<2", "flarum/core": ">=1,<=1.0.1", "flarum/sticky": ">=0.1-beta.14,<=0.1-beta.15", "flarum/tags": "<=0.1-beta.13", "fluidtypo3/vhs": "<5.1.1", "fooman/tcpdf": "<6.2.22", - "forkcms/forkcms": "<5.8.3", + "forkcms/forkcms": "<=5.9.2", "fossar/tcpdf-parser": "<6.2.22", - "francoisjacquet/rosariosis": "<6.5.1", + "francoisjacquet/rosariosis": "<8.1.1", "friendsofsymfony/oauth2-php": "<1.3", "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", + "froala/wysiwyg-editor": "<3.2.7", "fuel/core": "<1.8.1", - "getgrav/grav": "<=1.7.10", - "getkirby/cms": "<3.5.4", + "gaoming13/wechat-php-sdk": "<=1.10.2", + "getgrav/grav": "<1.7.28", + "getkirby/cms": "<3.5.8", "getkirby/panel": "<2.5.14", + "gilacms/gila": "<=1.11.4", + "globalpayments/php-sdk": "<2", + "google/protobuf": "<3.15", "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", "gree/jose": "<=2.2", "gregwar/rst": "<1.0.3", + "grumpydictator/firefly-iii": "<5.6.5", "guzzlehttp/guzzle": ">=4-rc.2,<4.2.4|>=5,<5.3.1|>=6,<6.2.1", + "helloxz/imgurl": "<=2.31", + "hillelcoren/invoice-ninja": "<5.3.35", + "hjue/justwriting": "<=1", + "hov/jobfair": "<1.0.13|>=2,<2.0.2", + "ibexa/post-install": "<=1.0.4", + "icecoder/icecoder": "<=8.1", "illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10", "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<=4.1.99999|>=4.2,<=4.2.99999|>=5,<=5.0.99999|>=5.1,<=5.1.99999|>=5.2,<=5.2.99999|>=5.3,<=5.3.99999|>=5.4,<=5.4.99999|>=5.5,<=5.5.49|>=5.6,<=5.6.99999|>=5.7,<=5.7.99999|>=5.8,<=5.8.99999|>=6,<6.18.31|>=7,<7.22.4", - "illuminate/database": "<6.20.26|>=7,<8.40", + "illuminate/database": "<6.20.26|>=7,<7.30.5|>=8,<8.40", "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", - "illuminate/view": ">=7,<7.1.2", + "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", "impresscms/impresscms": "<=1.4.2", + "in2code/femanager": "<5.5.1|>=6,<6.3.1", "intelliants/subrion": "<=4.2.1", "ivankristianto/phpwhois": "<=4.3", - "james-heinrich/getid3": "<1.9.9", + "jackalope/jackalope-doctrine-dbal": "<1.7.4", + "james-heinrich/getid3": "<1.9.21", "joomla/archive": "<1.1.10", "joomla/session": "<1.3.1", + "jsdecena/laracom": "<2.0.9", "jsmitty12/phpwhois": "<5.1", "kazist/phpwhois": "<=4.2.6", + "kevinpapst/kimai2": "<1.16.7", "kitodo/presentation": "<3.1.2", "klaviyo/magento2-extension": ">=1,<3", "kreait/firebase-php": ">=3.2,<3.8.1", "la-haute-societe/tcpdf": "<6.2.22", + "laminas/laminas-form": "<2.17.1|>=3,<3.0.2|>=3.1,<3.1.1", "laminas/laminas-http": "<2.14.2", - "laravel/framework": "<6.20.26|>=7,<8.40", + "laravel/framework": "<6.20.42|>=7,<7.30.6|>=8,<8.75", "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", + "latte/latte": "<2.10.8", + "lavalite/cms": "<=5.8", + "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", "league/commonmark": "<0.18.3", "league/flysystem": "<1.1.4|>=2,<2.1.1", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", - "librenms/librenms": "<21.1", + "librenms/librenms": "<=21.11", + "limesurvey/limesurvey": "<3.27.19", + "livehelperchat/livehelperchat": "<=3.91", "livewire/livewire": ">2.2.4,<2.2.6", + "lms/routes": "<2.1.1", + "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", "magento/community-edition": ">=2,<2.2.10|>=2.3,<2.3.3", "magento/magento1ce": "<1.9.4.3", "magento/magento1ee": ">=1,<1.14.4.3", "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2-p.2", "marcwillmann/turn": "<0.3.3", - "mautic/core": "<3.3.2|= 2.13.1", + "mautic/core": "<4|= 2.13.1", "mediawiki/core": ">=1.27,<1.27.6|>=1.29,<1.29.3|>=1.30,<1.30.2|>=1.31,<1.31.9|>=1.32,<1.32.6|>=1.32.99,<1.33.3|>=1.33.99,<1.34.3|>=1.34.99,<1.35", + "microweber/microweber": "<1.2.11", + "miniorange/miniorange-saml": "<1.4.3", "mittwald/typo3_forum": "<1.2.1", + "modx/revolution": "<2.8", "monolog/monolog": ">=1.8,<1.12", - "moodle/moodle": "<3.5.17|>=3.7,<3.7.9|>=3.8,<3.8.8|>=3.9,<3.9.5|>=3.10,<3.10.2", + "moodle/moodle": "<3.9.11|>=3.10-beta,<3.10.8|>=3.11,<3.11.5", + "mustache/mustache": ">=2,<2.14.1", "namshi/jose": "<2.2", + "neoan3-apps/template": "<1.1.1", "neos/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", "neos/form": ">=1.2,<4.3.3|>=5,<5.0.9|>=5.1,<5.1.3", "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.9.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", "neos/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", + "netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15", "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", + "nilsteampassnet/teampass": "<=2.1.27.36", "nukeviet/nukeviet": "<4.3.4", "nystudio107/craft-seomatic": "<3.3", "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", "october/backend": "<1.1.2", "october/cms": "= 1.1.1|= 1.0.471|= 1.0.469|>=1.0.319,<1.0.469", - "october/october": ">=1.0.319,<1.0.466", + "october/october": ">=1.0.319,<1.0.466|>=2.1,<2.1.12", "october/rain": "<1.0.472|>=1.1,<1.1.2", + "october/system": "<1.0.473|>=1.1,<1.1.6|>=2.1,<2.1.12", "onelogin/php-saml": "<2.10.4", "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", "opencart/opencart": "<=3.0.3.2", "openid/php-openid": "<2.3", - "openmage/magento-lts": "<=19.4.12|>=20,<=20.0.8", + "openmage/magento-lts": "<19.4.15|>=20,<20.0.13", "orchid/platform": ">=9,<9.4.4", - "oro/crm": ">=1.7,<1.7.4", - "oro/platform": ">=1.7,<1.7.4", + "oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7", + "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<4.2.8", "padraic/humbug_get_contents": "<1.1.2", "pagarme/pagarme-php": ">=0,<3", "pagekit/pagekit": "<=1.0.18", "paragonie/random_compat": "<2", "passbolt/passbolt_api": "<2.11", "paypal/merchant-sdk-php": "<3.12", - "pear/archive_tar": "<1.4.12", + "pear/archive_tar": "<1.4.14", + "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", "personnummer/personnummer": "<3.0.2", "phanan/koel": "<5.1.4", - "phpfastcache/phpfastcache": ">=5,<5.0.13", + "phpfastcache/phpfastcache": "<6.1.5|>=7,<7.1.2|>=8,<8.0.7", "phpmailer/phpmailer": "<6.5", "phpmussel/phpmussel": ">=1,<1.6", - "phpmyadmin/phpmyadmin": "<4.9.6|>=5,<5.0.3", + "phpmyadmin/phpmyadmin": "<4.9.8|>=5,<5.0.3|>=5.1,<5.1.2", "phpoffice/phpexcel": "<1.8.2", "phpoffice/phpspreadsheet": "<1.16", "phpseclib/phpseclib": "<2.0.31|>=3,<3.0.7", + "phpservermon/phpservermon": "<=3.5.2", "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3", "phpwhois/phpwhois": "<=4.2.5", "phpxmlrpc/extras": "<0.6.1", - "pimcore/pimcore": "<6.8.8", - "pocketmine/pocketmine-mp": "<3.15.4", + "pimcore/pimcore": "<=10.3", + "pocketmine/pocketmine-mp": "<4.0.7", "pressbooks/pressbooks": "<5.18", "prestashop/autoupgrade": ">=4,<4.10.1", "prestashop/contactform": ">1.0.1,<4.3", "prestashop/gamification": "<2.3.2", + "prestashop/prestashop": ">=1.7,<=1.7.8.2", "prestashop/productcomments": ">=4,<4.2.1", "prestashop/ps_emailsubscription": "<2.6.1", "prestashop/ps_facetedsearch": "<3.4.1", + "prestashop/ps_linklist": "<3.1", "privatebin/privatebin": "<1.2.2|>=1.3,<1.3.2", "propel/propel": ">=2-alpha.1,<=2-alpha.7", "propel/propel1": ">=1,<=1.7.1", - "pterodactyl/panel": "<0.7.19|>=1-rc.0,<=1-rc.6", + "pterodactyl/panel": "<1.7", + "ptrofimov/beanstalk_console": "<1.7.14", "pusher/pusher-php-server": "<2.2.1", "pwweb/laravel-core": "<=0.3.6-beta", "rainlab/debugbar-plugin": "<3.1", + "remdex/livehelperchat": "<3.93", "rmccue/requests": ">=1.6,<1.8", "robrichards/xmlseclibs": "<3.0.4", "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", @@ -8191,17 +8282,18 @@ "scheb/two-factor-bundle": ">=0,<3.26|>=4,<4.11", "sensiolabs/connect": "<4.2.3", "serluck/phpwhois": "<=4.2.6", - "shopware/core": "<=6.3.5.2", - "shopware/platform": "<=6.3.5.2", + "shopware/core": "<=6.4.6", + "shopware/platform": "<=6.4.6", "shopware/production": "<=6.3.5.2", - "shopware/shopware": "<=5.6.9", - "silverstripe/admin": ">=1.0.3,<1.0.4|>=1.1,<1.1.1", + "shopware/shopware": "<5.7.7", + "showdoc/showdoc": "<=2.10.2", + "silverstripe/admin": ">=1,<1.8.1", "silverstripe/assets": ">=1,<1.4.7|>=1.5,<1.5.2", "silverstripe/cms": "<4.3.6|>=4.4,<4.4.4", "silverstripe/comments": ">=1.3,<1.9.99|>=2,<2.9.99|>=3,<3.1.1", "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", - "silverstripe/framework": "<4.7.4", - "silverstripe/graphql": "<=3.5|>=4-alpha.1,<4-alpha.2", + "silverstripe/framework": "<4.10.1", + "silverstripe/graphql": "<3.5.2|>=4-alpha.1,<4-alpha.2", "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4", "silverstripe/subsites": ">=2,<2.1.1", @@ -8213,31 +8305,36 @@ "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", "simplito/elliptic-php": "<1.0.6", "slim/slim": "<2.6", - "smarty/smarty": "<3.1.39", + "smarty/smarty": "<3.1.43|>=4,<4.0.3", + "snipe/snipe-it": "<=5.3.7", "socalnick/scn-social-auth": "<1.15.2", "socialiteproviders/steam": "<1.1", + "spipu/html2pdf": "<5.2.4", "spoonity/tcpdf": "<6.2.22", "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", - "ssddanbrown/bookstack": "<0.29.2", + "ssddanbrown/bookstack": "<21.12.1", "stormpath/sdk": ">=0,<9.9.99", "studio-42/elfinder": "<2.1.59", - "sulu/sulu": "<1.6.34|>=2,<2.0.10|>=2.1,<2.1.1", + "subrion/cms": "<=4.2.1", + "sulu/sulu": "= 2.4.0-RC1|<1.6.44|>=2,<2.2.18|>=2.3,<2.3.8", "swiftmailer/swiftmailer": ">=4,<5.4.5", "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", "sylius/grid-bundle": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", + "sylius/paypal-plugin": ">=1,<1.2.4|>=1.3,<1.3.1", "sylius/resource-bundle": "<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", - "sylius/sylius": "<1.6.9|>=1.7,<1.7.9|>=1.8,<1.8.3", + "sylius/sylius": "<1.6.9|>=1.7,<1.7.9|>=1.8,<1.8.3|>=1.9,<1.9.5", "symbiote/silverstripe-multivaluefield": ">=3,<3.0.99", "symbiote/silverstripe-queuedjobs": ">=3,<3.0.2|>=3.1,<3.1.4|>=4,<4.0.7|>=4.1,<4.1.2|>=4.2,<4.2.4|>=4.3,<4.3.3|>=4.4,<4.4.3|>=4.5,<4.5.1|>=4.6,<4.6.4", "symbiote/silverstripe-versionedfiles": "<=2.0.3", + "symfont/process": ">=0,<4", "symfony/cache": ">=3.1,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", "symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", - "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", + "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<=5.3.14|>=5.4.3,<=5.4.3|>=6.0.3,<=6.0.3|= 6.0.3|= 5.4.3|= 5.3.14", "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", - "symfony/http-kernel": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.4.13|>=5,<5.1.5", + "symfony/http-kernel": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.4.13|>=5,<5.1.5|>=5.2,<5.3.12", "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", "symfony/maker-bundle": ">=1.27,<1.29.2|>=1.30,<1.31.1", "symfony/mime": ">=4.3,<4.3.8", @@ -8247,13 +8344,13 @@ "symfony/proxy-manager-bridge": ">=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", "symfony/routing": ">=2,<2.0.19", "symfony/security": ">=2,<2.7.51|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.8", - "symfony/security-bundle": ">=2,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", + "symfony/security-bundle": ">=2,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11|>=5.3,<5.3.12", "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9", "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8|>=5.3,<5.3.2", - "symfony/serializer": ">=2,<2.0.11", - "symfony/symfony": ">=2,<3.4.49|>=4,<4.4.24|>=5,<5.2.9|>=5.3,<5.3.2", + "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", + "symfony/symfony": ">=2,<3.4.49|>=4,<4.4.35|>=5,<5.3.12|>=5.3.14,<=5.3.14|>=5.4.3,<=5.4.3|>=6.0.3,<=6.0.3", "symfony/translation": ">=2,<2.0.17", "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", @@ -8262,16 +8359,21 @@ "t3/dce": ">=2.2,<2.6.2", "t3g/svg-sanitizer": "<1.0.3", "tecnickcom/tcpdf": "<6.2.22", + "terminal42/contao-tablelookupwizard": "<3.3.5", "thelia/backoffice-default-template": ">=2.1,<2.1.2", "thelia/thelia": ">=2.1-beta.1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", + "tinymce/tinymce": "<5.10", "titon/framework": ">=0,<9.9.99", + "topthink/framework": "<6.0.9", + "topthink/think": "<=6.0.9", + "topthink/thinkphp": "<=3.2.3", "tribalsystems/zenario": "<8.8.53370", "truckersmp/phpwhois": "<=4.3.1", - "twig/twig": "<1.38|>=2,<2.7", - "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.38|>=9,<9.5.25|>=10,<10.4.14|>=11,<11.1.1", + "twig/twig": "<1.38|>=2,<2.14.11|>3,<3.3.8", + "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.38|>=9,<9.5.29|>=10,<10.4.19|>=11,<11.5", "typo3/cms-backend": ">=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", - "typo3/cms-core": ">=6.2,<=6.2.56|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<9.5.25|>=10,<10.4.14|>=11,<11.1.1", + "typo3/cms-core": ">=6.2,<=6.2.56|>=7,<=7.6.52|>=8,<=8.7.41|>=9,<9.5.29|>=10,<10.4.19|>=11,<11.5", "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", @@ -8279,25 +8381,32 @@ "typo3/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", "ua-parser/uap-php": "<3.8", + "unisharp/laravel-filemanager": "<=2.3", + "userfrosting/userfrosting": ">=0.3.1,<4.6.3", "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", + "vanilla/safecurl": "<0.9.2", "verot/class.upload.php": "<=1.0.3|>=2,<=2.0.4", "vrana/adminer": "<4.7.9", "wallabag/tcpdf": "<6.2.22", + "wanglelecc/laracms": "<=1.0.3", + "web-auth/webauthn-framework": ">=3.3,<3.3.4", + "webcoast/deferred-image-processing": "<1.0.2", "wikimedia/parsoid": "<0.12.2", "willdurand/js-translation-bundle": "<2.1.1", "wp-cli/wp-cli": "<2.5", + "yetiforce/yetiforce-crm": "<=6.3", "yidashi/yii2cmf": "<=2", "yii2mod/yii2-cms": "<1.9.2", "yiisoft/yii": ">=1.1.14,<1.1.15", "yiisoft/yii2": "<2.0.38", "yiisoft/yii2-bootstrap": "<2.0.4", - "yiisoft/yii2-dev": "<2.0.15", + "yiisoft/yii2-dev": "<2.0.43", "yiisoft/yii2-elasticsearch": "<2.0.5", "yiisoft/yii2-gii": "<2.0.4", "yiisoft/yii2-jui": "<2.0.4", "yiisoft/yii2-redis": "<2.0.8", - "yoast-seo-for-typo3/yoast_seo": "<7.2.1", - "yourls/yourls": "<1.7.4", + "yoast-seo-for-typo3/yoast_seo": "<7.2.3", + "yourls/yourls": "<=1.8.2", "zendesk/zendesk_api_client_php": "<2.2.11", "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2", @@ -8358,7 +8467,7 @@ "type": "tidelift" } ], - "time": "2021-06-24T09:02:34+00:00" + "time": "2022-02-11T21:12:37+00:00" }, { "name": "sebastian/cli-parser", @@ -8789,16 +8898,16 @@ }, { "name": "sebastian/exporter", - "version": "4.0.3", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", "shasum": "" }, "require": { @@ -8847,14 +8956,14 @@ } ], "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/4.0.3" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" }, "funding": [ { @@ -8862,20 +8971,20 @@ "type": "github" } ], - "time": "2020-09-28T05:24:23+00:00" + "time": "2021-11-11T14:18:36+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.3", + "version": "5.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", "shasum": "" }, "require": { @@ -8918,7 +9027,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" }, "funding": [ { @@ -8926,7 +9035,7 @@ "type": "github" } ], - "time": "2021-06-11T13:31:12+00:00" + "time": "2022-02-14T08:28:10+00:00" }, { "name": "sebastian/lines-of-code", @@ -9326,27 +9435,28 @@ }, { "name": "symfony/browser-kit", - "version": "v4.4.25", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "729b1f0eca3ef18ea4e1a29b166145aff75d8fa1" + "reference": "18e73179c6a33d520de1b644941eba108dd811ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/729b1f0eca3ef18ea4e1a29b166145aff75d8fa1", - "reference": "729b1f0eca3ef18ea4e1a29b166145aff75d8fa1", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/18e73179c6a33d520de1b644941eba108dd811ad", + "reference": "18e73179c6a33d520de1b644941eba108dd811ad", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/dom-crawler": "^3.4|^4.0|^5.0" + "php": ">=7.2.5", + "symfony/dom-crawler": "^4.4|^5.0|^6.0", + "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "symfony/css-selector": "^3.4|^4.0|^5.0", - "symfony/http-client": "^4.3|^5.0", - "symfony/mime": "^4.3|^5.0", - "symfony/process": "^3.4|^4.0|^5.0" + "symfony/css-selector": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0" }, "suggest": { "symfony/process": "" @@ -9377,7 +9487,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v4.4.25" + "source": "https://github.com/symfony/browser-kit/tree/v5.4.3" }, "funding": [ { @@ -9393,24 +9503,25 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:39:37+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/css-selector", - "version": "v5.3.0", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "fcd0b29a7a0b1bb5bfbedc6231583d77fea04814" + "reference": "b0a190285cd95cb019237851205b8140ef6e368e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/fcd0b29a7a0b1bb5bfbedc6231583d77fea04814", - "reference": "fcd0b29a7a0b1bb5bfbedc6231583d77fea04814", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/b0a190285cd95cb019237851205b8140ef6e368e", + "reference": "b0a190285cd95cb019237851205b8140ef6e368e", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -9442,7 +9553,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.3.0" + "source": "https://github.com/symfony/css-selector/tree/v5.4.3" }, "funding": [ { @@ -9458,26 +9569,25 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:40:38+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/debug", - "version": "v4.4.25", + "version": "v4.4.37", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "a8d2d5c94438548bff9f998ca874e202bb29d07f" + "reference": "5de6c6e7f52b364840e53851c126be4d71e60470" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/a8d2d5c94438548bff9f998ca874e202bb29d07f", - "reference": "a8d2d5c94438548bff9f998ca874e202bb29d07f", + "url": "https://api.github.com/repos/symfony/debug/zipball/5de6c6e7f52b364840e53851c126be4d71e60470", + "reference": "5de6c6e7f52b364840e53851c126be4d71e60470", "shasum": "" }, "require": { "php": ">=7.1.3", - "psr/log": "~1.0", - "symfony/polyfill-php80": "^1.15" + "psr/log": "^1|^2|^3" }, "conflict": { "symfony/http-kernel": "<3.4" @@ -9511,7 +9621,7 @@ "description": "Provides tools to ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/debug/tree/v4.4.25" + "source": "https://github.com/symfony/debug/tree/v4.4.37" }, "funding": [ { @@ -9527,33 +9637,35 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:39:37+00:00" + "time": "2022-01-02T09:41:36+00:00" }, { "name": "symfony/dom-crawler", - "version": "v4.4.25", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "41d15bb6d6b95d2be763c514bb2494215d9c5eef" + "reference": "2634381fdf27a2a0a8ac8eb404025eb656c65d0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/41d15bb6d6b95d2be763c514bb2494215d9c5eef", - "reference": "41d15bb6d6b95d2be763c514bb2494215d9c5eef", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/2634381fdf27a2a0a8ac8eb404025eb656c65d0c", + "reference": "2634381fdf27a2a0a8ac8eb404025eb656c65d0c", "shasum": "" }, "require": { - "php": ">=7.1.3", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0" + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16" }, "conflict": { "masterminds/html5": "<2.6" }, "require-dev": { "masterminds/html5": "^2.6", - "symfony/css-selector": "^3.4|^4.0|^5.0" + "symfony/css-selector": "^4.4|^5.0|^6.0" }, "suggest": { "symfony/css-selector": "" @@ -9584,7 +9696,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v4.4.25" + "source": "https://github.com/symfony/dom-crawler/tree/v5.4.3" }, "funding": [ { @@ -9600,33 +9712,33 @@ "type": "tidelift" } ], - "time": "2021-05-26T11:20:16+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/proxy-manager-bridge", - "version": "v5.2.1", + "version": "v4.4.18", "source": { "type": "git", "url": "https://github.com/symfony/proxy-manager-bridge.git", - "reference": "fba051ee1cb00d1d40672ee2da842ba23c572576" + "reference": "373d72703ef24b6a22c8592f53c7f0e333d9f038" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/fba051ee1cb00d1d40672ee2da842ba23c572576", - "reference": "fba051ee1cb00d1d40672ee2da842ba23c572576", + "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/373d72703ef24b6a22c8592f53c7f0e333d9f038", + "reference": "373d72703ef24b6a22c8592f53c7f0e333d9f038", "shasum": "" }, "require": { "composer/package-versions-deprecated": "^1.8", "ocramius/proxy-manager": "~2.1", - "php": ">=7.2.5", - "symfony/dependency-injection": "^5.0" + "php": ">=7.1.3", + "symfony/dependency-injection": "^4.0|^5.0" }, "conflict": { "zendframework/zend-eventmanager": "2.6.0" }, "require-dev": { - "symfony/config": "^4.4|^5.0" + "symfony/config": "^3.4|^4.0|^5.0" }, "type": "symfony-bridge", "autoload": { @@ -9654,7 +9766,7 @@ "description": "Symfony ProxyManager Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/proxy-manager-bridge/tree/v5.2.1" + "source": "https://github.com/symfony/proxy-manager-bridge/tree/v4.4.18" }, "funding": [ { @@ -9670,50 +9782,50 @@ "type": "tidelift" } ], - "time": "2020-11-12T22:25:33+00:00" + "time": "2020-11-12T13:19:35+00:00" }, { "name": "symfony/translation", - "version": "v5.3.2", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "7e2603bcc598e14804c4d2359d8dc4ee3c40391b" + "reference": "71bb15335798f8c4da110911bcf2d2fead7a430d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/7e2603bcc598e14804c4d2359d8dc4ee3c40391b", - "reference": "7e2603bcc598e14804c4d2359d8dc4ee3c40391b", + "url": "https://api.github.com/repos/symfony/translation/zipball/71bb15335798f8c4da110911bcf2d2fead7a430d", + "reference": "71bb15335798f8c4da110911bcf2d2fead7a430d", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", + "php": ">=8.0.2", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15", - "symfony/translation-contracts": "^2.3" + "symfony/translation-contracts": "^2.3|^3.0" }, "conflict": { - "symfony/config": "<4.4", - "symfony/dependency-injection": "<5.0", - "symfony/http-kernel": "<5.0", - "symfony/twig-bundle": "<5.0", - "symfony/yaml": "<4.4" + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" }, "provide": { - "symfony/translation-implementation": "2.3" + "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/console": "^4.4|^5.0", - "symfony/dependency-injection": "^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/http-kernel": "^5.0", - "symfony/intl": "^4.4|^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/service-contracts": "^1.1.2|^2", - "symfony/yaml": "^4.4|^5.0" + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^5.4|^6.0" }, "suggest": { "psr/log-implementation": "To use logging capability in translator", @@ -9749,7 +9861,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.3.2" + "source": "https://github.com/symfony/translation/tree/v6.0.3" }, "funding": [ { @@ -9765,20 +9877,20 @@ "type": "tidelift" } ], - "time": "2021-06-06T09:51:56+00:00" + "time": "2022-01-07T00:29:03+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", "shasum": "" }, "require": { @@ -9807,7 +9919,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/master" + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" }, "funding": [ { @@ -9815,20 +9927,20 @@ "type": "github" } ], - "time": "2020-07-12T23:59:07+00:00" + "time": "2021-07-28T10:34:58+00:00" }, { "name": "vimeo/psalm", - "version": "4.8.1", + "version": "4.20.0", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "f73f2299dbc59a3e6c4d66cff4605176e728ee69" + "reference": "f82a70e7edfc6cf2705e9374c8a0b6a974a779ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/f73f2299dbc59a3e6c4d66cff4605176e728ee69", - "reference": "f73f2299dbc59a3e6c4d66cff4605176e728ee69", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/f82a70e7edfc6cf2705e9374c8a0b6a974a779ed", + "reference": "f82a70e7edfc6cf2705e9374c8a0b6a974a779ed", "shasum": "" }, "require": { @@ -9836,8 +9948,9 @@ "amphp/byte-stream": "^1.5", "composer/package-versions-deprecated": "^1.8.0", "composer/semver": "^1.4 || ^2.0 || ^3.0", - "composer/xdebug-handler": "^1.1 || ^2.0", + "composer/xdebug-handler": "^1.1 || ^2.0 || ^3.0", "dnoegel/php-xdg-base-dir": "^0.1.1", + "ext-ctype": "*", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -9847,11 +9960,11 @@ "felixfbecker/advanced-json-rpc": "^3.0.3", "felixfbecker/language-server-protocol": "^1.5", "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "nikic/php-parser": "^4.10.5", + "nikic/php-parser": "^4.13", "openlss/lib-array2xml": "^1.0", "php": "^7.1|^8", "sebastian/diff": "^3.0 || ^4.0", - "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0", + "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0 || ^6.0", "webmozart/path-util": "^2.3" }, "provide": { @@ -9869,12 +9982,12 @@ "psalm/plugin-phpunit": "^0.16", "slevomat/coding-standard": "^7.0", "squizlabs/php_codesniffer": "^3.5", - "symfony/process": "^4.3 || ^5.0", - "weirdan/phpunit-appveyor-reporter": "^1.0.0", + "symfony/process": "^4.3 || ^5.0 || ^6.0", "weirdan/prophecy-shim": "^1.0 || ^2.0" }, "suggest": { - "ext-igbinary": "^2.0.5" + "ext-curl": "In order to send data to shepherd", + "ext-igbinary": "^2.0.5 is required, used to serialize caching data" }, "bin": [ "psalm", @@ -9893,13 +10006,13 @@ } }, "autoload": { - "psr-4": { - "Psalm\\": "src/Psalm/" - }, "files": [ "src/functions.php", "src/spl_object_id.php" - ] + ], + "psr-4": { + "Psalm\\": "src/Psalm/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -9918,9 +10031,9 @@ ], "support": { "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm/tree/4.8.1" + "source": "https://github.com/vimeo/psalm/tree/4.20.0" }, - "time": "2021-06-20T23:03:20+00:00" + "time": "2022-02-03T17:03:47+00:00" }, { "name": "webmozart/assert", @@ -10028,6 +10141,7 @@ "issues": "https://github.com/webmozart/path-util/issues", "source": "https://github.com/webmozart/path-util/tree/2.3.0" }, + "abandoned": "symfony/filesystem", "time": "2015-12-17T08:42:14+00:00" } ], @@ -10039,7 +10153,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^8.0", + "php": "^8.1", "ext-amqp": "*", "ext-apcu": "*", "ext-json": "*", @@ -10049,5 +10163,5 @@ "platform-dev": { "ext-xdebug": "*" }, - "plugin-api-version": "2.0.0" + "plugin-api-version": "2.2.0" } diff --git a/src/Shared/Infrastructure/Logger/MonologLogger.php b/src/Shared/Infrastructure/Logger/MonologLogger.php index 2235cc240..9dc205e6f 100644 --- a/src/Shared/Infrastructure/Logger/MonologLogger.php +++ b/src/Shared/Infrastructure/Logger/MonologLogger.php @@ -8,7 +8,7 @@ final class MonologLogger implements Logger { - public function __construct(private \Monolog\Logger $logger) + public function __construct(private readonly \Monolog\Logger $logger) { } From 04c58832b83fa8b2de4ace0438c152f852f38963 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vincent=20Brout=C3=A9?= Date: Wed, 2 Mar 2022 18:27:57 +0100 Subject: [PATCH 04/40] Fix Prometheus configuration (#300) --- etc/prometheus/prometheus.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/etc/prometheus/prometheus.yml b/etc/prometheus/prometheus.yml index 47442dea6..db505fd9d 100644 --- a/etc/prometheus/prometheus.yml +++ b/etc/prometheus/prometheus.yml @@ -8,14 +8,14 @@ scrape_configs: - job_name: 'backoffice_backend' scrape_interval: 5s static_configs: - - targets: ['codelytv-php_ddd_skeleton-backoffice_backend-nginx:80'] + - targets: ['codelytv-php_ddd_skeleton-backoffice_backend-php:8040'] - job_name: 'backoffice_frontend' scrape_interval: 5s static_configs: - - targets: ['codelytv-php_ddd_skeleton-backoffice_frontend-nginx:80'] + - targets: ['codelytv-php_ddd_skeleton-backoffice_frontend-php:8041'] - job_name: 'mooc_backend' scrape_interval: 5s static_configs: - - targets: ['codelytv-php_ddd_skeleton-mooc_backend-nginx:80'] + - targets: ['codelytv-php_ddd_skeleton-mooc_backend-php:8030'] From ef615b7b55c7b9124eb1ae3a6d50a60146d2d09e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B3natan=20N=C3=BA=C3=B1ez?= Date: Fri, 8 Apr 2022 09:39:52 +0200 Subject: [PATCH 05/40] fix: run fpm as current host user instead of www-data (#292) --- Dockerfile | 7 ++++++- Makefile | 4 ++-- docker-compose.yml | 3 +++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 096c79bb9..41f981d1c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,6 +27,11 @@ RUN docker-php-ext-enable \ apcu \ opcache -RUN curl -sS https://get.symfony.com/cli/installer | bash && mv /root/.symfony/bin/symfony /usr/local/bin/symfony +RUN curl -sS https://get.symfony.com/cli/installer | bash -s - --install-dir /usr/local/bin COPY etc/infrastructure/php/ /usr/local/etc/php/ + +# allow non-root users have home +RUN mkdir -p /opt/home +RUN chmod 777 /opt/home +ENV HOME /opt/home diff --git a/Makefile b/Makefile index e79984f36..f3139b75b 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,7 @@ composer-require-module: INTERACTIVE=-ti --interactive .PHONY: composer composer composer-install composer-update composer-require composer-require-module: composer-env-file @docker run --rm $(INTERACTIVE) --volume $(current-dir):/app --user $(id -u):$(id -g) \ - composer:2.2.6 $(CMD) \ + composer:2.2 $(CMD) \ --ignore-platform-reqs \ --no-ansi @@ -69,7 +69,7 @@ destroy: CMD=down # Usage: `make doco CMD="build --parallel --pull --force-rm --no-cache"` .PHONY: doco doco start stop destroy: composer-env-file - @docker-compose $(CMD) + UID=${shell id -u} GID=${shell id -g} docker-compose $(CMD) .PHONY: rebuild rebuild: composer-env-file diff --git a/docker-compose.yml b/docker-compose.yml index 5c6782794..69e1555b2 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -53,6 +53,7 @@ services: backoffice_backend_php: container_name: codelytv-php_ddd_skeleton-backoffice_backend-php + user: "${UID}:${GID}" build: context: . dockerfile: Dockerfile @@ -70,6 +71,7 @@ services: backoffice_frontend_php: container_name: codelytv-php_ddd_skeleton-backoffice_frontend-php + user: "${UID}:${GID}" build: context: . dockerfile: Dockerfile @@ -88,6 +90,7 @@ services: mooc_backend_php: container_name: codelytv-php_ddd_skeleton-mooc_backend-php + user: "${UID}:${GID}" build: context: . dockerfile: Dockerfile From 51f2023df3fe62544b9bd9a6ace87ef86b744bfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B3natan=20N=C3=BA=C3=B1ez?= Date: Fri, 8 Apr 2022 09:48:35 +0200 Subject: [PATCH 06/40] fix: restore psr log to v2 (#304) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rafa Gómez --- composer.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/composer.lock b/composer.lock index 2511b3011..41fcf01c3 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": "545aff6813f8015080116169f732d738", + "content-hash": "beba92301f511169a995c29b17ab044e", "packages": [ { "name": "brick/math", @@ -2060,16 +2060,16 @@ }, { "name": "psr/log", - "version": "3.0.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376", + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376", "shasum": "" }, "require": { @@ -2078,7 +2078,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -2104,9 +2104,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" + "source": "https://github.com/php-fig/log/tree/2.0.0" }, - "time": "2021-07-14T16:46:02+00:00" + "time": "2021-07-14T16:41:46+00:00" }, { "name": "ralouphie/getallheaders", From b2b2b81b335800d0fb4c84dbd15492c9d38e04db Mon Sep 17 00:00:00 2001 From: Mika Date: Thu, 9 Jun 2022 20:26:58 +0200 Subject: [PATCH 07/40] Update README.md (new logo) (#310) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New logo replacement in the documentation 🐱‍👤 <🍍> --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 51bbcde86..dd94d40cc 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- - + + Codely logo

From 98ec9630645b14b53b1fc1a077ea616284d6f9bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Thu, 16 Jun 2022 12:38:04 +0200 Subject: [PATCH 08/40] feat: update to symfony 6 (#311) * feat: update to symfony 6 * ci: ignore composer.lock labeling the pr * feat: migrate to the latest doctrine version * feat: update docker images * feat: update symfony session component * feat: update to elasticsearch 8 feat: update to elasticsearch 8 * ci: wait until elastic is up --- .env | 10 +- .github/workflows/ci.yml | 7 + .github/workflows/labeler.yml | 3 +- Dockerfile | 2 +- Makefile | 26 +- apps/backoffice/backend/bin/console | 4 +- apps/backoffice/frontend/bin/console | 4 +- apps/backoffice/frontend/config/services.yaml | 4 + .../Courses/CoursesPostWebController.php | 6 +- apps/mooc/backend/bin/console | 4 +- .../Courses/CoursesPutController.php | 4 +- composer.json | 50 +- composer.lock | 2699 ++++++++--------- docker-compose.yml | 36 +- .../Doctrine/DoctrineEntityManagerFactory.php | 24 +- .../Infrastructure/Symfony/FlashSession.php | 6 +- .../Infrastructure/Symfony/WebController.php | 14 +- .../PhpUnit/InfrastructureTestCase.php | 4 +- 18 files changed, 1336 insertions(+), 1571 deletions(-) diff --git a/.env b/.env index b0800653e..8099dcd37 100644 --- a/.env +++ b/.env @@ -8,7 +8,7 @@ APP_SECRET=29ac4a5187930cd4b689aa0f3ee7cbc0 #--------------------------------# # MySql MOOC_DATABASE_DRIVER=pdo_mysql -MOOC_DATABASE_HOST=codelytv-php_ddd_skeleton-mooc-mysql +MOOC_DATABASE_HOST=codely-php_ddd_skeleton-mooc-mysql MOOC_DATABASE_PORT=3306 MOOC_DATABASE_NAME=mooc MOOC_DATABASE_USER=root @@ -18,22 +18,22 @@ MOOC_DATABASE_PASSWORD= #--------------------------------# # MySql BACKOFFICE_DATABASE_DRIVER=pdo_mysql -BACKOFFICE_DATABASE_HOST=codelytv-php_ddd_skeleton-mooc-mysql +BACKOFFICE_DATABASE_HOST=codely-php_ddd_skeleton-mooc-mysql BACKOFFICE_DATABASE_PORT=3306 BACKOFFICE_DATABASE_NAME=mooc BACKOFFICE_DATABASE_USER=root BACKOFFICE_DATABASE_PASSWORD= # Elasticsearch -BACKOFFICE_ELASTICSEARCH_HOST=codelytv-php_ddd_skeleton-backoffice-elastic +BACKOFFICE_ELASTICSEARCH_HOST=codely-php_ddd_skeleton-backoffice-elastic BACKOFFICE_ELASTICSEARCH_INDEX_PREFIX=backoffice # COMMON # #--------------------------------# # RabbitMQ -RABBITMQ_HOST=codelytv-php_ddd_skeleton-rabbitmq +RABBITMQ_HOST=codely-php_ddd_skeleton-rabbitmq RABBITMQ_PORT=5672 -RABBITMQ_LOGIN=codelytv +RABBITMQ_LOGIN=codely RABBITMQ_PASSWORD=c0d3ly RABBITMQ_EXCHANGE=domain_events RABBITMQ_MAX_RETRIES=5 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9af60fcdc..a9e05ac1f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,6 +32,13 @@ jobs: sleep 2 done + - name: 🧪 Wait for the elasticsearch to get up + run: | + while ! make ping-elasticsearch &>/dev/null; do + echo "Waiting for elasticsearch connection..." + sleep 2 + done + - name: 🐰 Wait for the message broker to get up run: | while ! make ping-rabbitmq &>/dev/null; do diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 5ff07378c..e99bf3b81 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest name: Label the PR size steps: - - uses: codelytv/pr-size-labeler@v1.3.0 + - uses: codelytv/pr-size-labeler@v1.8.1 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} xs_max_size: '10' @@ -15,3 +15,4 @@ jobs: m_max_size: '600' l_max_size: '1400' fail_if_xl: 'true' + files_to_ignore: 'composer.lock' diff --git a/Dockerfile b/Dockerfile index 41f981d1c..5e677d79f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM php:8.1.1-fpm-alpine +FROM php:8.1.6-fpm-alpine WORKDIR /app RUN wget https://github.com/FriendsOfPHP/pickle/releases/download/v0.7.9/pickle.phar \ diff --git a/Makefile b/Makefile index f3139b75b..afff5a540 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,7 @@ composer-require-module: INTERACTIVE=-ti --interactive .PHONY: composer composer composer-install composer-update composer-require composer-require-module: composer-env-file @docker run --rm $(INTERACTIVE) --volume $(current-dir):/app --user $(id -u):$(id -g) \ - composer:2.2 $(CMD) \ + composer:2.3.7 $(CMD) \ --ignore-platform-reqs \ --no-ansi @@ -38,14 +38,14 @@ reload: composer-env-file .PHONY: test test: composer-env-file - docker exec codelytv-php_ddd_skeleton-mooc_backend-php ./vendor/bin/phpunit --testsuite mooc - docker exec codelytv-php_ddd_skeleton-mooc_backend-php ./vendor/bin/phpunit --testsuite shared - docker exec codelytv-php_ddd_skeleton-mooc_backend-php ./vendor/bin/behat -p mooc_backend --format=progress -v - docker exec codelytv-php_ddd_skeleton-backoffice_backend-php ./vendor/bin/phpunit --testsuite backoffice + docker exec codely-php_ddd_skeleton-mooc_backend-php ./vendor/bin/phpunit --testsuite mooc + docker exec codely-php_ddd_skeleton-mooc_backend-php ./vendor/bin/phpunit --testsuite shared + docker exec codely-php_ddd_skeleton-mooc_backend-php ./vendor/bin/behat -p mooc_backend --format=progress -v + docker exec codely-php_ddd_skeleton-backoffice_backend-php ./vendor/bin/phpunit --testsuite backoffice .PHONY: static-analysis static-analysis: composer-env-file - docker exec codelytv-php_ddd_skeleton-mooc_backend-php ./vendor/bin/psalm + docker exec codely-php_ddd_skeleton-mooc_backend-php ./vendor/bin/psalm .PHONY: run-tests run-tests: composer-env-file @@ -79,14 +79,18 @@ rebuild: composer-env-file .PHONY: ping-mysql ping-mysql: - @docker exec codelytv-php_ddd_skeleton-mooc-mysql mysqladmin --user=root --password= --host "127.0.0.1" ping --silent + @docker exec codely-php_ddd_skeleton-mooc-mysql mysqladmin --user=root --password= --host "127.0.0.1" ping --silent + +.PHONY: ping-elasticsearch +ping-elasticsearch: + @curl -I -XHEAD localhost:9200 .PHONY: ping-rabbitmq ping-rabbitmq: - @docker exec codelytv-php_ddd_skeleton-rabbitmq rabbitmqctl ping --silent + @docker exec codely-php_ddd_skeleton-rabbitmq rabbitmqctl ping --silent clean-cache: @rm -rf apps/*/*/var - @docker exec codelytv-php_ddd_skeleton-backoffice_backend-php ./apps/backoffice/backend/bin/console cache:warmup - @docker exec codelytv-php_ddd_skeleton-backoffice_frontend-php ./apps/backoffice/frontend/bin/console cache:warmup - @docker exec codelytv-php_ddd_skeleton-mooc_backend-php ./apps/mooc/backend/bin/console cache:warmup + @docker exec codely-php_ddd_skeleton-backoffice_backend-php ./apps/backoffice/backend/bin/console cache:warmup + @docker exec codely-php_ddd_skeleton-backoffice_frontend-php ./apps/backoffice/frontend/bin/console cache:warmup + @docker exec codely-php_ddd_skeleton-mooc_backend-php ./apps/mooc/backend/bin/console cache:warmup diff --git a/apps/backoffice/backend/bin/console b/apps/backoffice/backend/bin/console index 91327c2e6..ac7f81a9a 100755 --- a/apps/backoffice/backend/bin/console +++ b/apps/backoffice/backend/bin/console @@ -4,7 +4,7 @@ use CodelyTv\Apps\Backoffice\Backend\BackofficeBackendKernel; use Symfony\Bundle\FrameworkBundle\Console\Application; use Symfony\Component\Console\Input\ArgvInput; -use Symfony\Component\Debug\Debug; +use Symfony\Component\ErrorHandler\Debug; if (false === in_array(PHP_SAPI, ['cli', 'phpdbg', 'embed'], true)) { echo 'Warning: The console should be invoked via the CLI version of PHP, not the ' . PHP_SAPI . ' SAPI' . PHP_EOL; @@ -12,7 +12,7 @@ if (false === in_array(PHP_SAPI, ['cli', 'phpdbg', 'embed'], true)) { set_time_limit(0); -require dirname(__DIR__) . '../../../../vendor/autoload.php'; +require dirname(__DIR__) . '../../../vendor/autoload.php'; if (!class_exists(Application::class)) { throw new RuntimeException('You need to add "symfony/framework-bundle" as a Composer dependency.'); diff --git a/apps/backoffice/frontend/bin/console b/apps/backoffice/frontend/bin/console index 70eea8863..5e2d7ebf2 100755 --- a/apps/backoffice/frontend/bin/console +++ b/apps/backoffice/frontend/bin/console @@ -4,7 +4,7 @@ use CodelyTv\Apps\Backoffice\Frontend\BackofficeFrontendKernel; use Symfony\Bundle\FrameworkBundle\Console\Application; use Symfony\Component\Console\Input\ArgvInput; -use Symfony\Component\Debug\Debug; +use Symfony\Component\ErrorHandler\Debug; if (false === in_array(PHP_SAPI, ['cli', 'phpdbg', 'embed'], true)) { echo 'Warning: The console should be invoked via the CLI version of PHP, not the ' . PHP_SAPI . ' SAPI' . PHP_EOL; @@ -12,7 +12,7 @@ if (false === in_array(PHP_SAPI, ['cli', 'phpdbg', 'embed'], true)) { set_time_limit(0); -require dirname(__DIR__) . '../../../../vendor/autoload.php'; +require dirname(__DIR__) . '../../../vendor/autoload.php'; if (!class_exists(Application::class)) { throw new RuntimeException('You need to add "symfony/framework-bundle" as a Composer dependency.'); diff --git a/apps/backoffice/frontend/config/services.yaml b/apps/backoffice/frontend/config/services.yaml index 99bad2baa..23de22805 100644 --- a/apps/backoffice/frontend/config/services.yaml +++ b/apps/backoffice/frontend/config/services.yaml @@ -2,6 +2,10 @@ imports: - { resource: ../../../../src/Backoffice/Shared/Infrastructure/Symfony/DependencyInjection/backoffice_services.yaml } - { resource: ../../../../src/Mooc/Shared/Infrastructure/Symfony/DependencyInjection/mooc_services.yaml } +framework: + session: + handler_id: null + services: _defaults: autoconfigure: true diff --git a/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php b/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php index d77b9633b..0b76138b7 100644 --- a/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php +++ b/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php @@ -47,9 +47,9 @@ private function createCourse(Request $request): RedirectResponse { $this->dispatch( new CreateCourseCommand( - $request->request->getAlpha('id'), - $request->request->getAlpha('name'), - $request->request->getAlpha('duration') + (string) $request->request->get('id'), + (string) $request->request->get('name'), + (string) $request->request->get('duration') ) ); diff --git a/apps/mooc/backend/bin/console b/apps/mooc/backend/bin/console index 7fc1ba297..c794905a3 100755 --- a/apps/mooc/backend/bin/console +++ b/apps/mooc/backend/bin/console @@ -4,7 +4,7 @@ use CodelyTv\Apps\Mooc\Backend\MoocBackendKernel; use Symfony\Bundle\FrameworkBundle\Console\Application; use Symfony\Component\Console\Input\ArgvInput; -use Symfony\Component\Debug\Debug; +use Symfony\Component\ErrorHandler\Debug; if (false === in_array(PHP_SAPI, ['cli', 'phpdbg', 'embed'], true)) { echo 'Warning: The console should be invoked via the CLI version of PHP, not the ' . PHP_SAPI . ' SAPI' . PHP_EOL; @@ -12,7 +12,7 @@ if (false === in_array(PHP_SAPI, ['cli', 'phpdbg', 'embed'], true)) { set_time_limit(0); -require dirname(__DIR__) . '../../../../vendor/autoload.php'; +require dirname(__DIR__) . '../../../vendor/autoload.php'; if (!class_exists(Application::class)) { throw new RuntimeException('You need to add "symfony/framework-bundle" as a Composer dependency.'); diff --git a/apps/mooc/backend/src/Controller/Courses/CoursesPutController.php b/apps/mooc/backend/src/Controller/Courses/CoursesPutController.php index 6cc34a3d0..2171caa33 100644 --- a/apps/mooc/backend/src/Controller/Courses/CoursesPutController.php +++ b/apps/mooc/backend/src/Controller/Courses/CoursesPutController.php @@ -16,8 +16,8 @@ public function __invoke(string $id, Request $request): Response $this->dispatch( new CreateCourseCommand( $id, - $request->request->getAlpha('name'), - $request->request->getAlpha('duration') + (string) $request->request->get('name'), + (string) $request->request->get('duration') ) ); diff --git a/composer.json b/composer.json index 84eadf11b..81cb056d8 100644 --- a/composer.json +++ b/composer.json @@ -12,46 +12,46 @@ "ext-zend-opcache": "*", "ext-pdo": "*", - "symfony/framework-bundle": "^5.4", - "symfony/messenger": "^5.4", - "symfony/dotenv": "^5.4", - "symfony/yaml": "^5.4", - "symfony/twig-bundle": "^5.4", - "symfony/validator": "^5.4", - "symfony/cache": "^5.4", + "symfony/framework-bundle": "^6", + "symfony/messenger": "^6", + "symfony/dotenv": "^6", + "symfony/yaml": "^6", + "symfony/twig-bundle": "^6", + "symfony/validator": "^6", + "symfony/cache": "^6", - "lambdish/phunctional": "^2.0", + "lambdish/phunctional": "^2", - "ramsey/uuid": "^4.2", + "ramsey/uuid": "^4", - "doctrine/dbal": "^2.10", - "doctrine/orm": "^2.7", + "doctrine/dbal": "^3", + "doctrine/orm": "^2", - "ocramius/proxy-manager": "^2.13", - "laminas/laminas-zendframework-bridge": "^1.4", + "ocramius/proxy-manager": "^2", + "laminas/laminas-zendframework-bridge": "^1", - "elasticsearch/elasticsearch": "^7.3", - "monolog/monolog": "^2.1", + "elasticsearch/elasticsearch": "^7", + "monolog/monolog": "^3", - "endclothing/prometheus_client_php": "^1.0" + "endclothing/prometheus_client_php": "^1" }, "require-dev": { "ext-xdebug": "*", "roave/security-advisories": "dev-master", - "behat/behat": "^3.10", - "friends-of-behat/mink-extension": "^2.6", - "friends-of-behat/symfony-extension": "^2.3", - "behat/mink-browserkit-driver": "^2.0", + "behat/behat": "^3", + "friends-of-behat/mink-extension": "^2", + "friends-of-behat/symfony-extension": "^2", + "behat/mink-browserkit-driver": "^2", - "phpunit/phpunit": "^9.2", - "mockery/mockery": "^1.4", + "phpunit/phpunit": "^9", + "mockery/mockery": "^1", - "fzaninotto/faker": "^1.9", + "fakerphp/faker": "^1", - "symfony/debug": "^4.4", - "vimeo/psalm": "^4.10" + "symfony/error-handler": "^6", + "vimeo/psalm": "^4" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index 41fcf01c3..37ab41f90 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": "beba92301f511169a995c29b17ab044e", + "content-hash": "c9b951def3b3da28de23e2cc96b22bf5", "packages": [ { "name": "brick/math", @@ -68,16 +68,16 @@ }, { "name": "doctrine/cache", - "version": "2.1.1", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce" + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/331b4d5dbaeab3827976273e9356b3b453c300ce", - "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce", + "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", "shasum": "" }, "require": { @@ -87,18 +87,12 @@ "doctrine/common": ">2.2,<2.4" }, "require-dev": { - "alcaeus/mongo-php-adapter": "^1.1", "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^8.0", - "mongodb/mongodb": "^1.1", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "predis/predis": "~1.0", + "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.2 || ^6.0@dev", - "symfony/var-exporter": "^4.4 || ^5.2 || ^6.0@dev" - }, - "suggest": { - "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" + "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6" }, "type": "library", "autoload": { @@ -147,7 +141,7 @@ ], "support": { "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.1.1" + "source": "https://github.com/doctrine/cache/tree/2.2.0" }, "funding": [ { @@ -163,7 +157,7 @@ "type": "tidelift" } ], - "time": "2021-07-17T14:49:29+00:00" + "time": "2022-05-20T20:07:39+00:00" }, { "name": "doctrine/collections", @@ -236,20 +230,20 @@ }, { "name": "doctrine/common", - "version": "3.2.2", + "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "295082d3750987065912816a9d536c2df735f637" + "reference": "c824e95d4c83b7102d8bc60595445a6f7d540f96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/295082d3750987065912816a9d536c2df735f637", - "reference": "295082d3750987065912816a9d536c2df735f637", + "url": "https://api.github.com/repos/doctrine/common/zipball/c824e95d4c83b7102d8bc60595445a6f7d540f96", + "reference": "c824e95d4c83b7102d8bc60595445a6f7d540f96", "shasum": "" }, "require": { - "doctrine/persistence": "^2.0", + "doctrine/persistence": "^2.0 || ^3.0", "php": "^7.1 || ^8.0" }, "require-dev": { @@ -306,7 +300,7 @@ ], "support": { "issues": "https://github.com/doctrine/common/issues", - "source": "https://github.com/doctrine/common/tree/3.2.2" + "source": "https://github.com/doctrine/common/tree/3.3.0" }, "funding": [ { @@ -322,39 +316,42 @@ "type": "tidelift" } ], - "time": "2022-02-02T09:15:57+00:00" + "time": "2022-02-05T18:28:51+00:00" }, { "name": "doctrine/dbal", - "version": "2.13.7", + "version": "3.3.6", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "6e22f6012b42d7932674857989fcf184e9e9b1c3" + "reference": "9e7f76dd1cde81c62574fdffa5a9c655c847ad21" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/6e22f6012b42d7932674857989fcf184e9e9b1c3", - "reference": "6e22f6012b42d7932674857989fcf184e9e9b1c3", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/9e7f76dd1cde81c62574fdffa5a9c655c847ad21", + "reference": "9e7f76dd1cde81c62574fdffa5a9c655c847ad21", "shasum": "" }, "require": { - "doctrine/cache": "^1.0|^2.0", - "doctrine/deprecations": "^0.5.3", + "composer-runtime-api": "^2", + "doctrine/cache": "^1.11|^2.0", + "doctrine/deprecations": "^0.5.3|^1", "doctrine/event-manager": "^1.0", - "ext-pdo": "*", - "php": "^7.1 || ^8" + "php": "^7.3 || ^8.0", + "psr/cache": "^1|^2|^3", + "psr/log": "^1|^2|^3" }, "require-dev": { "doctrine/coding-standard": "9.0.0", - "jetbrains/phpstorm-stubs": "2021.1", - "phpstan/phpstan": "1.3.0", - "phpunit/phpunit": "^7.5.20|^8.5|9.5.11", + "jetbrains/phpstorm-stubs": "2022.1", + "phpstan/phpstan": "1.6.3", + "phpstan/phpstan-strict-rules": "^1.2", + "phpunit/phpunit": "9.5.20", "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.16.1" + "symfony/cache": "^5.2|^6.0", + "symfony/console": "^2.7|^3.0|^4.0|^5.0|^6.0", + "vimeo/psalm": "4.23.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -365,7 +362,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" + "Doctrine\\DBAL\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -408,14 +405,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.7" + "source": "https://github.com/doctrine/dbal/tree/3.3.6" }, "funding": [ { @@ -431,29 +427,29 @@ "type": "tidelift" } ], - "time": "2022-01-06T09:08:04+00:00" + "time": "2022-05-02T17:21:01+00:00" }, { "name": "doctrine/deprecations", - "version": "v0.5.3", + "version": "v1.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "9504165960a1f83cc1480e2be1dd0a0478561314" + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314", - "reference": "9504165960a1f83cc1480e2be1dd0a0478561314", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", "shasum": "" }, "require": { "php": "^7.1|^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0|^7.0|^8.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0", - "psr/log": "^1.0" + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5|^8.5|^9.5", + "psr/log": "^1|^2|^3" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -472,9 +468,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v0.5.3" + "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" }, - "time": "2021-03-21T12:59:47+00:00" + "time": "2022-05-02T15:47:09+00:00" }, { "name": "doctrine/event-manager", @@ -663,29 +659,30 @@ }, { "name": "doctrine/instantiator", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.0", + "doctrine/coding-standard": "^9", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" }, "type": "library", "autoload": { @@ -712,7 +709,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + "source": "https://github.com/doctrine/instantiator/tree/1.4.1" }, "funding": [ { @@ -728,20 +725,20 @@ "type": "tidelift" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2022-03-03T08:28:38+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.2", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c" + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c", - "reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", "shasum": "" }, "require": { @@ -749,7 +746,7 @@ }, "require-dev": { "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "1.3", + "phpstan/phpstan": "^1.3", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "vimeo/psalm": "^4.11" }, @@ -788,7 +785,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.2" + "source": "https://github.com/doctrine/lexer/tree/1.2.3" }, "funding": [ { @@ -804,20 +801,20 @@ "type": "tidelift" } ], - "time": "2022-01-12T08:27:12+00:00" + "time": "2022-02-28T11:07:21+00:00" }, { "name": "doctrine/orm", - "version": "2.11.1", + "version": "2.12.2", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "4b88ce787d3916c8366abf52f6c658a7a27ed3a6" + "reference": "8291a7f09b12d14783ed6537b4586583d155869e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/4b88ce787d3916c8366abf52f6c658a7a27ed3a6", - "reference": "4b88ce787d3916c8366abf52f6c658a7a27ed3a6", + "url": "https://api.github.com/repos/doctrine/orm/zipball/8291a7f09b12d14783ed6537b4586583d155869e", + "reference": "8291a7f09b12d14783ed6537b4586583d155869e", "shasum": "" }, "require": { @@ -826,19 +823,18 @@ "doctrine/collections": "^1.5", "doctrine/common": "^3.0.3", "doctrine/dbal": "^2.13.1 || ^3.2", - "doctrine/deprecations": "^0.5.3", + "doctrine/deprecations": "^0.5.3 || ^1", "doctrine/event-manager": "^1.1", "doctrine/inflector": "^1.4 || ^2.0", "doctrine/instantiator": "^1.3", - "doctrine/lexer": "^1.0", - "doctrine/persistence": "^2.2", + "doctrine/lexer": "^1.2.3", + "doctrine/persistence": "^2.4 || ^3", "ext-ctype": "*", - "ext-pdo": "*", "php": "^7.1 || ^8.0", "psr/cache": "^1 || ^2 || ^3", "symfony/console": "^3.0 || ^4.0 || ^5.0 || ^6.0", "symfony/polyfill-php72": "^1.23", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "conflict": { "doctrine/annotations": "<1.13 || >= 2.0" @@ -847,12 +843,13 @@ "doctrine/annotations": "^1.13", "doctrine/coding-standard": "^9.0", "phpbench/phpbench": "^0.16.10 || ^1.0", - "phpstan/phpstan": "1.4.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", + "phpstan/phpstan": "~1.4.10 || 1.6.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psr/log": "^1 || ^2 || ^3", "squizlabs/php_codesniffer": "3.6.2", "symfony/cache": "^4.4 || ^5.4 || ^6.0", "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0", - "vimeo/psalm": "4.19.0" + "vimeo/psalm": "4.23.0" }, "suggest": { "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0", @@ -901,51 +898,50 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.11.1" + "source": "https://github.com/doctrine/orm/tree/2.12.2" }, - "time": "2022-01-30T21:47:06+00:00" + "time": "2022-05-02T19:10:07+00:00" }, { "name": "doctrine/persistence", - "version": "2.3.0", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "f8af155c1e7963f3d2b4415097d55757bbaa53d8" + "reference": "25ec98a8cbd1f850e60fdb62c0ef77c162da8704" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/f8af155c1e7963f3d2b4415097d55757bbaa53d8", - "reference": "f8af155c1e7963f3d2b4415097d55757bbaa53d8", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/25ec98a8cbd1f850e60fdb62c0ef77c162da8704", + "reference": "25ec98a8cbd1f850e60fdb62c0ef77c162da8704", "shasum": "" }, "require": { - "doctrine/cache": "^1.11 || ^2.0", "doctrine/collections": "^1.0", - "doctrine/deprecations": "^0.5.3", "doctrine/event-manager": "^1.0", - "php": "^7.1 || ^8.0", + "php": "^7.2 || ^8.0", "psr/cache": "^1.0 || ^2.0 || ^3.0" }, "conflict": { - "doctrine/annotations": "<1.0 || >=2.0", - "doctrine/common": "<2.10@dev" + "doctrine/annotations": "<1.7 || >=2.0", + "doctrine/common": "<2.10" }, "require-dev": { "composer/package-versions-deprecated": "^1.11", - "doctrine/annotations": "^1.0", - "doctrine/coding-standard": "^6.0 || ^9.0", + "doctrine/annotations": "^1.7", + "doctrine/coding-standard": "^9.0", "doctrine/common": "^3.0", - "phpstan/phpstan": "1.2.0", - "phpunit/phpunit": "^7.5.20 || ^8.0 || ^9.0", - "symfony/cache": "^4.4 || ^5.0 || ^6.0", - "vimeo/psalm": "4.13.1" + "phpstan/phpstan": "1.5.0", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6.0", + "vimeo/psalm": "4.22.0" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common", - "Doctrine\\Persistence\\": "lib/Doctrine/Persistence" + "Doctrine\\Persistence\\": "src/Persistence" } }, "notification-url": "https://packagist.org/downloads/", @@ -979,7 +975,7 @@ } ], "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.", - "homepage": "https://doctrine-project.org/projects/persistence.html", + "homepage": "https://www.doctrine-project.org/projects/persistence.html", "keywords": [ "mapper", "object", @@ -989,9 +985,23 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/2.3.0" + "source": "https://github.com/doctrine/persistence/tree/3.0.2" }, - "time": "2022-01-09T19:58:46+00:00" + "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%2Fpersistence", + "type": "tidelift" + } + ], + "time": "2022-05-06T06:10:05+00:00" }, { "name": "elasticsearch/elasticsearch", @@ -1219,18 +1229,100 @@ }, "time": "2021-11-16T11:51:30+00:00" }, + { + "name": "friendsofphp/proxy-manager-lts", + "version": "v1.0.12", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git", + "reference": "8419f0158715b30d4b99a5bd37c6a39671994ad7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/8419f0158715b30d4b99a5bd37c6a39671994ad7", + "reference": "8419f0158715b30d4b99a5bd37c6a39671994ad7", + "shasum": "" + }, + "require": { + "laminas/laminas-code": "~3.4.1|^4.0", + "php": ">=7.1", + "symfony/filesystem": "^4.4.17|^5.0|^6.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" + }, + "type": "library", + "extra": { + "thanks": { + "name": "ocramius/proxy-manager", + "url": "https://github.com/Ocramius/ProxyManager" + } + }, + "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.12" + }, + "funding": [ + { + "url": "https://github.com/Ocramius", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager", + "type": "tidelift" + } + ], + "time": "2022-05-05T09:31:05+00:00" + }, { "name": "guzzlehttp/guzzle", - "version": "6.5.5", + "version": "6.5.7", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" + "reference": "724562fa861e21a4071c652c8a159934e4f05592" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/724562fa861e21a4071c652c8a159934e4f05592", + "reference": "724562fa861e21a4071c652c8a159934e4f05592", "shasum": "" }, "require": { @@ -1267,10 +1359,40 @@ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle is a PHP HTTP client library", @@ -1286,9 +1408,23 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/6.5" + "source": "https://github.com/guzzle/guzzle/tree/6.5.7" }, - "time": "2020-06-16T21:01:06+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2022-06-09T21:36:50+00:00" }, { "name": "guzzlehttp/promises", @@ -1317,12 +1453,12 @@ } }, "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1376,16 +1512,16 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.8.3", + "version": "1.8.5", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "1afdd860a2566ed3c2b0b4a3de6e23434a79ec85" + "reference": "337e3ad8e5716c15f9657bd214d16cc5e69df268" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/1afdd860a2566ed3c2b0b4a3de6e23434a79ec85", - "reference": "1afdd860a2566ed3c2b0b4a3de6e23434a79ec85", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/337e3ad8e5716c15f9657bd214d16cc5e69df268", + "reference": "337e3ad8e5716c15f9657bd214d16cc5e69df268", "shasum": "" }, "require": { @@ -1466,7 +1602,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.8.3" + "source": "https://github.com/guzzle/psr7/tree/1.8.5" }, "funding": [ { @@ -1482,7 +1618,7 @@ "type": "tidelift" } ], - "time": "2021-10-05T13:56:00+00:00" + "time": "2022-03-20T21:51:18+00:00" }, { "name": "lambdish/phunctional", @@ -1542,16 +1678,16 @@ }, { "name": "laminas/laminas-code", - "version": "4.5.1", + "version": "4.5.2", "source": { "type": "git", "url": "https://github.com/laminas/laminas-code.git", - "reference": "6fd96d4d913571a2cd056a27b123fa28cb90ac4e" + "reference": "da01fb74c08f37e20e7ae49f1e3ee09aa401ebad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/6fd96d4d913571a2cd056a27b123fa28cb90ac4e", - "reference": "6fd96d4d913571a2cd056a27b123fa28cb90ac4e", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/da01fb74c08f37e20e7ae49f1e3ee09aa401ebad", + "reference": "da01fb74c08f37e20e7ae49f1e3ee09aa401ebad", "shasum": "" }, "require": { @@ -1572,12 +1708,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "Laminas\\Code\\": "src/" - }, "files": [ "polyfill/ReflectionEnumPolyfill.php" - ] + ], + "psr-4": { + "Laminas\\Code\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1604,30 +1740,30 @@ "type": "community_bridge" } ], - "time": "2021-12-19T18:06:55+00:00" + "time": "2022-06-06T11:26:02+00:00" }, { "name": "laminas/laminas-zendframework-bridge", - "version": "1.4.1", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-zendframework-bridge.git", - "reference": "88bf037259869891afce6504cacc4f8a07b24d0f" + "reference": "7f049390b756d34ba5940a8fb47634fbb51f79ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/88bf037259869891afce6504cacc4f8a07b24d0f", - "reference": "88bf037259869891afce6504cacc4f8a07b24d0f", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/7f049390b756d34ba5940a8fb47634fbb51f79ab", + "reference": "7f049390b756d34ba5940a8fb47634fbb51f79ab", "shasum": "" }, "require": { - "php": "^7.3 || ~8.0.0 || ~8.1.0" + "php": ">=7.4, <8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3", - "psalm/plugin-phpunit": "^0.15.1", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.6" + "phpunit/phpunit": "^9.5.14", + "psalm/plugin-phpunit": "^0.15.2", + "squizlabs/php_codesniffer": "^3.6.2", + "vimeo/psalm": "^4.21.0" }, "type": "library", "extra": { @@ -1666,44 +1802,48 @@ "type": "community_bridge" } ], - "time": "2021-12-21T14:34:37+00:00" + "time": "2022-02-22T22:17:01+00:00" }, { "name": "monolog/monolog", - "version": "2.3.5", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "fd4380d6fc37626e2f799f29d91195040137eba9" + "reference": "0c375495d40df0207e5833dca333f963b171ff43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd4380d6fc37626e2f799f29d91195040137eba9", - "reference": "fd4380d6fc37626e2f799f29d91195040137eba9", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/0c375495d40df0207e5833dca333f963b171ff43", + "reference": "0c375495d40df0207e5833dca333f963b171ff43", "shasum": "" }, "require": { - "php": ">=7.2", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" }, "provide": { - "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + "psr/log-implementation": "3.0.0" }, "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "aws/aws-sdk-php": "^3.0", "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", "graylog2/gelf-php": "^1.4.2", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", "php-console/php-console": "^3.1.3", - "phpspec/prophecy": "^1.6.1", - "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^9.5.16", "predis/predis": "^1.1", - "rollbar/rollbar": "^1.3", - "ruflin/elastica": ">=0.90@dev", - "swiftmailer/swiftmailer": "^5.3|^6.0" + "ruflin/elastica": "^7", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", @@ -1725,7 +1865,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -1753,7 +1893,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.3.5" + "source": "https://github.com/Seldaek/monolog/tree/3.1.0" }, "funding": [ { @@ -1765,111 +1905,20 @@ "type": "tidelift" } ], - "time": "2021-10-01T21:08:31+00:00" - }, - { - "name": "ocramius/proxy-manager", - "version": "2.13.0", - "source": { - "type": "git", - "url": "https://github.com/Ocramius/ProxyManager.git", - "reference": "21e2b4aa7d7661e7641cc6362fc8635ddcfa8464" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/21e2b4aa7d7661e7641cc6362fc8635ddcfa8464", - "reference": "21e2b4aa7d7661e7641cc6362fc8635ddcfa8464", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.1.0", - "laminas/laminas-code": "^4.3.0", - "php": "~7.4.1 || ~8.0.0", - "webimpress/safe-writer": "^2.2.0" - }, - "conflict": { - "doctrine/annotations": "<1.6.1", - "laminas/laminas-stdlib": "<3.2.1", - "thecodingmachine/safe": "<1.3.3", - "zendframework/zend-stdlib": "<3.2.1" - }, - "require-dev": { - "codelicia/xulieta": "^0.1.6", - "doctrine/coding-standard": "^8.2.1", - "ext-phar": "*", - "infection/infection": "^0.21.5", - "nikic/php-parser": "^4.10.5", - "phpbench/phpbench": "^0.17.1 || 1.0.0-alpha2", - "phpunit/phpunit": "^9.5.4", - "slevomat/coding-standard": "^6.3.10", - "squizlabs/php_codesniffer": "^3.6.0", - "vimeo/psalm": "^4.4.1" - }, - "suggest": { - "laminas/laminas-json": "To have the JsonRpc adapter (Remote Object feature)", - "laminas/laminas-soap": "To have the Soap adapter (Remote Object feature)", - "laminas/laminas-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)", - "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "ProxyManager\\": "src/ProxyManager" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.io/" - } - ], - "description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies", - "homepage": "https://github.com/Ocramius/ProxyManager", - "keywords": [ - "aop", - "lazy loading", - "proxy", - "proxy pattern", - "service proxies" - ], - "support": { - "issues": "https://github.com/Ocramius/ProxyManager/issues", - "source": "https://github.com/Ocramius/ProxyManager/tree/2.13.0" - }, - "funding": [ - { - "url": "https://github.com/Ocramius", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager", - "type": "tidelift" - } - ], - "time": "2021-06-09T10:16:06+00:00" + "time": "2022-06-09T09:09:00+00:00" }, { "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": { @@ -1903,9 +1952,9 @@ "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", @@ -2060,16 +2109,16 @@ }, { "name": "psr/log", - "version": "2.0.0", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" }, "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/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", "shasum": "" }, "require": { @@ -2078,7 +2127,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { @@ -2104,9 +2153,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.0" }, - "time": "2021-07-14T16:41:46+00:00" + "time": "2021-07-14T16:46:02+00:00" }, { "name": "ralouphie/getallheaders", @@ -2233,25 +2282,24 @@ }, { "name": "ramsey/uuid", - "version": "4.2.3", + "version": "4.3.1", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df" + "reference": "8505afd4fea63b81a85d3b7b53ac3cb8dc347c28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", - "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/8505afd4fea63b81a85d3b7b53ac3cb8dc347c28", + "reference": "8505afd4fea63b81a85d3b7b53ac3cb8dc347c28", "shasum": "" }, "require": { "brick/math": "^0.8 || ^0.9", + "ext-ctype": "*", "ext-json": "*", - "php": "^7.2 || ^8.0", - "ramsey/collection": "^1.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php80": "^1.14" + "php": "^8.0", + "ramsey/collection": "^1.0" }, "replace": { "rhumsaa/uuid": "self.version" @@ -2288,20 +2336,17 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "4.x-dev" - }, "captainhook": { "force-install": true } }, "autoload": { - "psr-4": { - "Ramsey\\Uuid\\": "src/" - }, "files": [ "src/functions.php" - ] + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2315,7 +2360,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.2.3" + "source": "https://github.com/ramsey/uuid/tree/4.3.1" }, "funding": [ { @@ -2327,7 +2372,7 @@ "type": "tidelift" } ], - "time": "2021-09-25T23:10:38+00:00" + "time": "2022-03-27T21:42:02+00:00" }, { "name": "react/promise", @@ -2406,128 +2451,58 @@ "time": "2022-02-11T10:27:51+00:00" }, { - "name": "symfony/amqp-messenger", - "version": "v6.0.3", + "name": "symfony/cache", + "version": "v6.1.1", "source": { "type": "git", - "url": "https://github.com/symfony/amqp-messenger.git", - "reference": "e1bb5b0c812290643615b0ecebfe8debfd42ce5c" + "url": "https://github.com/symfony/cache.git", + "reference": "364fc90734230d936ac2db8e897cc03ec8497bbb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/amqp-messenger/zipball/e1bb5b0c812290643615b0ecebfe8debfd42ce5c", - "reference": "e1bb5b0c812290643615b0ecebfe8debfd42ce5c", + "url": "https://api.github.com/repos/symfony/cache/zipball/364fc90734230d936ac2db8e897cc03ec8497bbb", + "reference": "364fc90734230d936ac2db8e897cc03ec8497bbb", "shasum": "" }, "require": { - "ext-amqp": "*", - "php": ">=8.0.2", - "symfony/messenger": "^5.4|^6.0" - }, - "require-dev": { - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" - }, - "type": "symfony-messenger-bridge", - "autoload": { - "psr-4": { - "Symfony\\Component\\Messenger\\Bridge\\Amqp\\": "" - }, - "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 AMQP extension Messenger Bridge", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/amqp-messenger/tree/v6.0.3" - }, - "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": "2022-01-02T09:55:41+00:00" - }, - { - "name": "symfony/cache", - "version": "v5.4.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/cache.git", - "reference": "4178f0a19ec3f1f76e7f1a07b8187cbe3d94b825" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/4178f0a19ec3f1f76e7f1a07b8187cbe3d94b825", - "reference": "4178f0a19ec3f1f76e7f1a07b8187cbe3d94b825", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/cache": "^1.0|^2.0", - "psr/log": "^1.1|^2|^3", - "symfony/cache-contracts": "^1.1.7|^2", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/var-exporter": "^4.4|^5.0|^6.0" + "php": ">=8.1", + "psr/cache": "^2.0|^3.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^1.1.7|^2|^3", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/var-exporter": "^5.4|^6.0" }, "conflict": { "doctrine/dbal": "<2.13.1", - "symfony/dependency-injection": "<4.4", - "symfony/http-kernel": "<4.4", - "symfony/var-dumper": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/var-dumper": "<5.4" }, "provide": { - "psr/cache-implementation": "1.0|2.0", - "psr/simple-cache-implementation": "1.0|2.0", - "symfony/cache-implementation": "1.0|2.0" + "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": { "cache/integration-tests": "dev-master", - "doctrine/cache": "^1.6|^2.0", "doctrine/dbal": "^2.13.1|^3.0", "predis/predis": "^1.1", - "psr/simple-cache": "^1.0|^2.0", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/messenger": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/filesystem": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/messenger": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Cache\\": "" }, + "classmap": [ + "Traits/ValueWrapper.php" + ], "exclude-from-classmap": [ "/Tests/" ] @@ -2553,7 +2528,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v5.4.3" + "source": "https://github.com/symfony/cache/tree/v6.1.1" }, "funding": [ { @@ -2569,25 +2544,25 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:28:35+00:00" + "time": "2022-06-06T19:15:01+00:00" }, { "name": "symfony/cache-contracts", - "version": "v2.5.0", + "version": "v3.1.0", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "ac2e168102a2e06a2624f0379bde94cd5854ced2" + "reference": "2eab7fa459af6d75c6463e63e633b667a9b761d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/ac2e168102a2e06a2624f0379bde94cd5854ced2", - "reference": "ac2e168102a2e06a2624f0379bde94cd5854ced2", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/2eab7fa459af6d75c6463e63e633b667a9b761d3", + "reference": "2eab7fa459af6d75c6463e63e633b667a9b761d3", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/cache": "^1.0|^2.0|^3.0" + "php": ">=8.1", + "psr/cache": "^3.0" }, "suggest": { "symfony/cache-implementation": "" @@ -2595,7 +2570,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.1-dev" }, "thanks": { "name": "symfony/contracts", @@ -2632,7 +2607,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v2.5.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.1.0" }, "funding": [ { @@ -2648,31 +2623,30 @@ "type": "tidelift" } ], - "time": "2021-08-17T14:20:01+00:00" + "time": "2022-02-25T11:15:52+00:00" }, { "name": "symfony/config", - "version": "v6.0.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "c14f32ae4cd2a3c29d8825c5093463ac08ade7d8" + "reference": "ed8d12417bcacd2d969750feb1fe1aab1c11e613" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/c14f32ae4cd2a3c29d8825c5093463ac08ade7d8", - "reference": "c14f32ae4cd2a3c29d8825c5093463ac08ade7d8", + "url": "https://api.github.com/repos/symfony/config/zipball/ed8d12417bcacd2d969750feb1fe1aab1c11e613", + "reference": "ed8d12417bcacd2d969750feb1fe1aab1c11e613", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.1|^3", "symfony/filesystem": "^5.4|^6.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php81": "^1.22" + "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/finder": "<4.4" + "symfony/finder": "<5.4" }, "require-dev": { "symfony/event-dispatcher": "^5.4|^6.0", @@ -2710,7 +2684,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/v6.0.3" + "source": "https://github.com/symfony/config/tree/v6.1.0" }, "funding": [ { @@ -2726,24 +2700,25 @@ "type": "tidelift" } ], - "time": "2022-01-03T09:53:43+00:00" + "time": "2022-05-17T12:56:32+00:00" }, { "name": "symfony/console", - "version": "v6.0.3", + "version": "v6.1.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "22e8efd019c3270c4f79376234a3f8752cd25490" + "reference": "6187424023fbffcd757789aeb517c9161b1eabee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/22e8efd019c3270c4f79376234a3f8752cd25490", - "reference": "22e8efd019c3270c4f79376234a3f8752cd25490", + "url": "https://api.github.com/repos/symfony/console/zipball/6187424023fbffcd757789aeb517c9161b1eabee", + "reference": "6187424023fbffcd757789aeb517c9161b1eabee", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^1.1|^2|^3", "symfony/string": "^5.4|^6.0" @@ -2805,7 +2780,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.0.3" + "source": "https://github.com/symfony/console/tree/v6.1.1" }, "funding": [ { @@ -2821,45 +2796,43 @@ "type": "tidelift" } ], - "time": "2022-01-26T17:23:29+00:00" + "time": "2022-06-08T14:02:09+00:00" }, { "name": "symfony/dependency-injection", - "version": "v5.4.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "974580fd67f14d65b045c11b09eb149cd4b13df5" + "reference": "fc1fcd2b153f585934e80055bb3254913def2a6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/974580fd67f14d65b045c11b09eb149cd4b13df5", - "reference": "974580fd67f14d65b045c11b09eb149cd4b13df5", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/fc1fcd2b153f585934e80055bb3254913def2a6e", + "reference": "fc1fcd2b153f585934e80055bb3254913def2a6e", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1.1", + "php": ">=8.1", + "psr/container": "^1.1|^2.0", "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.22", - "symfony/service-contracts": "^1.1.6|^2" + "symfony/service-contracts": "^1.1.6|^2.0|^3.0" }, "conflict": { "ext-psr": "<1.1|>=2", - "symfony/config": "<5.3", - "symfony/finder": "<4.4", - "symfony/proxy-manager-bridge": "<4.4", - "symfony/yaml": "<4.4" + "symfony/config": "<6.1", + "symfony/finder": "<5.4", + "symfony/proxy-manager-bridge": "<5.4", + "symfony/yaml": "<5.4" }, "provide": { - "psr/container-implementation": "1.0", - "symfony/service-implementation": "1.0|2.0" + "psr/container-implementation": "1.1|2.0", + "symfony/service-implementation": "1.1|2.0|3.0" }, "require-dev": { - "symfony/config": "^5.3|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" + "symfony/config": "^6.1", + "symfony/expression-language": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" }, "suggest": { "symfony/config": "", @@ -2894,7 +2867,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/v5.4.3" + "source": "https://github.com/symfony/dependency-injection/tree/v6.1.0" }, "funding": [ { @@ -2910,29 +2883,29 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:28:35+00:00" + "time": "2022-05-27T06:40:20+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.0.0", + "version": "v3.1.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced" + "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/c726b64c1ccfe2896cb7df2e1331c357ad1c8ced", - "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.1-dev" }, "thanks": { "name": "symfony/contracts", @@ -2961,7 +2934,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.0" }, "funding": [ { @@ -2977,101 +2950,31 @@ "type": "tidelift" } ], - "time": "2021-11-01T23:48:49+00:00" - }, - { - "name": "symfony/doctrine-messenger", - "version": "v6.0.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/doctrine-messenger.git", - "reference": "3a51c50ecae4054b075ba23c7081be0bf536c785" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/3a51c50ecae4054b075ba23c7081be0bf536c785", - "reference": "3a51c50ecae4054b075ba23c7081be0bf536c785", - "shasum": "" - }, - "require": { - "doctrine/dbal": "^2.13|^3.0", - "php": ">=8.0.2", - "symfony/messenger": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3" - }, - "conflict": { - "doctrine/persistence": "<1.3" - }, - "require-dev": { - "doctrine/persistence": "^1.3|^2", - "symfony/property-access": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" - }, - "type": "symfony-messenger-bridge", - "autoload": { - "psr-4": { - "Symfony\\Component\\Messenger\\Bridge\\Doctrine\\": "" - }, - "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 Doctrine Messenger Bridge", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/doctrine-messenger/tree/v6.0.3" - }, - "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": "2022-01-02T09:55:41+00:00" + "time": "2022-02-25T11:15:52+00:00" }, { "name": "symfony/dotenv", - "version": "v5.4.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "84d1af2d39dd81b48eb1cd3af3f107eea7a275bb" + "reference": "568c11bcedf419e7e61f663912c3547b54de51df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/84d1af2d39dd81b48eb1cd3af3f107eea7a275bb", - "reference": "84d1af2d39dd81b48eb1cd3af3f107eea7a275bb", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/568c11bcedf419e7e61f663912c3547b54de51df", + "reference": "568c11bcedf419e7e61f663912c3547b54de51df", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3" + "php": ">=8.1" + }, + "conflict": { + "symfony/console": "<5.4" }, "require-dev": { - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0" + "symfony/console": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -3104,7 +3007,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v5.4.3" + "source": "https://github.com/symfony/dotenv/tree/v6.1.0" }, "funding": [ { @@ -3120,24 +3023,24 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:19:10+00:00" + "time": "2022-04-01T07:15:35+00:00" }, { "name": "symfony/error-handler", - "version": "v6.0.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "20343b3bad7ebafa38138ddcb97290a24722b57b" + "reference": "d02c662651e5de760bb7d5e94437113309e8f8a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/20343b3bad7ebafa38138ddcb97290a24722b57b", - "reference": "20343b3bad7ebafa38138ddcb97290a24722b57b", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/d02c662651e5de760bb7d5e94437113309e8f8a0", + "reference": "d02c662651e5de760bb7d5e94437113309e8f8a0", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "psr/log": "^1|^2|^3", "symfony/var-dumper": "^5.4|^6.0" }, @@ -3175,7 +3078,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/v6.0.3" + "source": "https://github.com/symfony/error-handler/tree/v6.1.0" }, "funding": [ { @@ -3191,24 +3094,24 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2022-05-23T10:32:57+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.0.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "6472ea2dd415e925b90ca82be64b8bc6157f3934" + "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/6472ea2dd415e925b90ca82be64b8bc6157f3934", - "reference": "6472ea2dd415e925b90ca82be64b8bc6157f3934", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a0449a7ad7daa0f7c0acd508259f80544ab5a347", + "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/event-dispatcher-contracts": "^2|^3" }, "conflict": { @@ -3258,7 +3161,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/v6.0.3" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.1.0" }, "funding": [ { @@ -3274,24 +3177,24 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2022-05-05T16:51:07+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.0.0", + "version": "v3.1.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "aa5422287b75594b90ee9cd807caf8f0df491385" + "reference": "02ff5eea2f453731cfbc6bc215e456b781480448" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/aa5422287b75594b90ee9cd807caf8f0df491385", - "reference": "aa5422287b75594b90ee9cd807caf8f0df491385", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/02ff5eea2f453731cfbc6bc215e456b781480448", + "reference": "02ff5eea2f453731cfbc6bc215e456b781480448", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "psr/event-dispatcher": "^1" }, "suggest": { @@ -3300,7 +3203,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.1-dev" }, "thanks": { "name": "symfony/contracts", @@ -3337,7 +3240,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.1.0" }, "funding": [ { @@ -3353,24 +3256,24 @@ "type": "tidelift" } ], - "time": "2021-07-15T12:33:35+00:00" + "time": "2022-02-25T11:15:52+00:00" }, { "name": "symfony/filesystem", - "version": "v6.0.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "6ae49c4fda17322171a2b8dc5f70bc6edbc498e1" + "reference": "3132d2f43ca799c2aa099f9738d98228c56baa5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/6ae49c4fda17322171a2b8dc5f70bc6edbc498e1", - "reference": "6ae49c4fda17322171a2b8dc5f70bc6edbc498e1", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/3132d2f43ca799c2aa099f9738d98228c56baa5d", + "reference": "3132d2f43ca799c2aa099f9738d98228c56baa5d", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, @@ -3400,7 +3303,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.0.3" + "source": "https://github.com/symfony/filesystem/tree/v6.1.0" }, "funding": [ { @@ -3416,24 +3319,27 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2022-05-21T13:34:40+00:00" }, { "name": "symfony/finder", - "version": "v6.0.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "8661b74dbabc23223f38c9b99d3f8ade71170430" + "reference": "45b8beb69d6eb3b05a65689ebfd4222326773f8f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/8661b74dbabc23223f38c9b99d3f8ade71170430", - "reference": "8661b74dbabc23223f38c9b99d3f8ade71170430", + "url": "https://api.github.com/repos/symfony/finder/zipball/45b8beb69d6eb3b05a65689ebfd4222326773f8f", + "reference": "45b8beb69d6eb3b05a65689ebfd4222326773f8f", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" }, "type": "library", "autoload": { @@ -3461,7 +3367,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.0.3" + "source": "https://github.com/symfony/finder/tree/v6.1.0" }, "funding": [ { @@ -3477,105 +3383,103 @@ "type": "tidelift" } ], - "time": "2022-01-26T17:23:29+00:00" + "time": "2022-04-15T08:08:08+00:00" }, { "name": "symfony/framework-bundle", - "version": "v5.4.4", + "version": "v6.1.1", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "d848b8ca3d87d0fcc9d0ccbc88cf8e128db0d4c7" + "reference": "260d97823252318eb3b525dd8c0bee2cc5dbfd7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/d848b8ca3d87d0fcc9d0ccbc88cf8e128db0d4c7", - "reference": "d848b8ca3d87d0fcc9d0ccbc88cf8e128db0d4c7", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/260d97823252318eb3b525dd8c0bee2cc5dbfd7f", + "reference": "260d97823252318eb3b525dd8c0bee2cc5dbfd7f", "shasum": "" }, "require": { + "composer-runtime-api": ">=2.1", "ext-xml": "*", - "php": ">=7.2.5", - "symfony/cache": "^5.2|^6.0", - "symfony/config": "^5.3|^6.0", - "symfony/dependency-injection": "^5.3|^6.0", + "php": ">=8.1", + "symfony/cache": "^5.4|^6.0", + "symfony/config": "^6.1", + "symfony/dependency-injection": "^6.1", "symfony/deprecation-contracts": "^2.1|^3", - "symfony/error-handler": "^4.4.1|^5.0.1|^6.0", - "symfony/event-dispatcher": "^5.1|^6.0", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^5.3|^6.0", - "symfony/http-kernel": "^5.4|^6.0", + "symfony/error-handler": "^6.1", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/filesystem": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^6.1", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.22", - "symfony/routing": "^5.3|^6.0" + "symfony/routing": "^5.4|^6.0" }, "conflict": { "doctrine/annotations": "<1.13.1", - "doctrine/cache": "<1.11", "doctrine/persistence": "<1.3", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "phpunit/phpunit": "<5.4.3", - "symfony/asset": "<5.3", - "symfony/console": "<5.2.5", - "symfony/dom-crawler": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/form": "<5.2", - "symfony/http-client": "<4.4", - "symfony/lock": "<4.4", - "symfony/mailer": "<5.2", + "symfony/asset": "<5.4", + "symfony/console": "<5.4", + "symfony/dom-crawler": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/lock": "<5.4", + "symfony/mailer": "<5.4", "symfony/messenger": "<5.4", - "symfony/mime": "<4.4", - "symfony/property-access": "<5.3", - "symfony/property-info": "<4.4", - "symfony/security-csrf": "<5.3", - "symfony/serializer": "<5.2", - "symfony/service-contracts": ">=3.0", - "symfony/stopwatch": "<4.4", - "symfony/translation": "<5.3", - "symfony/twig-bridge": "<4.4", - "symfony/twig-bundle": "<4.4", - "symfony/validator": "<5.2", - "symfony/web-profiler-bundle": "<4.4", - "symfony/workflow": "<5.2" + "symfony/mime": "<5.4", + "symfony/property-access": "<5.4", + "symfony/property-info": "<5.4", + "symfony/security-core": "<5.4", + "symfony/security-csrf": "<5.4", + "symfony/serializer": "<6.1", + "symfony/stopwatch": "<5.4", + "symfony/translation": "<5.4", + "symfony/twig-bridge": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/validator": "<5.4", + "symfony/web-profiler-bundle": "<5.4", + "symfony/workflow": "<5.4" }, "require-dev": { "doctrine/annotations": "^1.13.1", - "doctrine/cache": "^1.11|^2.0", - "doctrine/persistence": "^1.3|^2.0", - "paragonie/sodium_compat": "^1.8", + "doctrine/persistence": "^1.3|^2|^3", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/asset": "^5.3|^6.0", + "symfony/asset": "^5.4|^6.0", "symfony/browser-kit": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/css-selector": "^4.4|^5.0|^6.0", - "symfony/dom-crawler": "^4.4.30|^5.3.7|^6.0", - "symfony/dotenv": "^5.1|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/form": "^5.2|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/mailer": "^5.2|^6.0", - "symfony/messenger": "^5.4|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/console": "^5.4.9|^6.0.9", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/dotenv": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/form": "^5.4|^6.0", + "symfony/html-sanitizer": "^6.1", + "symfony/http-client": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/mailer": "^5.4|^6.0", + "symfony/messenger": "^6.1", + "symfony/mime": "^5.4|^6.0", "symfony/notifier": "^5.4|^6.0", - "symfony/phpunit-bridge": "^5.3|^6.0", "symfony/polyfill-intl-icu": "~1.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/property-info": "^4.4|^5.0|^6.0", - "symfony/rate-limiter": "^5.2|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/rate-limiter": "^5.4|^6.0", "symfony/security-bundle": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0", - "symfony/string": "^5.0|^6.0", - "symfony/translation": "^5.3|^6.0", - "symfony/twig-bundle": "^4.4|^5.0|^6.0", - "symfony/validator": "^5.2|^6.0", - "symfony/web-link": "^4.4|^5.0|^6.0", - "symfony/workflow": "^5.2|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0", + "symfony/semaphore": "^5.4|^6.0", + "symfony/serializer": "^6.1", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/string": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/twig-bundle": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "symfony/validator": "^5.4|^6.0", + "symfony/web-link": "^5.4|^6.0", + "symfony/workflow": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0", "twig/twig": "^2.10|^3.0" }, "suggest": { @@ -3614,7 +3518,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/v5.4.4" + "source": "https://github.com/symfony/framework-bundle/tree/v6.1.1" }, "funding": [ { @@ -3630,24 +3534,24 @@ "type": "tidelift" } ], - "time": "2022-01-29T17:49:40+00:00" + "time": "2022-06-09T10:53:06+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.0.3", + "version": "v6.1.1", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ad157299ced81a637fade1efcadd688d6deba5c1" + "reference": "a58dc88d56e04e57993d96c1407a17407610e1df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ad157299ced81a637fade1efcadd688d6deba5c1", - "reference": "ad157299ced81a637fade1efcadd688d6deba5c1", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/a58dc88d56e04e57993d96c1407a17407610e1df", + "reference": "a58dc88d56e04e57993d96c1407a17407610e1df", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.1" }, @@ -3686,7 +3590,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.0.3" + "source": "https://github.com/symfony/http-foundation/tree/v6.1.1" }, "funding": [ { @@ -3702,26 +3606,26 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2022-05-31T14:28:03+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.0.4", + "version": "v6.1.1", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "9dce179ce52b0f4f669c07fd5e465e5d809a5d3b" + "reference": "86c4d6f6c5b6cd012df41e3b950c924b3ffdc019" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9dce179ce52b0f4f669c07fd5e465e5d809a5d3b", - "reference": "9dce179ce52b0f4f669c07fd5e465e5d809a5d3b", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/86c4d6f6c5b6cd012df41e3b950c924b3ffdc019", + "reference": "86c4d6f6c5b6cd012df41e3b950c924b3ffdc019", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/error-handler": "^5.4|^6.0", + "symfony/error-handler": "^6.1", "symfony/event-dispatcher": "^5.4|^6.0", "symfony/http-foundation": "^5.4|^6.0", "symfony/polyfill-ctype": "^1.8" @@ -3729,9 +3633,9 @@ "conflict": { "symfony/browser-kit": "<5.4", "symfony/cache": "<5.4", - "symfony/config": "<5.4", + "symfony/config": "<6.1", "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", + "symfony/dependency-injection": "<6.1", "symfony/doctrine-bridge": "<5.4", "symfony/form": "<5.4", "symfony/http-client": "<5.4", @@ -3748,10 +3652,10 @@ "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", "symfony/browser-kit": "^5.4|^6.0", - "symfony/config": "^5.4|^6.0", + "symfony/config": "^6.1", "symfony/console": "^5.4|^6.0", "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", + "symfony/dependency-injection": "^6.1", "symfony/dom-crawler": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", @@ -3761,6 +3665,7 @@ "symfony/stopwatch": "^5.4|^6.0", "symfony/translation": "^5.4|^6.0", "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/uid": "^5.4|^6.0", "twig/twig": "^2.13|^3.0.4" }, "suggest": { @@ -3795,7 +3700,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.0.4" + "source": "https://github.com/symfony/http-kernel/tree/v6.1.1" }, "funding": [ { @@ -3811,50 +3716,46 @@ "type": "tidelift" } ], - "time": "2022-01-29T18:12:46+00:00" + "time": "2022-06-09T17:31:33+00:00" }, { "name": "symfony/messenger", - "version": "v5.4.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/messenger.git", - "reference": "4319c25b76573cff46f112ee8cc83fffa4b97579" + "reference": "e4e204ce4f2e90b54320c9043a0898d925dcd118" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/messenger/zipball/4319c25b76573cff46f112ee8cc83fffa4b97579", - "reference": "4319c25b76573cff46f112ee8cc83fffa4b97579", + "url": "https://api.github.com/repos/symfony/messenger/zipball/e4e204ce4f2e90b54320c9043a0898d925dcd118", + "reference": "e4e204ce4f2e90b54320c9043a0898d925dcd118", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/log": "^1|^2|^3", - "symfony/amqp-messenger": "^5.1|^6.0", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/doctrine-messenger": "^5.1|^6.0", - "symfony/polyfill-php80": "^1.16", - "symfony/redis-messenger": "^5.1|^6.0" + "php": ">=8.1", + "psr/log": "^1|^2|^3" }, "conflict": { - "symfony/event-dispatcher": "<4.4", - "symfony/framework-bundle": "<4.4", - "symfony/http-kernel": "<4.4", - "symfony/serializer": "<5.0" + "symfony/event-dispatcher": "<5.4", + "symfony/event-dispatcher-contracts": "<2", + "symfony/framework-bundle": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/serializer": "<5.4" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.3|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/property-access": "^4.4|^5.0|^6.0", - "symfony/routing": "^4.4|^5.0|^6.0", - "symfony/serializer": "^5.0|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^4.4|^5.0|^6.0", - "symfony/validator": "^4.4|^5.0|^6.0" + "symfony/stopwatch": "^5.4|^6.0", + "symfony/validator": "^5.4|^6.0" }, "suggest": { "enqueue/messenger-adapter": "For using the php-enqueue library as a transport." @@ -3885,7 +3786,7 @@ "description": "Helps applications send and receive messages to/from other applications or via message queues", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/messenger/tree/v5.4.3" + "source": "https://github.com/symfony/messenger/tree/v6.1.0" }, "funding": [ { @@ -3901,20 +3802,20 @@ "type": "tidelift" } ], - "time": "2022-01-12T18:55:10+00:00" + "time": "2022-05-11T12:12:29+00:00" }, { "name": "symfony/polyfill-apcu", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-apcu.git", - "reference": "80f7fb64c5b64ebcba76f40215e63808a2062a18" + "reference": "43273a33c46f9d5a08dac76859f63d6814242e81" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/80f7fb64c5b64ebcba76f40215e63808a2062a18", - "reference": "80f7fb64c5b64ebcba76f40215e63808a2062a18", + "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/43273a33c46f9d5a08dac76859f63d6814242e81", + "reference": "43273a33c46f9d5a08dac76859f63d6814242e81", "shasum": "" }, "require": { @@ -3923,7 +3824,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3962,7 +3863,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-apcu/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-apcu/tree/v1.26.0" }, "funding": [ { @@ -3978,20 +3879,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "30885182c981ab175d4d034db0f6f469898070ab" + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", - "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", "shasum": "" }, "require": { @@ -4006,7 +3907,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4014,12 +3915,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4044,7 +3945,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" }, "funding": [ { @@ -4060,20 +3961,20 @@ "type": "tidelift" } ], - "time": "2021-10-20T20:35:02+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" + "reference": "433d05519ce6990bf3530fba6957499d327395c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", + "reference": "433d05519ce6990bf3530fba6957499d327395c2", "shasum": "" }, "require": { @@ -4085,7 +3986,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4125,7 +4026,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" }, "funding": [ { @@ -4141,20 +4042,20 @@ "type": "tidelift" } ], - "time": "2021-11-23T21:10:46+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44" + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8", + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8", "shasum": "" }, "require": { @@ -4168,7 +4069,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4212,7 +4113,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.0" }, "funding": [ { @@ -4228,20 +4129,20 @@ "type": "tidelift" } ], - "time": "2021-09-14T14:02:44+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "reference": "219aa369ceff116e673852dce47c3a41794c14bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd", "shasum": "" }, "require": { @@ -4253,7 +4154,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4296,7 +4197,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" }, "funding": [ { @@ -4312,20 +4213,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", "shasum": "" }, "require": { @@ -4340,7 +4241,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4379,7 +4280,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" }, "funding": [ { @@ -4395,20 +4296,20 @@ "type": "tidelift" } ], - "time": "2021-11-30T18:21:41+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", "shasum": "" }, "require": { @@ -4417,7 +4318,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4455,7 +4356,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0" }, "funding": [ { @@ -4471,99 +4372,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:17:38+00:00" - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.24.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\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.24.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": "2021-06-05T21:20:04+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", "shasum": "" }, "require": { @@ -4572,7 +4394,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4617,7 +4439,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" }, "funding": [ { @@ -4633,20 +4455,20 @@ "type": "tidelift" } ], - "time": "2021-09-13T13:58:33+00:00" + "time": "2022-05-10T07:21:04+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.24.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", "shasum": "" }, "require": { @@ -4655,7 +4477,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4696,74 +4518,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.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": "2021-09-13T13:58:11+00:00" - }, - { - "name": "symfony/redis-messenger", - "version": "v6.0.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/redis-messenger.git", - "reference": "2977b1f207baf2de559ba881acab5976db9cbe18" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/redis-messenger/zipball/2977b1f207baf2de559ba881acab5976db9cbe18", - "reference": "2977b1f207baf2de559ba881acab5976db9cbe18", - "shasum": "" - }, - "require": { - "ext-redis": "*", - "php": ">=8.0.2", - "symfony/messenger": "^5.4|^6.0" - }, - "require-dev": { - "symfony/property-access": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" - }, - "type": "symfony-messenger-bridge", - "autoload": { - "psr-4": { - "Symfony\\Component\\Messenger\\Bridge\\Redis\\": "" - }, - "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 Redis extension Messenger Bridge", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/redis-messenger/tree/v6.0.3" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" }, "funding": [ { @@ -4779,24 +4534,24 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/routing", - "version": "v6.0.3", + "version": "v6.1.1", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "b1debdf7a40e6bc7eee0f363ab9dd667fe04f099" + "reference": "8f068b792e515b25e26855ac8dc7fe800399f3e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/b1debdf7a40e6bc7eee0f363ab9dd667fe04f099", - "reference": "b1debdf7a40e6bc7eee0f363ab9dd667fe04f099", + "url": "https://api.github.com/repos/symfony/routing/zipball/8f068b792e515b25e26855ac8dc7fe800399f3e5", + "reference": "8f068b792e515b25e26855ac8dc7fe800399f3e5", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" }, "conflict": { "doctrine/annotations": "<1.12", @@ -4851,7 +4606,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.0.3" + "source": "https://github.com/symfony/routing/tree/v6.1.1" }, "funding": [ { @@ -4867,25 +4622,26 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2022-06-08T12:21:15+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.4.1", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "d664541b99d6fb0247ec5ff32e87238582236204" + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d664541b99d6fb0247ec5ff32e87238582236204", - "reference": "d664541b99d6fb0247ec5ff32e87238582236204", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c", + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/container": "^1.1" + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -4896,7 +4652,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -4933,7 +4689,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.4.1" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.1" }, "funding": [ { @@ -4949,24 +4705,24 @@ "type": "tidelift" } ], - "time": "2021-11-04T16:37:19+00:00" + "time": "2022-03-13T20:07:29+00:00" }, { "name": "symfony/string", - "version": "v6.0.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2" + "reference": "d3edc75baf9f1d4f94879764dda2e1ac33499529" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/522144f0c4c004c80d56fa47e40e17028e2eefc2", - "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2", + "url": "https://api.github.com/repos/symfony/string/zipball/d3edc75baf9f1d4f94879764dda2e1ac33499529", + "reference": "d3edc75baf9f1d4f94879764dda2e1ac33499529", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -4983,12 +4739,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, "files": [ "Resources/functions.php" ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, "exclude-from-classmap": [ "/Tests/" ] @@ -5018,7 +4774,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.0.3" + "source": "https://github.com/symfony/string/tree/v6.1.0" }, "funding": [ { @@ -5034,24 +4790,24 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2022-04-22T08:18:23+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.0.0", + "version": "v3.1.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77" + "reference": "bfddd2a1faa271b782b791c361cc16e2dd49dfaa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1b6ea5a7442af5a12dba3dbd6d71034b5b234e77", - "reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/bfddd2a1faa271b782b791c361cc16e2dd49dfaa", + "reference": "bfddd2a1faa271b782b791c361cc16e2dd49dfaa", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" }, "suggest": { "symfony/translation-implementation": "" @@ -5059,7 +4815,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.1-dev" }, "thanks": { "name": "symfony/contracts", @@ -5069,7 +4825,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Translation\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5096,7 +4855,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.0.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.1.0" }, "funding": [ { @@ -5112,24 +4871,24 @@ "type": "tidelift" } ], - "time": "2021-09-07T12:43:40+00:00" + "time": "2022-04-22T07:30:54+00:00" }, { "name": "symfony/twig-bridge", - "version": "v6.0.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "31a4ec953c20299cc828eb6a1ccdf86d7ecbe22c" + "reference": "53ce2d7811500c0f0f94af700307ff5b1e305d3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/31a4ec953c20299cc828eb6a1ccdf86d7ecbe22c", - "reference": "31a4ec953c20299cc828eb6a1ccdf86d7ecbe22c", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/53ce2d7811500c0f0f94af700307ff5b1e305d3c", + "reference": "53ce2d7811500c0f0f94af700307ff5b1e305d3c", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/translation-contracts": "^1.1|^2|^3", "twig/twig": "^2.13|^3.0.4" }, @@ -5137,7 +4896,7 @@ "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/console": "<5.4", - "symfony/form": "<5.4", + "symfony/form": "<6.1", "symfony/http-foundation": "<5.4", "symfony/http-kernel": "<5.4", "symfony/translation": "<5.4", @@ -5152,7 +4911,8 @@ "symfony/dependency-injection": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", - "symfony/form": "^5.4|^6.0", + "symfony/form": "^6.1", + "symfony/html-sanitizer": "^6.1", "symfony/http-foundation": "^5.4|^6.0", "symfony/http-kernel": "^5.4|^6.0", "symfony/intl": "^5.4|^6.0", @@ -5179,6 +4939,7 @@ "symfony/expression-language": "For using the ExpressionExtension", "symfony/finder": "", "symfony/form": "For using the FormExtension", + "symfony/html-sanitizer": "For using the HtmlSanitizerExtension", "symfony/http-kernel": "For using the HttpKernelExtension", "symfony/routing": "For using the RoutingExtension", "symfony/security-core": "For using the SecurityExtension", @@ -5216,7 +4977,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v6.0.3" + "source": "https://github.com/symfony/twig-bridge/tree/v6.1.0" }, "funding": [ { @@ -5232,52 +4993,49 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2022-05-21T13:34:40+00:00" }, { "name": "symfony/twig-bundle", - "version": "v5.4.3", + "version": "v6.1.1", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "45ae3ee8155f93042a1033b166a7a3ed57b96a92" + "reference": "a2abab10068525a7f5a879e40e411d369d688545" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/45ae3ee8155f93042a1033b166a7a3ed57b96a92", - "reference": "45ae3ee8155f93042a1033b166a7a3ed57b96a92", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/a2abab10068525a7f5a879e40e411d369d688545", + "reference": "a2abab10068525a7f5a879e40e411d369d688545", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^5.0|^6.0", + "composer-runtime-api": ">=2.1", + "php": ">=8.1", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.16", - "symfony/twig-bridge": "^5.3|^6.0", + "symfony/twig-bridge": "^5.4|^6.0", "twig/twig": "^2.13|^3.0.4" }, "conflict": { - "symfony/dependency-injection": "<5.3", - "symfony/framework-bundle": "<5.0", - "symfony/service-contracts": ">=3.0", - "symfony/translation": "<5.0" + "symfony/framework-bundle": "<5.4", + "symfony/translation": "<5.4" }, "require-dev": { "doctrine/annotations": "^1.10.4", - "doctrine/cache": "^1.0|^2.0", - "symfony/asset": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^5.3|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/form": "^4.4|^5.0|^6.0", - "symfony/framework-bundle": "^5.0|^6.0", - "symfony/routing": "^4.4|^5.0|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0", - "symfony/translation": "^5.0|^6.0", - "symfony/web-link": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" + "symfony/asset": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/form": "^5.4|^6.0", + "symfony/framework-bundle": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/web-link": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" }, "type": "symfony-bundle", "autoload": { @@ -5305,7 +5063,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/v5.4.3" + "source": "https://github.com/symfony/twig-bundle/tree/v6.1.1" }, "funding": [ { @@ -5321,64 +5079,59 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-05-27T16:55:36+00:00" }, { "name": "symfony/validator", - "version": "v5.4.3", + "version": "v6.1.1", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "b420894e98f414b9ad5d4494650bf281f6dd6028" + "reference": "b2ae30b952165080e810c3a118b230184cb97db0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/b420894e98f414b9ad5d4494650bf281f6dd6028", - "reference": "b420894e98f414b9ad5d4494650bf281f6dd6028", + "url": "https://api.github.com/repos/symfony/validator/zipball/b2ae30b952165080e810c3a118b230184cb97db0", + "reference": "b2ae30b952165080e810c3a118b230184cb97db0", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.22", "symfony/translation-contracts": "^1.1|^2|^3" }, "conflict": { "doctrine/annotations": "<1.13", - "doctrine/cache": "<1.11", "doctrine/lexer": "<1.1", "phpunit/phpunit": "<5.4.3", - "symfony/dependency-injection": "<4.4", - "symfony/expression-language": "<5.1", - "symfony/http-kernel": "<4.4", - "symfony/intl": "<4.4", - "symfony/property-info": "<5.3", - "symfony/translation": "<4.4", - "symfony/yaml": "<4.4" + "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", + "symfony/yaml": "<5.4" }, "require-dev": { "doctrine/annotations": "^1.13", - "doctrine/cache": "^1.11|^2.0", "egulias/email-validator": "^2.1.10|^3", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^5.1|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/intl": "^4.4|^5.0|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0", - "symfony/property-access": "^4.4|^5.0|^6.0", - "symfony/property-info": "^5.3|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" + "symfony/cache": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" }, "suggest": { "egulias/email-validator": "Strict (RFC compliant) email validation", @@ -5418,7 +5171,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v5.4.3" + "source": "https://github.com/symfony/validator/tree/v6.1.1" }, "funding": [ { @@ -5434,24 +5187,24 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:28:35+00:00" + "time": "2022-06-09T12:51:38+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.0.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "7b701676fc64f9ef11f9b4870f16b48f66be4834" + "reference": "98587d939cb783aa04e828e8fa857edaca24c212" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7b701676fc64f9ef11f9b4870f16b48f66be4834", - "reference": "7b701676fc64f9ef11f9b4870f16b48f66be4834", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/98587d939cb783aa04e828e8fa857edaca24c212", + "reference": "98587d939cb783aa04e828e8fa857edaca24c212", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { @@ -5506,7 +5259,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.0.3" + "source": "https://github.com/symfony/var-dumper/tree/v6.1.0" }, "funding": [ { @@ -5522,24 +5275,24 @@ "type": "tidelift" } ], - "time": "2022-01-17T16:30:44+00:00" + "time": "2022-05-21T13:34:40+00:00" }, { "name": "symfony/var-exporter", - "version": "v6.0.3", + "version": "v6.1.1", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "1261b2d4a23081cb2b59a4caa311a5ac43b845b6" + "reference": "ce1452317b1210ddfe18d143fa8a09c18f034b89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/1261b2d4a23081cb2b59a4caa311a5ac43b845b6", - "reference": "1261b2d4a23081cb2b59a4caa311a5ac43b845b6", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/ce1452317b1210ddfe18d143fa8a09c18f034b89", + "reference": "ce1452317b1210ddfe18d143fa8a09c18f034b89", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" }, "require-dev": { "symfony/var-dumper": "^5.4|^6.0" @@ -5578,7 +5331,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.0.3" + "source": "https://github.com/symfony/var-exporter/tree/v6.1.1" }, "funding": [ { @@ -5594,32 +5347,31 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2022-05-27T12:58:07+00:00" }, { "name": "symfony/yaml", - "version": "v5.4.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "e80f87d2c9495966768310fc531b487ce64237a2" + "reference": "84ce4f9d2d68f306f971a39d949d8f4b5550dba2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2", - "reference": "e80f87d2c9495966768310fc531b487ce64237a2", + "url": "https://api.github.com/repos/symfony/yaml/zipball/84ce4f9d2d68f306f971a39d949d8f4b5550dba2", + "reference": "84ce4f9d2d68f306f971a39d949d8f4b5550dba2", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.3" + "symfony/console": "<5.4" }, "require-dev": { - "symfony/console": "^5.3|^6.0" + "symfony/console": "^5.4|^6.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -5653,7 +5405,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.4.3" + "source": "https://github.com/symfony/yaml/tree/v6.1.0" }, "funding": [ { @@ -5669,20 +5421,20 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:32:32+00:00" + "time": "2022-04-15T14:25:02+00:00" }, { "name": "twig/twig", - "version": "v3.3.8", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "972d8604a92b7054828b539f2febb0211dd5945c" + "reference": "e939eae92386b69b49cfa4599dd9bead6bf4a342" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/972d8604a92b7054828b539f2febb0211dd5945c", - "reference": "972d8604a92b7054828b539f2febb0211dd5945c", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/e939eae92386b69b49cfa4599dd9bead6bf4a342", + "reference": "e939eae92386b69b49cfa4599dd9bead6bf4a342", "shasum": "" }, "require": { @@ -5697,7 +5449,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -5712,114 +5464,55 @@ "authors": [ { "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - }, - { - "name": "Twig Team", - "role": "Contributors" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" - } - ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "https://twig.symfony.com", - "keywords": [ - "templating" - ], - "support": { - "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.3.8" - }, - "funding": [ - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/twig/twig", - "type": "tidelift" - } - ], - "time": "2022-02-04T06:59:48+00:00" - }, - { - "name": "webimpress/safe-writer", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/webimpress/safe-writer.git", - "reference": "9d37cc8bee20f7cb2f58f6e23e05097eab5072e6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webimpress/safe-writer/zipball/9d37cc8bee20f7cb2f58f6e23e05097eab5072e6", - "reference": "9d37cc8bee20f7cb2f58f6e23e05097eab5072e6", - "shasum": "" - }, - "require": { - "php": "^7.3 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.5.4", - "vimeo/psalm": "^4.7", - "webimpress/coding-standard": "^1.2.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev", - "dev-develop": "2.3.x-dev", - "dev-release-1.0": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Webimpress\\SafeWriter\\": "src/" + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" ], - "description": "Tool to write files safely, to avoid race conditions", + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", "keywords": [ - "concurrent write", - "file writer", - "race condition", - "safe writer", - "webimpress" + "templating" ], "support": { - "issues": "https://github.com/webimpress/safe-writer/issues", - "source": "https://github.com/webimpress/safe-writer/tree/2.2.0" + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.4.1" }, "funding": [ { - "url": "https://github.com/michalbundyra", + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" } ], - "time": "2021-04-19T16:34:45+00:00" + "time": "2022-05-17T05:48:52+00:00" } ], "packages-dev": [ { "name": "amphp/amp", - "version": "v2.6.1", + "version": "v2.6.2", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "c5fc66a78ee38d7ac9195a37bacaf940eb3f65ae" + "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/c5fc66a78ee38d7ac9195a37bacaf940eb3f65ae", - "reference": "c5fc66a78ee38d7ac9195a37bacaf940eb3f65ae", + "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", + "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", "shasum": "" }, "require": { @@ -5841,13 +5534,13 @@ } }, "autoload": { - "psr-4": { - "Amp\\": "lib" - }, "files": [ "lib/functions.php", "lib/Internal/functions.php" - ] + ], + "psr-4": { + "Amp\\": "lib" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5872,7 +5565,7 @@ } ], "description": "A non-blocking concurrency framework for PHP applications.", - "homepage": "http://amphp.org/amp", + "homepage": "https://amphp.org/amp", "keywords": [ "async", "asynchronous", @@ -5887,7 +5580,7 @@ "support": { "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.1" + "source": "https://github.com/amphp/amp/tree/v2.6.2" }, "funding": [ { @@ -5895,7 +5588,7 @@ "type": "github" } ], - "time": "2021-09-23T18:43:08+00:00" + "time": "2022-02-20T17:52:18+00:00" }, { "name": "amphp/byte-stream", @@ -6022,10 +5715,10 @@ }, "autoload": { "psr-4": { - "Behat\\Behat\\": "src/Behat/Behat/", - "Behat\\Testwork\\": "src/Behat/Testwork/", + "Behat\\Hook\\": "src/Behat/Hook/", "Behat\\Step\\": "src/Behat/Step/", - "Behat\\Hook\\": "src/Behat/Hook/" + "Behat\\Behat\\": "src/Behat/Behat/", + "Behat\\Testwork\\": "src/Behat/Testwork/" } }, "notification-url": "https://packagist.org/downloads/", @@ -6126,31 +5819,29 @@ }, { "name": "behat/mink", - "version": "v1.9.0", + "version": "v1.10.0", "source": { "type": "git", "url": "https://github.com/minkphp/Mink.git", - "reference": "e35f4695de8800fc776af34ebf665ad58ebdd996" + "reference": "19e58905632e7cfdc5b2bafb9b950a3521af32c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/Mink/zipball/e35f4695de8800fc776af34ebf665ad58ebdd996", - "reference": "e35f4695de8800fc776af34ebf665ad58ebdd996", + "url": "https://api.github.com/repos/minkphp/Mink/zipball/19e58905632e7cfdc5b2bafb9b950a3521af32c5", + "reference": "19e58905632e7cfdc5b2bafb9b950a3521af32c5", "shasum": "" }, "require": { - "php": ">=5.4", - "symfony/css-selector": "^2.7|^3.0|^4.0|^5.0" + "php": ">=7.2", + "symfony/css-selector": "^4.4 || ^5.0 || ^6.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5 || ^9.5", - "symfony/debug": "^2.7|^3.0|^4.0|^5.0", - "symfony/phpunit-bridge": "^3.4.38 || ^4.4 || ^5.0.5", - "yoast/phpunit-polyfills": "^1.0" + "phpunit/phpunit": "^8.5.22 || ^9.5.11", + "symfony/error-handler": "^4.4 || ^5.0 || ^6.0", + "symfony/phpunit-bridge": "^5.4 || ^6.0" }, "suggest": { - "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)", - "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation", + "behat/mink-browserkit-driver": "fast headless driver for any app without JS emulation", "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)", "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)", "dmore/chrome-mink-driver": "fast and JS-enabled driver for any app (requires chromium or google chrome)" @@ -6186,37 +5877,37 @@ ], "support": { "issues": "https://github.com/minkphp/Mink/issues", - "source": "https://github.com/minkphp/Mink/tree/v1.9.0" + "source": "https://github.com/minkphp/Mink/tree/v1.10.0" }, - "time": "2021-10-11T11:58:47+00:00" + "time": "2022-03-28T14:22:43+00:00" }, { "name": "behat/mink-browserkit-driver", - "version": "v2.0.0", + "version": "v2.1.0", "source": { "type": "git", "url": "https://github.com/minkphp/MinkBrowserKitDriver.git", - "reference": "0d3d9c3b375be6f3d44fd6d1e08ed28c104b3bd4" + "reference": "d2768e6c17b293d86d8fcff54cbb9e6ad938fee1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/0d3d9c3b375be6f3d44fd6d1e08ed28c104b3bd4", - "reference": "0d3d9c3b375be6f3d44fd6d1e08ed28c104b3bd4", + "url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/d2768e6c17b293d86d8fcff54cbb9e6ad938fee1", + "reference": "d2768e6c17b293d86d8fcff54cbb9e6ad938fee1", "shasum": "" }, "require": { "behat/mink": "^1.9.0@dev", "php": ">=7.2", - "symfony/browser-kit": "^4.4 || ^5.0", - "symfony/dom-crawler": "^4.4 || ^5.0" + "symfony/browser-kit": "^4.4 || ^5.0 || ^6.0", + "symfony/dom-crawler": "^4.4 || ^5.0 || ^6.0" }, "require-dev": { "mink/driver-testsuite": "dev-master", "phpunit/phpunit": "^8.5 || ^9.5", - "symfony/error-handler": "^4.4 || ^5.0", - "symfony/http-client": "^4.4 || ^5.0", - "symfony/http-kernel": "^4.4 || ^5.0", - "symfony/mime": "^4.4 || ^5.0", + "symfony/error-handler": "^4.4 || ^5.0 || ^6.0", + "symfony/http-client": "^4.4 || ^5.0 || ^6.0", + "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0", + "symfony/mime": "^4.4 || ^5.0 || ^6.0", "yoast/phpunit-polyfills": "^1.0" }, "type": "mink-driver", @@ -6251,36 +5942,36 @@ ], "support": { "issues": "https://github.com/minkphp/MinkBrowserKitDriver/issues", - "source": "https://github.com/minkphp/MinkBrowserKitDriver/tree/v2.0.0" + "source": "https://github.com/minkphp/MinkBrowserKitDriver/tree/v2.1.0" }, - "time": "2021-12-13T10:31:49+00:00" + "time": "2022-03-28T14:33:51+00:00" }, { "name": "behat/transliterator", - "version": "v1.3.0", + "version": "v1.5.0", "source": { "type": "git", "url": "https://github.com/Behat/Transliterator.git", - "reference": "3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc" + "reference": "baac5873bac3749887d28ab68e2f74db3a4408af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Transliterator/zipball/3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc", - "reference": "3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc", + "url": "https://api.github.com/repos/Behat/Transliterator/zipball/baac5873bac3749887d28ab68e2f74db3a4408af", + "reference": "baac5873bac3749887d28ab68e2f74db3a4408af", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.2" }, "require-dev": { "chuyskywalker/rolling-curl": "^3.1", "php-yaoi/php-yaoi": "^1.0", - "phpunit/phpunit": "^4.8.36|^6.3" + "phpunit/phpunit": "^8.5.25 || ^9.5.19" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.x-dev" } }, "autoload": { @@ -6300,9 +5991,9 @@ ], "support": { "issues": "https://github.com/Behat/Transliterator/issues", - "source": "https://github.com/Behat/Transliterator/tree/v1.3.0" + "source": "https://github.com/Behat/Transliterator/tree/v1.5.0" }, - "time": "2020-01-14T16:39:13+00:00" + "time": "2022-03-30T09:27:43+00:00" }, { "name": "composer/package-versions-deprecated", @@ -6379,30 +6070,30 @@ }, { "name": "composer/pcre", - "version": "1.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560" + "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/67a32d7d6f9f560b726ab25a061b38ff3a80c560", - "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560", + "url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd", + "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { "phpstan/phpstan": "^1.3", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^4.2 || ^5" + "symfony/phpunit-bridge": "^5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -6430,7 +6121,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/1.0.1" + "source": "https://github.com/composer/pcre/tree/3.0.0" }, "funding": [ { @@ -6446,20 +6137,20 @@ "type": "tidelift" } ], - "time": "2022-01-21T20:24:37+00:00" + "time": "2022-02-25T20:21:48+00:00" }, { "name": "composer/semver", - "version": "3.2.9", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "a951f614bd64dcd26137bc9b7b2637ddcfc57649" + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/a951f614bd64dcd26137bc9b7b2637ddcfc57649", - "reference": "a951f614bd64dcd26137bc9b7b2637ddcfc57649", + "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", "shasum": "" }, "require": { @@ -6511,7 +6202,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.2.9" + "source": "https://github.com/composer/semver/tree/3.3.2" }, "funding": [ { @@ -6527,24 +6218,24 @@ "type": "tidelift" } ], - "time": "2022-02-04T13:58:43+00:00" + "time": "2022-04-01T19:23:25+00:00" }, { "name": "composer/xdebug-handler", - "version": "3.0.1", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "12f1b79476638a5615ed00ea6adbb269cec96fd8" + "reference": "ced299686f41dce890debac69273b47ffe98a40c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/12f1b79476638a5615ed00ea6adbb269cec96fd8", - "reference": "12f1b79476638a5615ed00ea6adbb269cec96fd8", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", + "reference": "ced299686f41dce890debac69273b47ffe98a40c", "shasum": "" }, "require": { - "composer/pcre": "^1", + "composer/pcre": "^1 || ^2 || ^3", "php": "^7.2.5 || ^8.0", "psr/log": "^1 || ^2 || ^3" }, @@ -6577,7 +6268,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.1" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" }, "funding": [ { @@ -6593,7 +6284,7 @@ "type": "tidelift" } ], - "time": "2022-01-04T18:29:42+00:00" + "time": "2022-02-25T21:32:43+00:00" }, { "name": "dnoegel/php-xdg-base-dir", @@ -6632,6 +6323,73 @@ }, "time": "2019-12-04T15:06:13+00:00" }, + { + "name": "fakerphp/faker", + "version": "v1.19.0", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/d7f08a622b3346766325488aa32ddc93ccdecc75", + "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "symfony/phpunit-bridge": "^4.4 || ^5.2" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "v1.19-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.19.0" + }, + "time": "2022-02-02T17:38:57+00:00" + }, { "name": "felixfbecker/advanced-json-rpc", "version": "v3.2.1", @@ -6679,16 +6437,16 @@ }, { "name": "felixfbecker/language-server-protocol", - "version": "1.5.1", + "version": "v1.5.2", "source": { "type": "git", "url": "https://github.com/felixfbecker/php-language-server-protocol.git", - "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730" + "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/9d846d1f5cf101deee7a61c8ba7caa0a975cd730", - "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730", + "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842", + "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842", "shasum": "" }, "require": { @@ -6729,9 +6487,9 @@ ], "support": { "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", - "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/1.5.1" + "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2" }, - "time": "2021-02-22T14:02:09+00:00" + "time": "2022-03-02T22:36:06+00:00" }, { "name": "friends-of-behat/mink-extension", @@ -6868,110 +6626,124 @@ "time": "2021-12-24T13:14:59+00:00" }, { - "name": "fzaninotto/faker", - "version": "v1.9.2", + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", "source": { "type": "git", - "url": "https://github.com/fzaninotto/Faker.git", - "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e" + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/848d8125239d7dbf8ab25cb7f054f1a630e68c2e", - "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" }, "require-dev": { - "ext-intl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7", - "squizlabs/php_codesniffer": "^2.9.2" + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "2.1-dev" } }, "autoload": { - "psr-4": { - "Faker\\": "src/Faker/" - } + "classmap": [ + "hamcrest" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" - ], - "authors": [ - { - "name": "François Zaninotto" - } + "BSD-3-Clause" ], - "description": "Faker is a PHP library that generates fake data for you.", + "description": "This is the PHP port of Hamcrest Matchers", "keywords": [ - "data", - "faker", - "fixtures" + "test" ], "support": { - "issues": "https://github.com/fzaninotto/Faker/issues", - "source": "https://github.com/fzaninotto/Faker/tree/v1.9.2" + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" }, - "abandoned": true, - "time": "2020-12-11T09:56:16+00:00" + "time": "2020-07-09T08:09:16+00:00" }, { - "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", + "name": "masterminds/html5", + "version": "2.7.5", "source": { "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "f640ac1bdddff06ea333a920c95bbad8872429ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f640ac1bdddff06ea333a920c95bbad8872429ab", + "reference": "f640ac1bdddff06ea333a920c95bbad8872429ab", "shasum": "" }, "require": { - "php": "^5.3|^7.0|^8.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" + "ext-ctype": "*", + "ext-dom": "*", + "ext-libxml": "*", + "php": ">=5.3.0" }, "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.7-dev" } }, "autoload": { - "classmap": [ - "hamcrest" - ] + "psr-4": { + "Masterminds\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "This is the PHP port of Hamcrest Matchers", + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", "keywords": [ - "test" + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" ], "support": { - "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.7.5" }, - "time": "2020-07-09T08:09:16+00:00" + "time": "2021-07-01T14:25:37+00:00" }, { "name": "mockery/mockery", @@ -7047,25 +6819,29 @@ }, { "name": "myclabs/deep-copy", - "version": "1.10.2", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { @@ -7090,7 +6866,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" }, "funding": [ { @@ -7098,7 +6874,7 @@ "type": "tidelift" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2022-03-03T13:19:32+00:00" }, { "name": "netresearch/jsonmapper", @@ -7153,16 +6929,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.13.2", + "version": "v4.14.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", "shasum": "" }, "require": { @@ -7203,9 +6979,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" }, - "time": "2021-11-30T19:35:32+00:00" + "time": "2022-05-31T20:59:12+00:00" }, { "name": "openlss/lib-array2xml", @@ -7322,16 +7098,16 @@ }, { "name": "phar-io/version", - "version": "3.1.1", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "15a90844ad40f127afd244c0cad228de2a80052a" + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/15a90844ad40f127afd244c0cad228de2a80052a", - "reference": "15a90844ad40f127afd244c0cad228de2a80052a", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { @@ -7367,9 +7143,9 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.1.1" + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "time": "2022-02-07T21:56:48+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -7483,16 +7259,16 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.0", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" + "reference": "77a32518733312af16a44300404e945338981de3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", + "reference": "77a32518733312af16a44300404e945338981de3", "shasum": "" }, "require": { @@ -7527,9 +7303,9 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" }, - "time": "2022-01-04T19:58:01+00:00" + "time": "2022-03-15T21:29:03+00:00" }, { "name": "phpspec/prophecy", @@ -7600,16 +7376,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.10", + "version": "9.2.15", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687" + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d5850aaf931743067f4bfc1ae4cbd06468400687", - "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", "shasum": "" }, "require": { @@ -7665,7 +7441,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.10" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" }, "funding": [ { @@ -7673,7 +7449,7 @@ "type": "github" } ], - "time": "2021-12-05T09:12:13+00:00" + "time": "2022-03-07T09:28:20+00:00" }, { "name": "phpunit/php-file-iterator", @@ -7918,16 +7694,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.13", + "version": "9.5.20", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "597cb647654ede35e43b137926dfdfef0fb11743" + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/597cb647654ede35e43b137926dfdfef0fb11743", - "reference": "597cb647654ede35e43b137926dfdfef0fb11743", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", "shasum": "" }, "require": { @@ -7943,7 +7719,7 @@ "phar-io/version": "^3.0.2", "php": ">=7.3", "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.7", + "phpunit/php-code-coverage": "^9.2.13", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", @@ -7957,7 +7733,7 @@ "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3.4", + "sebastian/type": "^3.0", "sebastian/version": "^3.0.2" }, "require-dev": { @@ -8005,7 +7781,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.13" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" }, "funding": [ { @@ -8017,7 +7793,7 @@ "type": "github" } ], - "time": "2022-01-24T07:33:35+00:00" + "time": "2022-04-01T12:37:26+00:00" }, { "name": "roave/security-advisories", @@ -8025,43 +7801,50 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "a74c203357d9b250a4019bc18e9a23a050e16bef" + "reference": "bf362097fbfe4580b99b696dd8208b24ffd112b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/a74c203357d9b250a4019bc18e9a23a050e16bef", - "reference": "a74c203357d9b250a4019bc18e9a23a050e16bef", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/bf362097fbfe4580b99b696dd8208b24ffd112b2", + "reference": "bf362097fbfe4580b99b696dd8208b24ffd112b2", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", + "admidio/admidio": "<4.1.9", "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", "akaunting/akaunting": "<2.1.13", + "alextselegidis/easyappointments": "<=1.4.3", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", "amphp/artax": "<1.0.6|>=2,<2.0.6", "amphp/http": "<1.0.1", "amphp/http-client": ">=4,<4.4", "anchorcms/anchor-cms": "<=0.12.7", + "andreapollastri/cipi": "<=3.1.15", "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6", + "appwrite/server-ce": "<0.11.1|>=0.12,<0.12.2", "area17/twill": "<1.2.5|>=2,<2.5.3", "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99", "aws/aws-sdk-php": ">=3,<3.2.1", "bagisto/bagisto": "<0.1.5", "barrelstrength/sprout-base-email": "<1.2.7", "barrelstrength/sprout-forms": "<3.9", + "barryvdh/laravel-translation-manager": "<0.6.2", "baserproject/basercms": "<4.5.4", "billz/raspap-webgui": "<=2.6.6", "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3", + "bmarshall511/wordpress_zero_spam": "<5.2.13", "bolt/bolt": "<3.7.2", - "bolt/core": "<4.1.13", + "bolt/core": "<=4.2", "bottelet/flarepoint": "<2.2.1", "brightlocal/phpwhois": "<=4.2.5", + "brotkrueml/codehighlight": "<2.7", "buddypress/buddypress": "<7.2.1", "bugsnag/bugsnag-laravel": ">=2,<2.0.2", "bytefury/crater": "<6.0.2", "cachethq/cachet": "<2.5.1", - "cakephp/cakephp": "<4.0.6", + "cakephp/cakephp": "<3.10.3|>=4,<4.0.6", "cardgate/magento2": "<2.0.33", "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", "cartalyst/sentry": "<=2.1.6", @@ -8070,17 +7853,22 @@ "cesnet/simplesamlphp-module-proxystatistics": "<3.1", "codeception/codeception": "<3.1.3|>=4,<4.1.22", "codeigniter/framework": "<=3.0.6", - "codeigniter4/framework": "<4.1.8", + "codeigniter4/framework": "<4.1.9", "codiad/codiad": "<=2.8.4", - "composer/composer": "<1.10.23|>=2-alpha.1,<2.1.9", - "concrete5/concrete5": "<8.5.5", + "composer/composer": "<1.10.26|>=2-alpha.1,<2.2.12|>=2.3,<2.3.5", + "concrete5/concrete5": "<9", "concrete5/core": "<8.5.7", "contao-components/mediaelement": ">=2.14.2,<2.21.1", + "contao/contao": ">=4,<4.4.56|>=4.5,<4.9.18|>=4.10,<4.11.7|>=4.13,<4.13.3", "contao/core": ">=2,<3.5.39", - "contao/core-bundle": "<4.9.18|>=4.10,<4.11.7|= 4.10.0", + "contao/core-bundle": "<4.9.18|>=4.10,<4.11.7|>=4.13,<4.13.3|= 4.10.0", "contao/listing-bundle": ">=4,<4.4.8", - "craftcms/cms": "<3.7.14", + "contao/managed-edition": "<=1.5", + "craftcms/cms": "<3.7.36", "croogo/croogo": "<3.0.7", + "cuyz/valinor": ">=0.5,<0.7", + "czproject/git-php": "<4.0.3", + "darylldoyle/safe-svg": "<1.9.10", "datadog/dd-trace": ">=0.30,<0.30.2", "david-garcia/phpwhois": "<=4.3.1", "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1", @@ -8094,15 +7882,16 @@ "doctrine/mongodb-odm": ">=1,<1.0.2", "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", - "dolibarr/dolibarr": "<=14.0.5|>= 3.3.beta1, < 13.0.2", - "dompdf/dompdf": ">=0.6,<0.6.2", - "drupal/core": ">=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", + "dolibarr/dolibarr": "= 12.0.5|<16|>= 3.3.beta1, < 13.0.2", + "dompdf/dompdf": "<1.2.1", + "drupal/core": ">=7,<7.88|>=8,<9.2.13|>=9.3,<9.3.6", "drupal/drupal": ">=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", "dweeves/magmi": "<=0.7.24", "ecodev/newsletter": "<=4", + "ectouch/ectouch": "<=2.7.2", "elgg/elgg": "<3.3.24|>=4,<4.0.5", "endroid/qr-code-bundle": "<3.4.2", - "enshrined/svg-sanitize": "<0.13.1", + "enshrined/svg-sanitize": "<0.15", "erusev/parsedown": "<1.7.2", "ether/logs": "<3.0.4", "ezsystems/demobundle": ">=5.4,<5.4.6.1", @@ -8110,37 +7899,43 @@ "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1", "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1|>=5.4,<5.4.11.1|>=2017.12,<2017.12.0.1", "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24", - "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<=1.5.25", + "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.27", "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", - "ezsystems/ezplatform-kernel": "<=1.2.5|>=1.3,<=1.3.1", + "ezsystems/ezplatform-kernel": "<=1.2.5|>=1.3,<1.3.19", "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", "ezsystems/ezplatform-richtext": ">=2.3,<=2.3.7", "ezsystems/ezplatform-user": ">=1,<1.0.1", - "ezsystems/ezpublish-kernel": "<=6.13.8.1|>=7,<7.5.26", + "ezsystems/ezpublish-kernel": "<=6.13.8.1|>=7,<7.5.29", "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.3.5.1", "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", "ezsystems/repository-forms": ">=2.3,<2.3.2.1", "ezyang/htmlpurifier": "<4.1.1", "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", + "facturascripts/facturascripts": "<=2022.8", "feehi/cms": "<=2.1.1", "feehi/feehicms": "<=0.1.3", + "fenom/fenom": "<=2.12.1", + "filegator/filegator": "<7.8", "firebase/php-jwt": "<2", "flarum/core": ">=1,<=1.0.1", "flarum/sticky": ">=0.1-beta.14,<=0.1-beta.15", "flarum/tags": "<=0.1-beta.13", "fluidtypo3/vhs": "<5.1.1", + "fof/upload": "<1.2.3", "fooman/tcpdf": "<6.2.22", - "forkcms/forkcms": "<=5.9.2", + "forkcms/forkcms": "<5.11.1", "fossar/tcpdf-parser": "<6.2.22", - "francoisjacquet/rosariosis": "<8.1.1", + "francoisjacquet/rosariosis": "<9", "friendsofsymfony/oauth2-php": "<1.3", "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", "froala/wysiwyg-editor": "<3.2.7", + "froxlor/froxlor": "<=0.10.22", "fuel/core": "<1.8.1", "gaoming13/wechat-php-sdk": "<=1.10.2", - "getgrav/grav": "<1.7.28", + "genix/cms": "<=1.1.11", + "getgrav/grav": "<1.7.33", "getkirby/cms": "<3.5.8", "getkirby/panel": "<2.5.14", "gilacms/gila": "<=1.11.4", @@ -8150,11 +7945,14 @@ "gree/jose": "<=2.2", "gregwar/rst": "<1.0.3", "grumpydictator/firefly-iii": "<5.6.5", - "guzzlehttp/guzzle": ">=4-rc.2,<4.2.4|>=5,<5.3.1|>=6,<6.2.1", - "helloxz/imgurl": "<=2.31", + "guzzlehttp/guzzle": "<6.5.7|>=7,<7.4.4", + "guzzlehttp/psr7": "<1.8.4|>=2,<2.1.1", + "helloxz/imgurl": "= 2.31|<=2.31", "hillelcoren/invoice-ninja": "<5.3.35", "hjue/justwriting": "<=1", "hov/jobfair": "<1.0.13|>=2,<2.0.2", + "hyn/multi-tenant": ">=5.6,<5.7.2", + "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4", "ibexa/post-install": "<=1.0.4", "icecoder/icecoder": "<=8.1", "illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10", @@ -8162,13 +7960,16 @@ "illuminate/database": "<6.20.26|>=7,<7.30.5|>=8,<8.40", "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", - "impresscms/impresscms": "<=1.4.2", + "impresscms/impresscms": "<=1.4.3", "in2code/femanager": "<5.5.1|>=6,<6.3.1", "intelliants/subrion": "<=4.2.1", "ivankristianto/phpwhois": "<=4.3", "jackalope/jackalope-doctrine-dbal": "<1.7.4", "james-heinrich/getid3": "<1.9.21", - "joomla/archive": "<1.1.10", + "joomla/archive": "<1.1.12|>=2,<2.0.1", + "joomla/filesystem": "<1.6.2|>=2,<2.0.1", + "joomla/filter": "<1.4.4|>=2,<2.0.1", + "joomla/input": ">=2,<2.0.2", "joomla/session": "<1.3.1", "jsdecena/laracom": "<2.0.9", "jsmitty12/phpwhois": "<5.1", @@ -8180,7 +7981,9 @@ "la-haute-societe/tcpdf": "<6.2.22", "laminas/laminas-form": "<2.17.1|>=3,<3.0.2|>=3.1,<3.1.1", "laminas/laminas-http": "<2.14.2", + "laravel/fortify": "<1.11.1", "laravel/framework": "<6.20.42|>=7,<7.30.6|>=8,<8.75", + "laravel/laravel": "<=9.1.8", "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", "latte/latte": "<2.10.8", "lavalite/cms": "<=5.8", @@ -8188,46 +7991,52 @@ "league/commonmark": "<0.18.3", "league/flysystem": "<1.1.4|>=2,<2.1.1", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", - "librenms/librenms": "<=21.11", + "librenms/librenms": "<22.4", "limesurvey/limesurvey": "<3.27.19", "livehelperchat/livehelperchat": "<=3.91", "livewire/livewire": ">2.2.4,<2.2.6", "lms/routes": "<2.1.1", "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", + "luyadev/yii-helpers": "<1.2.1", "magento/community-edition": ">=2,<2.2.10|>=2.3,<2.3.3", "magento/magento1ce": "<1.9.4.3", "magento/magento1ee": ">=1,<1.14.4.3", "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2-p.2", "marcwillmann/turn": "<0.3.3", - "mautic/core": "<4|= 2.13.1", + "matyhtf/framework": "<3.0.6", + "mautic/core": "<4.3|= 2.13.1", "mediawiki/core": ">=1.27,<1.27.6|>=1.29,<1.29.3|>=1.30,<1.30.2|>=1.31,<1.31.9|>=1.32,<1.32.6|>=1.32.99,<1.33.3|>=1.33.99,<1.34.3|>=1.34.99,<1.35", - "microweber/microweber": "<1.2.11", + "microweber/microweber": "<1.3", "miniorange/miniorange-saml": "<1.4.3", "mittwald/typo3_forum": "<1.2.1", - "modx/revolution": "<2.8", + "modx/revolution": "<= 2.8.3-pl|<2.8", + "mojo42/jirafeau": "<4.4", "monolog/monolog": ">=1.8,<1.12", - "moodle/moodle": "<3.9.11|>=3.10-beta,<3.10.8|>=3.11,<3.11.5", + "moodle/moodle": "<4.0.1", "mustache/mustache": ">=2,<2.14.1", "namshi/jose": "<2.2", "neoan3-apps/template": "<1.1.1", + "neorazorx/facturascripts": "<2022.4", "neos/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", "neos/form": ">=1.2,<4.3.3|>=5,<5.0.9|>=5.1,<5.1.3", - "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.9.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", + "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.9.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2", "neos/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", "netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15", "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", "nilsteampassnet/teampass": "<=2.1.27.36", + "noumo/easyii": "<=0.9", "nukeviet/nukeviet": "<4.3.4", - "nystudio107/craft-seomatic": "<3.3", + "nystudio107/craft-seomatic": "<3.4.12", "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", "october/backend": "<1.1.2", "october/cms": "= 1.1.1|= 1.0.471|= 1.0.469|>=1.0.319,<1.0.469", "october/october": ">=1.0.319,<1.0.466|>=2.1,<2.1.12", "october/rain": "<1.0.472|>=1.1,<1.1.2", - "october/system": "<1.0.473|>=1.1,<1.1.6|>=2.1,<2.1.12", + "october/system": "<1.0.475|>=1.1,<1.1.11|>=2,<2.1.27", "onelogin/php-saml": "<2.10.4", "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", + "open-web-analytics/open-web-analytics": "<1.7.4", "opencart/opencart": "<=3.0.3.2", "openid/php-openid": "<2.3", "openmage/magento-lts": "<19.4.15|>=20,<20.0.13", @@ -8241,22 +8050,25 @@ "passbolt/passbolt_api": "<2.11", "paypal/merchant-sdk-php": "<3.12", "pear/archive_tar": "<1.4.14", + "pear/crypt_gpg": "<1.6.7", "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", "personnummer/personnummer": "<3.0.2", "phanan/koel": "<5.1.4", "phpfastcache/phpfastcache": "<6.1.5|>=7,<7.1.2|>=8,<8.0.7", "phpmailer/phpmailer": "<6.5", "phpmussel/phpmussel": ">=1,<1.6", - "phpmyadmin/phpmyadmin": "<4.9.8|>=5,<5.0.3|>=5.1,<5.1.2", - "phpoffice/phpexcel": "<1.8.2", + "phpmyadmin/phpmyadmin": "<5.1.3", + "phpoffice/phpexcel": "<1.8", "phpoffice/phpspreadsheet": "<1.16", "phpseclib/phpseclib": "<2.0.31|>=3,<3.0.7", "phpservermon/phpservermon": "<=3.5.2", - "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3", + "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5,<5.6.3", "phpwhois/phpwhois": "<=4.2.5", "phpxmlrpc/extras": "<0.6.1", - "pimcore/pimcore": "<=10.3", - "pocketmine/pocketmine-mp": "<4.0.7", + "pimcore/data-hub": "<1.2.4", + "pimcore/pimcore": "<10.4", + "pocketmine/bedrock-protocol": "<8.0.2", + "pocketmine/pocketmine-mp": ">= 4.0.0-BETA5, < 4.4.2|<4.2.10", "pressbooks/pressbooks": "<5.18", "prestashop/autoupgrade": ">=4,<4.10.1", "prestashop/contactform": ">1.0.1,<4.3", @@ -8266,7 +8078,7 @@ "prestashop/ps_emailsubscription": "<2.6.1", "prestashop/ps_facetedsearch": "<3.4.1", "prestashop/ps_linklist": "<3.1", - "privatebin/privatebin": "<1.2.2|>=1.3,<1.3.2", + "privatebin/privatebin": "<1.4", "propel/propel": ">=2-alpha.1,<=2-alpha.7", "propel/propel1": ">=1,<=1.7.1", "pterodactyl/panel": "<1.7", @@ -8274,28 +8086,34 @@ "pusher/pusher-php-server": "<2.2.1", "pwweb/laravel-core": "<=0.3.6-beta", "rainlab/debugbar-plugin": "<3.1", - "remdex/livehelperchat": "<3.93", + "remdex/livehelperchat": "<3.99", "rmccue/requests": ">=1.6,<1.8", "robrichards/xmlseclibs": "<3.0.4", + "rudloff/alltube": "<3.0.3", + "s-cart/core": "<6.9", + "s-cart/s-cart": "<6.9", "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9", "scheb/two-factor-bundle": ">=0,<3.26|>=4,<4.11", "sensiolabs/connect": "<4.2.3", "serluck/phpwhois": "<=4.2.6", - "shopware/core": "<=6.4.6", - "shopware/platform": "<=6.4.6", + "shopware/core": "<=6.4.9", + "shopware/platform": "<=6.4.9", "shopware/production": "<=6.3.5.2", - "shopware/shopware": "<5.7.7", - "showdoc/showdoc": "<=2.10.2", + "shopware/shopware": "<5.7.9", + "shopware/storefront": "<=6.4.8.1", + "shopxo/shopxo": "<2.2.6", + "showdoc/showdoc": "<2.10.4", "silverstripe/admin": ">=1,<1.8.1", "silverstripe/assets": ">=1,<1.4.7|>=1.5,<1.5.2", "silverstripe/cms": "<4.3.6|>=4.4,<4.4.4", "silverstripe/comments": ">=1.3,<1.9.99|>=2,<2.9.99|>=3,<3.1.1", "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", "silverstripe/framework": "<4.10.1", - "silverstripe/graphql": "<3.5.2|>=4-alpha.1,<4-alpha.2", + "silverstripe/graphql": "<3.5.2|>=4-alpha.1,<4-alpha.2|= 4.0.0-alpha1", "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4", + "silverstripe/silverstripe-omnipay": "<2.5.2|>=3,<3.0.2|>=3.1,<3.1.4|>=3.2,<3.2.1", "silverstripe/subsites": ">=2,<2.1.1", "silverstripe/taxonomy": ">=1.3,<1.3.1|>=2,<2.0.1", "silverstripe/userforms": "<3", @@ -8305,14 +8123,15 @@ "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", "simplito/elliptic-php": "<1.0.6", "slim/slim": "<2.6", - "smarty/smarty": "<3.1.43|>=4,<4.0.3", - "snipe/snipe-it": "<=5.3.7", + "smarty/smarty": "<3.1.45|>=4,<4.1.1", + "snipe/snipe-it": "<5.4.4|>= 6.0.0-RC-1, <= 6.0.0-RC-5", "socalnick/scn-social-auth": "<1.15.2", "socialiteproviders/steam": "<1.1", "spipu/html2pdf": "<5.2.4", "spoonity/tcpdf": "<6.2.22", "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", - "ssddanbrown/bookstack": "<21.12.1", + "ssddanbrown/bookstack": "<22.2.3", + "statamic/cms": "<3.2.39|>=3.3,<3.3.2", "stormpath/sdk": ">=0,<9.9.99", "studio-42/elfinder": "<2.1.59", "subrion/cms": "<=4.2.1", @@ -8320,10 +8139,10 @@ "swiftmailer/swiftmailer": ">=4,<5.4.5", "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", - "sylius/grid-bundle": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", + "sylius/grid-bundle": "<1.10.1", "sylius/paypal-plugin": ">=1,<1.2.4|>=1.3,<1.3.1", "sylius/resource-bundle": "<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", - "sylius/sylius": "<1.6.9|>=1.7,<1.7.9|>=1.8,<1.8.3|>=1.9,<1.9.5", + "sylius/sylius": "<1.9.10|>=1.10,<1.10.11|>=1.11,<1.11.2", "symbiote/silverstripe-multivaluefield": ">=3,<3.0.99", "symbiote/silverstripe-queuedjobs": ">=3,<3.0.2|>=3.1,<3.1.4|>=4,<4.0.7|>=4.1,<4.1.2|>=4.2,<4.2.4|>=4.3,<4.3.3|>=4.4,<4.4.3|>=4.5,<4.5.1|>=4.6,<4.6.4", "symbiote/silverstripe-versionedfiles": "<=2.0.3", @@ -8348,7 +8167,7 @@ "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9", "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", - "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8|>=5.3,<5.3.2", + "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2", "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", "symfony/symfony": ">=2,<3.4.49|>=4,<4.4.35|>=5,<5.3.12|>=5.3.14,<=5.3.14|>=5.4.3,<=5.4.3|>=6.0.3,<=6.0.3", "symfony/translation": ">=2,<2.0.17", @@ -8358,6 +8177,7 @@ "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", "t3/dce": ">=2.2,<2.6.2", "t3g/svg-sanitizer": "<1.0.3", + "tastyigniter/tastyigniter": "<3.3", "tecnickcom/tcpdf": "<6.2.22", "terminal42/contao-tablelookupwizard": "<3.3.5", "thelia/backoffice-default-template": ">=2.1,<2.1.2", @@ -8365,12 +8185,12 @@ "theonedemon/phpwhois": "<=4.2.5", "tinymce/tinymce": "<5.10", "titon/framework": ">=0,<9.9.99", - "topthink/framework": "<6.0.9", + "topthink/framework": "<6.0.12", "topthink/think": "<=6.0.9", "topthink/thinkphp": "<=3.2.3", - "tribalsystems/zenario": "<8.8.53370", + "tribalsystems/zenario": "<9.2.55826", "truckersmp/phpwhois": "<=4.3.1", - "twig/twig": "<1.38|>=2,<2.14.11|>3,<3.3.8", + "twig/twig": "<1.38|>=2,<2.14.11|>=3,<3.3.8", "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.38|>=9,<9.5.29|>=10,<10.4.19|>=11,<11.5", "typo3/cms-backend": ">=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", "typo3/cms-core": ">=6.2,<=6.2.56|>=7,<=7.6.52|>=8,<=8.7.41|>=9,<9.5.29|>=10,<10.4.19|>=11,<11.5", @@ -8386,7 +8206,7 @@ "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", "vanilla/safecurl": "<0.9.2", "verot/class.upload.php": "<=1.0.3|>=2,<=2.0.4", - "vrana/adminer": "<4.7.9", + "vrana/adminer": "<4.8.1", "wallabag/tcpdf": "<6.2.22", "wanglelecc/laracms": "<=1.0.3", "web-auth/webauthn-framework": ">=3.3,<3.3.4", @@ -8394,7 +8214,11 @@ "wikimedia/parsoid": "<0.12.2", "willdurand/js-translation-bundle": "<2.1.1", "wp-cli/wp-cli": "<2.5", - "yetiforce/yetiforce-crm": "<=6.3", + "wp-graphql/wp-graphql": "<0.3.5", + "wpanel/wpanel4-cms": "<=4.3.1", + "wwbn/avideo": "<=11.6", + "yeswiki/yeswiki": "<4.1", + "yetiforce/yetiforce-crm": "<6.4", "yidashi/yii2cmf": "<=2", "yii2mod/yii2-cms": "<1.9.2", "yiisoft/yii": ">=1.1.14,<1.1.15", @@ -8413,10 +8237,10 @@ "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2", "zendframework/zend-db": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.10|>=2.3,<2.3.5", "zendframework/zend-developer-tools": ">=1.2.2,<1.2.3", - "zendframework/zend-diactoros": ">=1,<1.8.4", - "zendframework/zend-feed": ">=1,<2.10.3", + "zendframework/zend-diactoros": "<1.8.4", + "zendframework/zend-feed": "<2.10.3", "zendframework/zend-form": ">=2,<2.2.7|>=2.3,<2.3.1", - "zendframework/zend-http": ">=1,<2.8.1", + "zendframework/zend-http": "<2.8.1", "zendframework/zend-json": ">=2.1,<2.1.6|>=2.2,<2.2.6", "zendframework/zend-ldap": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.8|>=2.3,<2.3.3", "zendframework/zend-mail": ">=2,<2.4.11|>=2.5,<2.7.2", @@ -8467,7 +8291,7 @@ "type": "tidelift" } ], - "time": "2022-02-11T21:12:37+00:00" + "time": "2022-06-10T00:15:15+00:00" }, { "name": "sebastian/cli-parser", @@ -8835,16 +8659,16 @@ }, { "name": "sebastian/environment", - "version": "5.1.3", + "version": "5.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", "shasum": "" }, "require": { @@ -8886,7 +8710,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" }, "funding": [ { @@ -8894,7 +8718,7 @@ "type": "github" } ], - "time": "2020-09-28T05:52:38+00:00" + "time": "2022-04-03T09:37:03+00:00" }, { "name": "sebastian/exporter", @@ -9326,28 +9150,28 @@ }, { "name": "sebastian/type", - "version": "2.3.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -9370,7 +9194,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" + "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" }, "funding": [ { @@ -9378,7 +9202,7 @@ "type": "github" } ], - "time": "2021-06-15T12:49:02+00:00" + "time": "2022-03-15T09:54:48+00:00" }, { "name": "sebastian/version", @@ -9435,28 +9259,27 @@ }, { "name": "symfony/browser-kit", - "version": "v5.4.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "18e73179c6a33d520de1b644941eba108dd811ad" + "reference": "b839cef6e6526bd2090efe92c218d8c7479a51e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/18e73179c6a33d520de1b644941eba108dd811ad", - "reference": "18e73179c6a33d520de1b644941eba108dd811ad", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/b839cef6e6526bd2090efe92c218d8c7479a51e0", + "reference": "b839cef6e6526bd2090efe92c218d8c7479a51e0", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/dom-crawler": "^4.4|^5.0|^6.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/dom-crawler": "^5.4|^6.0" }, "require-dev": { - "symfony/css-selector": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0" + "symfony/css-selector": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/mime": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0" }, "suggest": { "symfony/process": "" @@ -9487,7 +9310,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v5.4.3" + "source": "https://github.com/symfony/browser-kit/tree/v6.1.0" }, "funding": [ { @@ -9503,25 +9326,24 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-05-06T20:04:05+00:00" }, { "name": "symfony/css-selector", - "version": "v5.4.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "b0a190285cd95cb019237851205b8140ef6e368e" + "reference": "05c40f02f621609404b8820ff8bc39acb46e19cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/b0a190285cd95cb019237851205b8140ef6e368e", - "reference": "b0a190285cd95cb019237851205b8140ef6e368e", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/05c40f02f621609404b8820ff8bc39acb46e19cf", + "reference": "05c40f02f621609404b8820ff8bc39acb46e19cf", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -9553,75 +9375,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.4.3" - }, - "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": "2022-01-02T09:53:40+00:00" - }, - { - "name": "symfony/debug", - "version": "v4.4.37", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "5de6c6e7f52b364840e53851c126be4d71e60470" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/5de6c6e7f52b364840e53851c126be4d71e60470", - "reference": "5de6c6e7f52b364840e53851c126be4d71e60470", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "psr/log": "^1|^2|^3" - }, - "conflict": { - "symfony/http-kernel": "<3.4" - }, - "require-dev": { - "symfony/http-kernel": "^3.4|^4.0|^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "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 ease debugging PHP code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/debug/tree/v4.4.37" + "source": "https://github.com/symfony/css-selector/tree/v6.1.0" }, "funding": [ { @@ -9637,35 +9391,30 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:41:36+00:00" + "time": "2022-02-25T11:15:52+00:00" }, { "name": "symfony/dom-crawler", - "version": "v5.4.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "2634381fdf27a2a0a8ac8eb404025eb656c65d0c" + "reference": "baacc99edd169bd8e06723f4c38150ef97feca0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/2634381fdf27a2a0a8ac8eb404025eb656c65d0c", - "reference": "2634381fdf27a2a0a8ac8eb404025eb656c65d0c", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/baacc99edd169bd8e06723f4c38150ef97feca0f", + "reference": "baacc99edd169bd8e06723f4c38150ef97feca0f", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "masterminds/html5": "^2.6", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "masterminds/html5": "<2.6" + "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "masterminds/html5": "^2.6", - "symfony/css-selector": "^4.4|^5.0|^6.0" + "symfony/css-selector": "^5.4|^6.0" }, "suggest": { "symfony/css-selector": "" @@ -9696,7 +9445,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v5.4.3" + "source": "https://github.com/symfony/dom-crawler/tree/v6.1.0" }, "funding": [ { @@ -9712,33 +9461,29 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-05-04T14:48:14+00:00" }, { "name": "symfony/proxy-manager-bridge", - "version": "v4.4.18", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/proxy-manager-bridge.git", - "reference": "373d72703ef24b6a22c8592f53c7f0e333d9f038" + "reference": "bcb3e7a28ee373bd64ecd2a2289a64c5860716af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/373d72703ef24b6a22c8592f53c7f0e333d9f038", - "reference": "373d72703ef24b6a22c8592f53c7f0e333d9f038", + "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/bcb3e7a28ee373bd64ecd2a2289a64c5860716af", + "reference": "bcb3e7a28ee373bd64ecd2a2289a64c5860716af", "shasum": "" }, "require": { - "composer/package-versions-deprecated": "^1.8", - "ocramius/proxy-manager": "~2.1", - "php": ">=7.1.3", - "symfony/dependency-injection": "^4.0|^5.0" - }, - "conflict": { - "zendframework/zend-eventmanager": "2.6.0" + "friendsofphp/proxy-manager-lts": "^1.0.2", + "php": ">=8.1", + "symfony/dependency-injection": "^5.4|^6.0" }, "require-dev": { - "symfony/config": "^3.4|^4.0|^5.0" + "symfony/config": "^5.4|^6.0" }, "type": "symfony-bridge", "autoload": { @@ -9763,10 +9508,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony ProxyManager Bridge", + "description": "Provides integration for ProxyManager with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/proxy-manager-bridge/tree/v4.4.18" + "source": "https://github.com/symfony/proxy-manager-bridge/tree/v6.1.0" }, "funding": [ { @@ -9782,24 +9527,24 @@ "type": "tidelift" } ], - "time": "2020-11-12T13:19:35+00:00" + "time": "2022-03-02T13:21:45+00:00" }, { "name": "symfony/translation", - "version": "v6.0.3", + "version": "v6.1.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "71bb15335798f8c4da110911bcf2d2fead7a430d" + "reference": "b254416631615bc6fe49b0a67f18658827288147" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/71bb15335798f8c4da110911bcf2d2fead7a430d", - "reference": "71bb15335798f8c4da110911bcf2d2fead7a430d", + "url": "https://api.github.com/repos/symfony/translation/zipball/b254416631615bc6fe49b0a67f18658827288147", + "reference": "b254416631615bc6fe49b0a67f18658827288147", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.3|^3.0" }, @@ -9824,6 +9569,7 @@ "symfony/http-kernel": "^5.4|^6.0", "symfony/intl": "^5.4|^6.0", "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^5.4|^6.0", "symfony/service-contracts": "^1.1.2|^2|^3", "symfony/yaml": "^5.4|^6.0" }, @@ -9861,7 +9607,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.0.3" + "source": "https://github.com/symfony/translation/tree/v6.1.0" }, "funding": [ { @@ -9877,7 +9623,7 @@ "type": "tidelift" } ], - "time": "2022-01-07T00:29:03+00:00" + "time": "2022-05-11T12:12:29+00:00" }, { "name": "theseer/tokenizer", @@ -9931,16 +9677,16 @@ }, { "name": "vimeo/psalm", - "version": "4.20.0", + "version": "4.23.0", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "f82a70e7edfc6cf2705e9374c8a0b6a974a779ed" + "reference": "f1fe6ff483bf325c803df9f510d09a03fd796f88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/f82a70e7edfc6cf2705e9374c8a0b6a974a779ed", - "reference": "f82a70e7edfc6cf2705e9374c8a0b6a974a779ed", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/f1fe6ff483bf325c803df9f510d09a03fd796f88", + "reference": "f1fe6ff483bf325c803df9f510d09a03fd796f88", "shasum": "" }, "require": { @@ -9965,6 +9711,7 @@ "php": "^7.1|^8", "sebastian/diff": "^3.0 || ^4.0", "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0 || ^6.0", + "symfony/polyfill-php80": "^1.25", "webmozart/path-util": "^2.3" }, "provide": { @@ -10031,27 +9778,27 @@ ], "support": { "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm/tree/4.20.0" + "source": "https://github.com/vimeo/psalm/tree/4.23.0" }, - "time": "2022-02-03T17:03:47+00:00" + "time": "2022-04-28T17:35:49+00:00" }, { "name": "webmozart/assert", - "version": "1.10.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" }, "conflict": { "phpstan/phpstan": "<0.12.20", @@ -10089,9 +9836,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" + "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, - "time": "2021-03-09T10:59:23+00:00" + "time": "2022-06-03T18:03:27+00:00" }, { "name": "webmozart/path-util", @@ -10163,5 +9910,5 @@ "platform-dev": { "ext-xdebug": "*" }, - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.3.0" } diff --git a/docker-compose.yml b/docker-compose.yml index 69e1555b2..d720f5b1e 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,19 +2,19 @@ version: '3' services: shared_rabbitmq: - container_name: codelytv-php_ddd_skeleton-rabbitmq - image: 'rabbitmq:3.7-management' + container_name: codely-php_ddd_skeleton-rabbitmq + image: 'rabbitmq:3.10.5-management' restart: unless-stopped ports: - - 5630:5672 - - 8090:15672 + - "5630:5672" + - "8090:15672" environment: - - RABBITMQ_DEFAULT_USER=codelytv + - RABBITMQ_DEFAULT_USER=codely - RABBITMQ_DEFAULT_PASS=c0d3ly shared_prometheus: - container_name: codelytv-php_ddd_skeleton-prometheus - image: prom/prometheus:v2.1.0 + container_name: codely-php_ddd_skeleton-prometheus + image: prom/prometheus:v2.36.1 volumes: - ./etc/prometheus/:/etc/prometheus/ command: @@ -23,13 +23,13 @@ services: - '--web.console.libraries=/usr/share/prometheus/console_libraries' - '--web.console.templates=/usr/share/prometheus/consoles' ports: - - 9999:9090 + - "9999:9090" mooc_mysql: - container_name: codelytv-php_ddd_skeleton-mooc-mysql - image: mariadb:10.6 + container_name: codely-php_ddd_skeleton-mooc-mysql + image: mariadb:10.7.4 ports: - - 3360:3306 + - "3360:3306" environment: - MYSQL_ROOT_PASSWORD= - MYSQL_ALLOW_EMPTY_PASSWORD=yes @@ -41,18 +41,18 @@ services: command: ["--default-authentication-plugin=mysql_native_password"] backoffice_elasticsearch: - container_name: codelytv-php_ddd_skeleton-backoffice-elastic - image: docker.elastic.co/elasticsearch/elasticsearch:6.8.10 + container_name: codely-php_ddd_skeleton-backoffice-elastic + image: docker.elastic.co/elasticsearch/elasticsearch:8.2.3 ports: - - 9200:9200 - - 9300:9300 + - "9200:9200" + - "9300:9300" environment: - discovery.type=single-node - xpack.security.enabled=false - "ES_JAVA_OPTS=-Xms512m -Xmx512m" backoffice_backend_php: - container_name: codelytv-php_ddd_skeleton-backoffice_backend-php + container_name: codely-php_ddd_skeleton-backoffice_backend-php user: "${UID}:${GID}" build: context: . @@ -70,7 +70,7 @@ services: command: symfony serve --dir=apps/backoffice/backend/public --port=8040 --force-php-discovery backoffice_frontend_php: - container_name: codelytv-php_ddd_skeleton-backoffice_frontend-php + container_name: codely-php_ddd_skeleton-backoffice_frontend-php user: "${UID}:${GID}" build: context: . @@ -89,7 +89,7 @@ services: command: symfony serve --dir=apps/backoffice/frontend/public --port=8041 --force-php-discovery mooc_backend_php: - container_name: codelytv-php_ddd_skeleton-mooc_backend-php + container_name: codely-php_ddd_skeleton-mooc_backend-php user: "${UID}:${GID}" build: context: . diff --git a/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php b/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php index 52ec54166..498fc2bcb 100644 --- a/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php +++ b/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php @@ -6,14 +6,13 @@ use CodelyTv\Shared\Infrastructure\Doctrine\Dbal\DbalCustomTypesRegistrar; use Doctrine\DBAL\DriverManager; -use Doctrine\DBAL\Schema\MySqlSchemaManager; +use Doctrine\DBAL\Schema\MySQLSchemaManager; use Doctrine\ORM\Configuration; +use Doctrine\DBAL\Platforms\MariaDBPlatform; use Doctrine\ORM\EntityManager; use Doctrine\ORM\Mapping\Driver\SimplifiedXmlDriver; -use Doctrine\ORM\Tools\Setup; +use Doctrine\ORM\ORMSetup; use RuntimeException; -use Symfony\Component\Cache\Adapter\ArrayAdapter; -use Symfony\Component\Cache\DoctrineProvider; use function Lambdish\Phunctional\dissoc; final class DoctrineEntityManagerFactory @@ -23,12 +22,13 @@ final class DoctrineEntityManagerFactory ]; public static function create( - array $parameters, - array $contextPrefixes, - bool $isDevMode, + array $parameters, + array $contextPrefixes, + bool $isDevMode, string $schemaFile, - array $dbalCustomTypesClasses - ): EntityManager { + array $dbalCustomTypesClasses + ): EntityManager + { if ($isDevMode) { static::generateDatabaseIfNotExists($parameters, $schemaFile); } @@ -45,10 +45,12 @@ private static function generateDatabaseIfNotExists(array $parameters, string $s $databaseName = $parameters['dbname']; $parametersWithoutDatabaseName = dissoc($parameters, 'dbname'); $connection = DriverManager::getConnection($parametersWithoutDatabaseName); - $schemaManager = new MySqlSchemaManager($connection); + $platform = new MariaDBPlatform(); + $schemaManager = new MySQLSchemaManager($connection, $platform); if (!self::databaseExists($databaseName, $schemaManager)) { $schemaManager->createDatabase($databaseName); + $connection->exec(sprintf('USE %s', $databaseName)); $connection->exec(file_get_contents(realpath($schemaFile))); } @@ -70,7 +72,7 @@ private static function ensureSchemaFileExists(string $schemaFile): void private static function createConfiguration(array $contextPrefixes, bool $isDevMode): Configuration { - $config = Setup::createConfiguration($isDevMode, null, new DoctrineProvider(new ArrayAdapter())); + $config = ORMSetup::createConfiguration($isDevMode); $config->setMetadataDriverImpl(new SimplifiedXmlDriver(array_merge(self::$sharedPrefixes, $contextPrefixes))); diff --git a/src/Shared/Infrastructure/Symfony/FlashSession.php b/src/Shared/Infrastructure/Symfony/FlashSession.php index c19977faa..812c2a8b0 100644 --- a/src/Shared/Infrastructure/Symfony/FlashSession.php +++ b/src/Shared/Infrastructure/Symfony/FlashSession.php @@ -5,15 +5,15 @@ namespace CodelyTv\Shared\Infrastructure\Symfony; use CodelyTv\Shared\Domain\Utils; -use Symfony\Component\HttpFoundation\Session\SessionInterface; +use Symfony\Component\HttpFoundation\RequestStack; final class FlashSession { private static array $flashes = []; - public function __construct(SessionInterface $session) + public function __construct(RequestStack $requestStack) { - self::$flashes = Utils::dot($session->getFlashBag()->all()); + self::$flashes = Utils::dot($requestStack->getSession()->getFlashBag()->all()); } public function get(string $key, $default = null) diff --git a/src/Shared/Infrastructure/Symfony/WebController.php b/src/Shared/Infrastructure/Symfony/WebController.php index 0265b7b31..8d8808b3a 100644 --- a/src/Shared/Infrastructure/Symfony/WebController.php +++ b/src/Shared/Infrastructure/Symfony/WebController.php @@ -8,8 +8,8 @@ use CodelyTv\Shared\Domain\Bus\Query\QueryBus; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\Response as SymfonyResponse; -use Symfony\Component\HttpFoundation\Session\SessionInterface; use Symfony\Component\Routing\RouterInterface; use Symfony\Component\Validator\ConstraintViolationListInterface; use Twig\Environment; @@ -17,11 +17,11 @@ abstract class WebController extends ApiController { public function __construct( - private Environment $twig, - private RouterInterface $router, - private SessionInterface $session, - QueryBus $queryBus, - CommandBus $commandBus, + private Environment $twig, + private RouterInterface $router, + private RequestStack $requestStack, + QueryBus $queryBus, + CommandBus $commandBus, ApiExceptionsHttpStatusCodeMapping $exceptionHandler ) { parent::__construct($queryBus, $commandBus, $exceptionHandler); @@ -68,7 +68,7 @@ private function formatFlashErrors(ConstraintViolationListInterface $violations) private function addFlashFor(string $prefix, array $messages): void { foreach ($messages as $key => $message) { - $this->session->getFlashBag()->set($prefix . '.' . $key, $message); + $this->requestStack->getSession()->getFlashBag()->set($prefix . '.' . $key, $message); } } } diff --git a/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php b/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php index 7b7a2e92f..f16af1891 100644 --- a/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php +++ b/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php @@ -29,12 +29,12 @@ protected function assertSimilar($expected, $actual): void protected function service(string $id): mixed { - return self::$container->get($id); + return self::getContainer()->get($id); } protected function parameter($parameter): mixed { - return self::$container->getParameter($parameter); + return self::getContainer()->getParameter($parameter); } protected function clearUnitOfWork(): void From 523563a3d2c8f8539815d231e0f55c293c0c3507 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Thu, 16 Jun 2022 14:25:30 +0200 Subject: [PATCH 09/40] ci: add lint (#312) * feat: add php cs fixer * feat: pass php cs fixer * ci: add lint step --- .github/workflows/ci.yml | 3 + .gitignore | 2 + .php-cs-fixer.dist.php | 23 + Makefile | 4 + .../Courses/CoursesGetController.php | 4 +- .../MySql/ConsumeMySqlDomainEventsCommand.php | 6 +- .../ConsumeRabbitMqDomainEventsCommand.php | 2 +- ...SupervisorRabbitMqConsumerFilesCommand.php | 22 +- composer.json | 3 +- composer.lock | 405 +++++++++++++++++- .../Application/Store/DomainEventStorer.php | 2 +- .../Store/StoreDomainEventOnOccurred.php | 2 +- .../Domain/AnalyticsDomainEvent.php | 8 +- .../Domain/AnalyticsDomainEventBody.php | 2 +- .../Authenticate/AuthenticateUserCommand.php | 2 +- .../AuthenticateUserCommandHandler.php | 2 +- .../Authenticate/UserAuthenticator.php | 2 +- src/Backoffice/Auth/Domain/AuthUser.php | 2 +- .../Application/BackofficeCourseResponse.php | 2 +- .../Application/BackofficeCoursesResponse.php | 2 +- .../Create/BackofficeCourseCreator.php | 2 +- .../CreateBackofficeCourseOnCourseCreated.php | 2 +- .../AllBackofficeCoursesSearcher.php | 4 +- ...SearchAllBackofficeCoursesQueryHandler.php | 2 +- .../BackofficeCoursesByCriteriaSearcher.php | 4 +- ...SearchBackofficeCoursesByCriteriaQuery.php | 10 +- ...ackofficeCoursesByCriteriaQueryHandler.php | 2 +- .../Courses/Domain/BackofficeCourse.php | 2 +- ...lasticsearchBackofficeCourseRepository.php | 2 +- ...nMemoryCacheBackofficeCourseRepository.php | 2 +- .../Application/Create/CourseCreator.php | 2 +- .../Create/CreateCourseCommand.php | 2 +- .../Create/CreateCourseCommandHandler.php | 2 +- .../Courses/Application/Find/CourseFinder.php | 2 +- .../Application/Update/CourseRenamer.php | 4 +- src/Mooc/Courses/Domain/Course.php | 2 +- .../Domain/CourseCreatedDomainEvent.php | 4 +- src/Mooc/Courses/Domain/CourseNotExist.php | 2 +- .../Application/Find/CoursesCounterFinder.php | 2 +- .../Find/CoursesCounterResponse.php | 2 +- .../Find/FindCoursesCounterQueryHandler.php | 2 +- .../Increment/CoursesCounterIncrementer.php | 6 +- ...IncrementCoursesCounterOnCourseCreated.php | 2 +- .../CoursesCounter/Domain/CoursesCounter.php | 4 +- .../CoursesCounterIncrementedDomainEvent.php | 2 +- .../Persistence/Doctrine/CourseIdsType.php | 4 +- .../Doctrine/DbalTypesSearcher.php | 6 +- .../Doctrine/DoctrinePrefixesSearcher.php | 6 +- .../Application/Create/CreateVideoCommand.php | 10 +- .../Create/CreateVideoCommandHandler.php | 4 +- .../Application/Create/VideoCreator.php | 2 +- .../Application/Find/FindVideoQuery.php | 2 +- .../Videos/Application/Find/VideoFinder.php | 2 +- .../Videos/Application/Find/VideoResponse.php | 10 +- .../Application/Trim/TrimVideoCommand.php | 4 +- .../Trim/TrimVideoCommandHandler.php | 6 +- .../Videos/Application/Trim/VideoTrimmer.php | 2 +- .../Application/Update/VideoTitleUpdater.php | 4 +- src/Mooc/Videos/Domain/Video.php | 14 +- .../Videos/Domain/VideoCreatedDomainEvent.php | 8 +- src/Mooc/Videos/Domain/VideoFinder.php | 2 +- src/Mooc/Videos/Domain/VideoNotFound.php | 2 +- src/Mooc/Videos/Domain/VideoType.php | 2 +- .../Persistence/Doctrine/VideoIdType.php | 1 - src/Shared/Domain/Assert.php | 2 +- src/Shared/Domain/Bus/Event/DomainEvent.php | 6 +- src/Shared/Domain/Collection.php | 2 +- src/Shared/Domain/Criteria/Criteria.php | 8 +- src/Shared/Domain/Criteria/Filter.php | 6 +- src/Shared/Domain/Criteria/FilterOperator.php | 2 +- src/Shared/Domain/Criteria/Filters.php | 4 +- src/Shared/Domain/Criteria/Order.php | 2 +- src/Shared/Domain/Criteria/OrderType.php | 2 +- src/Shared/Domain/SecondsInterval.php | 2 +- src/Shared/Domain/Utils.php | 6 +- src/Shared/Domain/ValueObject/Enum.php | 2 +- .../Bus/CallableFirstParameterExtractor.php | 4 +- .../Bus/Command/CommandNotRegisteredError.php | 3 +- .../Bus/Command/InMemorySymfonyCommandBus.php | 2 +- .../Bus/Event/DomainEventJsonDeserializer.php | 2 +- .../Bus/Event/DomainEventMapping.php | 4 +- .../Event/DomainEventSubscriberLocator.php | 4 +- .../InMemory/InMemorySymfonyEventBus.php | 2 +- .../MySqlDoctrineDomainEventsConsumer.php | 6 +- .../Bus/Event/MySql/MySqlDoctrineEventBus.php | 8 +- .../Bus/Event/RabbitMq/RabbitMqConfigurer.php | 7 +- .../Bus/Event/RabbitMq/RabbitMqConnection.php | 4 +- .../RabbitMq/RabbitMqDomainEventsConsumer.php | 21 +- .../Bus/Event/RabbitMq/RabbitMqEventBus.php | 17 +- .../RabbitMq/RabbitMqQueueNameFormatter.php | 6 +- .../WithPrometheusMonitoringEventBus.php | 9 +- .../Bus/Query/InMemorySymfonyQueryBus.php | 2 +- .../Bus/Query/QueryNotRegisteredError.php | 2 +- .../Doctrine/DatabaseConnections.php | 4 +- .../Doctrine/DoctrineEntityManagerFactory.php | 3 +- .../Elasticsearch/ElasticsearchClient.php | 2 +- .../Monitoring/PrometheusMonitor.php | 2 +- .../Doctrine/DoctrineCriteriaConverter.php | 6 +- .../Doctrine/DoctrineRepository.php | 2 +- .../Persistence/Doctrine/UuidType.php | 2 +- .../Elasticsearch/ElasticsearchRepository.php | 4 +- .../Symfony/AddJsonBodyToRequestListener.php | 6 +- .../Infrastructure/Symfony/ApiController.php | 6 +- .../Symfony/ApiExceptionListener.php | 4 +- .../Symfony/BasicHttpAuthMiddleware.php | 2 +- .../Infrastructure/Symfony/WebController.php | 6 +- ...icsearchBackofficeCourseRepositoryTest.php | 6 +- .../Domain/CoursesCounterMother.php | 2 +- tests/Shared/Domain/DuplicatorMother.php | 2 +- .../Command/InMemorySymfonyCommandBusTest.php | 4 +- .../Event/MySql/MySqlDoctrineEventBusTest.php | 4 +- .../TestAllWorksOnRabbitMqEventsPublished.php | 2 +- .../Bus/Query/InMemorySymfonyQueryBusTest.php | 4 +- .../Doctrine/MySqlDatabaseCleaner.php | 2 +- .../Elastic/ElasticDatabaseCleaner.php | 4 +- .../AggregateRootArraySimilarComparator.php | 4 +- .../AggregateRootSimilarComparator.php | 2 +- .../DomainEventArraySimilarComparator.php | 4 +- .../DomainEventSimilarComparator.php | 2 +- 119 files changed, 660 insertions(+), 241 deletions(-) create mode 100644 .php-cs-fixer.dist.php diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a9e05ac1f..8c5dc2df4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,6 +22,9 @@ jobs: - name: 🐳 Start all the environment run: make start + - name: 🔦 Lint + run: make lint + - name: 🏁 Static analysis run: make static-analysis diff --git a/.gitignore b/.gitignore index 440d81077..ee27af29d 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,5 @@ .phpunit.result.cache /build + +.php-cs-fixer.cache diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php new file mode 100644 index 000000000..bb744c831 --- /dev/null +++ b/.php-cs-fixer.dist.php @@ -0,0 +1,23 @@ +in( + [ + __DIR__ . '/apps/backoffice/backend/src', + __DIR__ . '/apps/backoffice/frontend/src', + __DIR__ . '/apps/mooc/backend/src', + __DIR__ . '/apps/mooc/frontend/src', + __DIR__ . '/src', + __DIR__ . '/tests', + ] +); + +$config = new PhpCsFixer\Config(); + +return $config->setRules( + [ + '@PSR12' => true, + 'strict_param' => true, + 'modernize_strpos' => true, + 'array_syntax' => ['syntax' => 'short'], + ] +)->setFinder($finder); diff --git a/Makefile b/Makefile index afff5a540..ca2150c78 100644 --- a/Makefile +++ b/Makefile @@ -47,6 +47,10 @@ test: composer-env-file static-analysis: composer-env-file docker exec codely-php_ddd_skeleton-mooc_backend-php ./vendor/bin/psalm +.PHONY: lint +lint: + docker exec codely-php_ddd_skeleton-mooc_backend-php ./vendor/bin/php-cs-fixer fix --config .php-cs-fixer.dist.php --allow-risky=yes --dry-run + .PHONY: run-tests run-tests: composer-env-file mkdir -p build/test_results/phpunit diff --git a/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php b/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php index 578e04589..7b1570dbb 100644 --- a/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php +++ b/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php @@ -30,7 +30,7 @@ public function __invoke(Request $request): JsonResponse new SearchBackofficeCoursesByCriteriaQuery( (array) $request->query->get('filters'), null === $orderBy ? null : (string) $orderBy, - null === $order ? null: (string) $order, + null === $order ? null : (string) $order, null === $limit ? null : (int) $limit, null === $offset ? null : (int) $offset ) @@ -38,7 +38,7 @@ public function __invoke(Request $request): JsonResponse return new JsonResponse( map( - fn(BackofficeCourseResponse $course) => [ + fn (BackofficeCourseResponse $course) => [ 'id' => $course->id(), 'name' => $course->name(), 'duration' => $course->duration(), diff --git a/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php b/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php index ff6ba13d6..69aeaff18 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php @@ -37,7 +37,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int { $quantityEventsToProcess = (int) $input->getArgument('quantity'); - $consumer = pipe($this->consumer(), fn() => $this->connections->clear()); + $consumer = pipe($this->consumer(), fn () => $this->connections->clear()); $this->consumer->consume($consumer, $quantityEventsToProcess); @@ -46,8 +46,8 @@ protected function execute(InputInterface $input, OutputInterface $output): int private function consumer(): callable { - return function (DomainEvent $domainEvent) { - $subscribers = $this->subscriberLocator->allSubscribedTo(get_class($domainEvent)); + return function (DomainEvent $domainEvent): void { + $subscribers = $this->subscriberLocator->allSubscribedTo($domainEvent::class); foreach ($subscribers as $subscriber) { $subscriber($domainEvent); diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php index b37d2b3ae..4fcd6d403 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php @@ -45,7 +45,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int private function consumer(string $queueName): callable { - return function () use ($queueName) { + return function () use ($queueName): void { $subscriber = $this->locator->withRabbitMqQueueNamed($queueName); $this->consumer->consume($subscriber, $queueName); diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php index ffe98f634..3fd739cbf 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php @@ -43,7 +43,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int private function configCreator(string $path): callable { - return function (DomainEventSubscriber $subscriber) use ($path) { + return function (DomainEventSubscriber $subscriber) use ($path): void { $queueName = RabbitMqQueueNameFormatter::format($subscriber); $subscriberName = RabbitMqQueueNameFormatter::shortFormat($subscriber); @@ -72,16 +72,16 @@ private function configCreator(string $path): callable private function template(): string { return <<=8.1", + "symfony/deprecation-contracts": "^2.1|^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/v6.1.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": "2022-02-25T11:15:52+00:00" + }, + { + "name": "symfony/process", + "version": "v6.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "318718453c2be58266f1a9e74063d13cb8dd4165" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/318718453c2be58266f1a9e74063d13cb8dd4165", + "reference": "318718453c2be58266f1a9e74063d13cb8dd4165", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "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/v6.1.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": "2022-05-11T12:12:29+00:00" + }, { "name": "symfony/proxy-manager-bridge", "version": "v6.1.0", @@ -9529,6 +9870,68 @@ ], "time": "2022-03-02T13:21:45+00:00" }, + { + "name": "symfony/stopwatch", + "version": "v6.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "77dedae82ce2a26e2e9b481855473fc3b3e4e54d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/77dedae82ce2a26e2e9b481855473fc3b3e4e54d", + "reference": "77dedae82ce2a26e2e9b481855473fc3b3e4e54d", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/service-contracts": "^1|^2|^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/v6.1.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": "2022-02-25T11:15:52+00:00" + }, { "name": "symfony/translation", "version": "v6.1.0", diff --git a/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php b/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php index 4a3b5df29..eced14cb2 100644 --- a/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php +++ b/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php @@ -13,7 +13,7 @@ final class DomainEventStorer { - public function __construct(private DomainEventsRepository $repository) + public function __construct(private readonly DomainEventsRepository $repository) { } diff --git a/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php b/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php index fe743fb0b..0fc8c2806 100644 --- a/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php +++ b/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php @@ -13,7 +13,7 @@ final class StoreDomainEventOnOccurred implements DomainEventSubscriber { - public function __construct(private DomainEventStorer $storer) + public function __construct(private readonly DomainEventStorer $storer) { } diff --git a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php index c21447421..8c7447ef1 100644 --- a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php +++ b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php @@ -7,10 +7,10 @@ final class AnalyticsDomainEvent { public function __construct( - private AnalyticsDomainEventId $id, - private AnalyticsDomainEventAggregateId $aggregateId, - private AnalyticsDomainEventName $name, - private AnalyticsDomainEventBody $body + private readonly AnalyticsDomainEventId $id, + private readonly AnalyticsDomainEventAggregateId $aggregateId, + private readonly AnalyticsDomainEventName $name, + private readonly AnalyticsDomainEventBody $body ) { } } diff --git a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php index d33a5ff8d..744dfa75b 100644 --- a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php +++ b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php @@ -6,7 +6,7 @@ final class AnalyticsDomainEventBody { - public function __construct(private array $value) + public function __construct(private readonly array $value) { } diff --git a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php index 1c450e14e..aef9a81b3 100644 --- a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php +++ b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php @@ -8,7 +8,7 @@ final class AuthenticateUserCommand implements Command { - public function __construct(private string $username, private string $password) + public function __construct(private readonly string $username, private readonly string $password) { } diff --git a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php index 8d0595cc8..7c7641853 100644 --- a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php +++ b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php @@ -10,7 +10,7 @@ final class AuthenticateUserCommandHandler implements CommandHandler { - public function __construct(private UserAuthenticator $authenticator) + public function __construct(private readonly UserAuthenticator $authenticator) { } diff --git a/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php b/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php index 201efb1aa..d86d65576 100644 --- a/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php +++ b/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php @@ -13,7 +13,7 @@ final class UserAuthenticator { - public function __construct(private AuthRepository $repository) + public function __construct(private readonly AuthRepository $repository) { } diff --git a/src/Backoffice/Auth/Domain/AuthUser.php b/src/Backoffice/Auth/Domain/AuthUser.php index 07b3790dc..1e951c905 100644 --- a/src/Backoffice/Auth/Domain/AuthUser.php +++ b/src/Backoffice/Auth/Domain/AuthUser.php @@ -6,7 +6,7 @@ final class AuthUser { - public function __construct(private AuthUsername $username, private AuthPassword $password) + public function __construct(private readonly AuthUsername $username, private readonly AuthPassword $password) { } diff --git a/src/Backoffice/Courses/Application/BackofficeCourseResponse.php b/src/Backoffice/Courses/Application/BackofficeCourseResponse.php index ecac5661c..7c8440ba6 100644 --- a/src/Backoffice/Courses/Application/BackofficeCourseResponse.php +++ b/src/Backoffice/Courses/Application/BackofficeCourseResponse.php @@ -6,7 +6,7 @@ final class BackofficeCourseResponse { - public function __construct(private string $id, private string $name, private string $duration) + public function __construct(private readonly string $id, private readonly string $name, private readonly string $duration) { } diff --git a/src/Backoffice/Courses/Application/BackofficeCoursesResponse.php b/src/Backoffice/Courses/Application/BackofficeCoursesResponse.php index 01a938d02..973202782 100644 --- a/src/Backoffice/Courses/Application/BackofficeCoursesResponse.php +++ b/src/Backoffice/Courses/Application/BackofficeCoursesResponse.php @@ -8,7 +8,7 @@ final class BackofficeCoursesResponse implements Response { - private array $courses; + private readonly array $courses; public function __construct(BackofficeCourseResponse ...$courses) { diff --git a/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php b/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php index 3897c5f0c..9fb967455 100644 --- a/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php +++ b/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php @@ -9,7 +9,7 @@ final class BackofficeCourseCreator { - public function __construct(private BackofficeCourseRepository $repository) + public function __construct(private readonly BackofficeCourseRepository $repository) { } diff --git a/src/Backoffice/Courses/Application/Create/CreateBackofficeCourseOnCourseCreated.php b/src/Backoffice/Courses/Application/Create/CreateBackofficeCourseOnCourseCreated.php index 97695b94b..a7ca626ce 100644 --- a/src/Backoffice/Courses/Application/Create/CreateBackofficeCourseOnCourseCreated.php +++ b/src/Backoffice/Courses/Application/Create/CreateBackofficeCourseOnCourseCreated.php @@ -9,7 +9,7 @@ final class CreateBackofficeCourseOnCourseCreated implements DomainEventSubscriber { - public function __construct(private BackofficeCourseCreator $creator) + public function __construct(private readonly BackofficeCourseCreator $creator) { } diff --git a/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php b/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php index b06205057..0045c8e4c 100644 --- a/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php +++ b/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php @@ -12,7 +12,7 @@ final class AllBackofficeCoursesSearcher { - public function __construct(private BackofficeCourseRepository $repository) + public function __construct(private readonly BackofficeCourseRepository $repository) { } @@ -23,7 +23,7 @@ public function searchAll(): BackofficeCoursesResponse private function toResponse(): callable { - return static fn(BackofficeCourse $course) => new BackofficeCourseResponse( + return static fn (BackofficeCourse $course) => new BackofficeCourseResponse( $course->id(), $course->name(), $course->duration() diff --git a/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQueryHandler.php b/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQueryHandler.php index 3cfb7b257..dde35f54f 100644 --- a/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQueryHandler.php +++ b/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQueryHandler.php @@ -9,7 +9,7 @@ final class SearchAllBackofficeCoursesQueryHandler implements QueryHandler { - public function __construct(private AllBackofficeCoursesSearcher $searcher) + public function __construct(private readonly AllBackofficeCoursesSearcher $searcher) { } diff --git a/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php b/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php index 365459a8d..74cdc7372 100644 --- a/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php +++ b/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php @@ -15,7 +15,7 @@ final class BackofficeCoursesByCriteriaSearcher { - public function __construct(private BackofficeCourseRepository $repository) + public function __construct(private readonly BackofficeCourseRepository $repository) { } @@ -28,7 +28,7 @@ public function search(Filters $filters, Order $order, ?int $limit, ?int $offset private function toResponse(): callable { - return static fn(BackofficeCourse $course) => new BackofficeCourseResponse( + return static fn (BackofficeCourse $course) => new BackofficeCourseResponse( $course->id(), $course->name(), $course->duration() diff --git a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQuery.php b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQuery.php index 5c2d9a80d..f35fb7089 100644 --- a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQuery.php +++ b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQuery.php @@ -9,11 +9,11 @@ final class SearchBackofficeCoursesByCriteriaQuery implements Query { public function __construct( - private array $filters, - private ?string $orderBy, - private ?string $order, - private ?int $limit, - private ?int $offset + private readonly array $filters, + private readonly ?string $orderBy, + private readonly ?string $order, + private readonly ?int $limit, + private readonly ?int $offset ) { } diff --git a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php index 8b65f6a22..a3cfe6f71 100644 --- a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php +++ b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php @@ -11,7 +11,7 @@ final class SearchBackofficeCoursesByCriteriaQueryHandler implements QueryHandler { - public function __construct(private BackofficeCoursesByCriteriaSearcher $searcher) + public function __construct(private readonly BackofficeCoursesByCriteriaSearcher $searcher) { } diff --git a/src/Backoffice/Courses/Domain/BackofficeCourse.php b/src/Backoffice/Courses/Domain/BackofficeCourse.php index 877e20066..96636c2d0 100644 --- a/src/Backoffice/Courses/Domain/BackofficeCourse.php +++ b/src/Backoffice/Courses/Domain/BackofficeCourse.php @@ -8,7 +8,7 @@ final class BackofficeCourse extends AggregateRoot { - public function __construct(private string $id, private string $name, private string $duration) + public function __construct(private readonly string $id, private readonly string $name, private readonly string $duration) { } diff --git a/src/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepository.php b/src/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepository.php index bc06eced7..5bd3abbec 100644 --- a/src/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepository.php +++ b/src/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepository.php @@ -34,6 +34,6 @@ protected function aggregateName(): string private function toCourse(): callable { - return static fn(array $primitives) => BackofficeCourse::fromPrimitives($primitives); + return static fn (array $primitives) => BackofficeCourse::fromPrimitives($primitives); } } diff --git a/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php b/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php index 70498e140..5a2062beb 100644 --- a/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php +++ b/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php @@ -14,7 +14,7 @@ final class InMemoryCacheBackofficeCourseRepository implements BackofficeCourseR private static array $allCoursesCache = []; private static array $matchingCache = []; - public function __construct(private BackofficeCourseRepository $repository) + public function __construct(private readonly BackofficeCourseRepository $repository) { } diff --git a/src/Mooc/Courses/Application/Create/CourseCreator.php b/src/Mooc/Courses/Application/Create/CourseCreator.php index a8f7072fc..b85373945 100644 --- a/src/Mooc/Courses/Application/Create/CourseCreator.php +++ b/src/Mooc/Courses/Application/Create/CourseCreator.php @@ -13,7 +13,7 @@ final class CourseCreator { - public function __construct(private CourseRepository $repository, private EventBus $bus) + public function __construct(private readonly CourseRepository $repository, private readonly EventBus $bus) { } diff --git a/src/Mooc/Courses/Application/Create/CreateCourseCommand.php b/src/Mooc/Courses/Application/Create/CreateCourseCommand.php index d8988305f..970c9cdaf 100644 --- a/src/Mooc/Courses/Application/Create/CreateCourseCommand.php +++ b/src/Mooc/Courses/Application/Create/CreateCourseCommand.php @@ -8,7 +8,7 @@ final class CreateCourseCommand implements Command { - public function __construct(private string $id, private string $name, private string $duration) + public function __construct(private readonly string $id, private readonly string $name, private readonly string $duration) { } diff --git a/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php b/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php index bd1963dfc..49b2eaf66 100644 --- a/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php +++ b/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php @@ -11,7 +11,7 @@ final class CreateCourseCommandHandler implements CommandHandler { - public function __construct(private CourseCreator $creator) + public function __construct(private readonly CourseCreator $creator) { } diff --git a/src/Mooc/Courses/Application/Find/CourseFinder.php b/src/Mooc/Courses/Application/Find/CourseFinder.php index 82fb018c2..b307b9d37 100644 --- a/src/Mooc/Courses/Application/Find/CourseFinder.php +++ b/src/Mooc/Courses/Application/Find/CourseFinder.php @@ -11,7 +11,7 @@ final class CourseFinder { - public function __construct(private CourseRepository $repository) + public function __construct(private readonly CourseRepository $repository) { } diff --git a/src/Mooc/Courses/Application/Update/CourseRenamer.php b/src/Mooc/Courses/Application/Update/CourseRenamer.php index 39e1f82a7..e1916c4f4 100644 --- a/src/Mooc/Courses/Application/Update/CourseRenamer.php +++ b/src/Mooc/Courses/Application/Update/CourseRenamer.php @@ -12,9 +12,9 @@ final class CourseRenamer { - private CourseFinder $finder; + private readonly CourseFinder $finder; - public function __construct(private CourseRepository $repository, private EventBus $bus) + public function __construct(private readonly CourseRepository $repository, private readonly EventBus $bus) { $this->finder = new CourseFinder($repository); } diff --git a/src/Mooc/Courses/Domain/Course.php b/src/Mooc/Courses/Domain/Course.php index 940193bbc..f41041490 100644 --- a/src/Mooc/Courses/Domain/Course.php +++ b/src/Mooc/Courses/Domain/Course.php @@ -9,7 +9,7 @@ final class Course extends AggregateRoot { - public function __construct(private CourseId $id, private CourseName $name, private CourseDuration $duration) + public function __construct(private readonly CourseId $id, private CourseName $name, private readonly CourseDuration $duration) { } diff --git a/src/Mooc/Courses/Domain/CourseCreatedDomainEvent.php b/src/Mooc/Courses/Domain/CourseCreatedDomainEvent.php index 39b6d2181..41a68e6ec 100644 --- a/src/Mooc/Courses/Domain/CourseCreatedDomainEvent.php +++ b/src/Mooc/Courses/Domain/CourseCreatedDomainEvent.php @@ -10,8 +10,8 @@ final class CourseCreatedDomainEvent extends DomainEvent { public function __construct( string $id, - private string $name, - private string $duration, + private readonly string $name, + private readonly string $duration, string $eventId = null, string $occurredOn = null ) { diff --git a/src/Mooc/Courses/Domain/CourseNotExist.php b/src/Mooc/Courses/Domain/CourseNotExist.php index fee90ff81..ab3e95e4d 100644 --- a/src/Mooc/Courses/Domain/CourseNotExist.php +++ b/src/Mooc/Courses/Domain/CourseNotExist.php @@ -9,7 +9,7 @@ final class CourseNotExist extends DomainError { - public function __construct(private CourseId $id) + public function __construct(private readonly CourseId $id) { parent::__construct(); } diff --git a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php index 1709f2b17..a0e5c2996 100644 --- a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php +++ b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php @@ -9,7 +9,7 @@ final class CoursesCounterFinder { - public function __construct(private CoursesCounterRepository $repository) + public function __construct(private readonly CoursesCounterRepository $repository) { } diff --git a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php index 72580d4ae..b0373e28e 100644 --- a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php +++ b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php @@ -8,7 +8,7 @@ final class CoursesCounterResponse implements Response { - public function __construct(private int $total) + public function __construct(private readonly int $total) { } diff --git a/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php b/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php index 666e3bbb5..b7808f602 100644 --- a/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php +++ b/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php @@ -8,7 +8,7 @@ final class FindCoursesCounterQueryHandler implements QueryHandler { - public function __construct(private CoursesCounterFinder $finder) + public function __construct(private readonly CoursesCounterFinder $finder) { } diff --git a/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php b/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php index 5e4dd2313..0da54ad77 100644 --- a/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php +++ b/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php @@ -14,9 +14,9 @@ final class CoursesCounterIncrementer { public function __construct( - private CoursesCounterRepository $repository, - private UuidGenerator $uuidGenerator, - private EventBus $bus + private readonly CoursesCounterRepository $repository, + private readonly UuidGenerator $uuidGenerator, + private readonly EventBus $bus ) { } diff --git a/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php b/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php index 13fd1e49e..8e1a83e6f 100644 --- a/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php +++ b/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php @@ -11,7 +11,7 @@ final class IncrementCoursesCounterOnCourseCreated implements DomainEventSubscriber { - public function __construct(private CoursesCounterIncrementer $incrementer) + public function __construct(private readonly CoursesCounterIncrementer $incrementer) { } diff --git a/src/Mooc/CoursesCounter/Domain/CoursesCounter.php b/src/Mooc/CoursesCounter/Domain/CoursesCounter.php index 5dc07366c..fc73ba58b 100644 --- a/src/Mooc/CoursesCounter/Domain/CoursesCounter.php +++ b/src/Mooc/CoursesCounter/Domain/CoursesCounter.php @@ -13,7 +13,7 @@ final class CoursesCounter extends AggregateRoot private array $existingCourses; public function __construct( - private CoursesCounterId $id, + private readonly CoursesCounterId $id, private CoursesCounterTotal $total, CourseId ...$existingCourses ) { @@ -57,6 +57,6 @@ public function hasIncremented(CourseId $courseId): bool private function courseIdComparator(CourseId $courseId): callable { - return static fn(CourseId $other) => $courseId->equals($other); + return static fn (CourseId $other) => $courseId->equals($other); } } diff --git a/src/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEvent.php b/src/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEvent.php index 7a40482f1..4867871db 100644 --- a/src/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEvent.php +++ b/src/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEvent.php @@ -10,7 +10,7 @@ final class CoursesCounterIncrementedDomainEvent extends DomainEvent { public function __construct( string $aggregateId, - private int $total, + private readonly int $total, string $eventId = null, string $occurredOn = null ) { diff --git a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php index 9606fc65f..40bc8611f 100644 --- a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php +++ b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php @@ -24,13 +24,13 @@ public function getName(): string public function convertToDatabaseValue($value, AbstractPlatform $platform) { - return parent::convertToDatabaseValue(map(fn(CourseId $id) => $id->value(), $value), $platform); + return parent::convertToDatabaseValue(map(fn (CourseId $id) => $id->value(), $value), $platform); } public function convertToPHPValue($value, AbstractPlatform $platform) { $scalars = parent::convertToPHPValue($value, $platform); - return map(fn(string $value) => new CourseId($value), $scalars); + return map(fn (string $value) => new CourseId($value), $scalars); } } diff --git a/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php b/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php index 07d8290a9..436a867d5 100644 --- a/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php +++ b/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php @@ -24,7 +24,7 @@ public static function inPath(string $path, string $contextName): array private static function modulesInPath(string $path): array { return filter( - static fn(string $possibleModule) => !in_array($possibleModule, ['.', '..']), + static fn (string $possibleModule) => !in_array($possibleModule, ['.', '..'], true), scandir($path) ); } @@ -43,7 +43,7 @@ static function ($unused, string $module) use ($path) { private static function isExistingDbalPath(): callable { - return static fn(string $path) => !empty($path); + return static fn (string $path) => !empty($path); } private static function dbalClassesSearcher(string $contextName): callable @@ -51,7 +51,7 @@ private static function dbalClassesSearcher(string $contextName): callable return static function (array $totalNamespaces, string $path) use ($contextName) { $possibleFiles = scandir($path); $files = filter( - static fn($file) => Utils::endsWith('Type.php', $file), + static fn ($file) => Utils::endsWith('Type.php', $file), $possibleFiles ); diff --git a/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php b/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php index 1f421b199..d2e28a092 100644 --- a/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php +++ b/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php @@ -23,7 +23,7 @@ public static function inPath(string $path, string $baseNamespace): array private static function modulesInPath(string $path): array { return filter( - static fn(string $possibleModule) => !in_array($possibleModule, ['.', '..']), + static fn (string $possibleModule) => !in_array($possibleModule, ['.', '..'], true), scandir($path) ); } @@ -42,11 +42,11 @@ static function ($unused, string $module) use ($path) { private static function isExistingMappingPath(): callable { - return static fn(string $path) => !empty($path); + return static fn (string $path) => !empty($path); } private static function namespaceFormatter(string $baseNamespace): callable { - return static fn(string $path, string $module) => "$baseNamespace\\$module\Domain"; + return static fn (string $path, string $module) => "$baseNamespace\\$module\Domain"; } } diff --git a/src/Mooc/Videos/Application/Create/CreateVideoCommand.php b/src/Mooc/Videos/Application/Create/CreateVideoCommand.php index b592a4c6d..636298100 100644 --- a/src/Mooc/Videos/Application/Create/CreateVideoCommand.php +++ b/src/Mooc/Videos/Application/Create/CreateVideoCommand.php @@ -9,11 +9,11 @@ final class CreateVideoCommand implements Command { public function __construct( - private string $id, - private string $type, - private string $title, - private string $url, - private string $courseId + private readonly string $id, + private readonly string $type, + private readonly string $title, + private readonly string $url, + private readonly string $courseId ) { } diff --git a/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php b/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php index b758be255..e6b8b0d89 100644 --- a/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php +++ b/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php @@ -13,11 +13,11 @@ final class CreateVideoCommandHandler implements CommandHandler { - public function __construct(private VideoCreator $creator) + public function __construct(private readonly VideoCreator $creator) { } - public function __invoke(CreateVideoCommand $command) + public function __invoke(CreateVideoCommand $command): void { $id = new VideoId($command->id()); $type = new VideoType($command->type()); diff --git a/src/Mooc/Videos/Application/Create/VideoCreator.php b/src/Mooc/Videos/Application/Create/VideoCreator.php index 1901a3c7e..91180306b 100644 --- a/src/Mooc/Videos/Application/Create/VideoCreator.php +++ b/src/Mooc/Videos/Application/Create/VideoCreator.php @@ -15,7 +15,7 @@ final class VideoCreator { - public function __construct(private VideoRepository $repository, private EventBus $bus) + public function __construct(private readonly VideoRepository $repository, private readonly EventBus $bus) { } diff --git a/src/Mooc/Videos/Application/Find/FindVideoQuery.php b/src/Mooc/Videos/Application/Find/FindVideoQuery.php index 81e969160..eadef0af1 100644 --- a/src/Mooc/Videos/Application/Find/FindVideoQuery.php +++ b/src/Mooc/Videos/Application/Find/FindVideoQuery.php @@ -8,7 +8,7 @@ final class FindVideoQuery implements Query { - public function __construct(private string $id) + public function __construct(private readonly string $id) { } diff --git a/src/Mooc/Videos/Application/Find/VideoFinder.php b/src/Mooc/Videos/Application/Find/VideoFinder.php index f74f297e8..6f99ef280 100644 --- a/src/Mooc/Videos/Application/Find/VideoFinder.php +++ b/src/Mooc/Videos/Application/Find/VideoFinder.php @@ -10,7 +10,7 @@ final class VideoFinder { - private DomainVideoFinder $finder; + private readonly DomainVideoFinder $finder; public function __construct(VideoRepository $repository) { diff --git a/src/Mooc/Videos/Application/Find/VideoResponse.php b/src/Mooc/Videos/Application/Find/VideoResponse.php index b7961687d..6bd5fd336 100644 --- a/src/Mooc/Videos/Application/Find/VideoResponse.php +++ b/src/Mooc/Videos/Application/Find/VideoResponse.php @@ -9,11 +9,11 @@ final class VideoResponse implements Response { public function __construct( - private string $id, - private string $type, - private string $title, - private string $url, - private string $courseId + private readonly string $id, + private readonly string $type, + private readonly string $title, + private readonly string $url, + private readonly string $courseId ) { } } diff --git a/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php b/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php index c36c493a3..822916230 100644 --- a/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php +++ b/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php @@ -1,6 +1,6 @@ videoId()); $interval = SecondsInterval::fromValues($command->keepFromSecond(), $command->keepToSecond()); diff --git a/src/Mooc/Videos/Application/Trim/VideoTrimmer.php b/src/Mooc/Videos/Application/Trim/VideoTrimmer.php index 2a496b848..d1415e4a9 100644 --- a/src/Mooc/Videos/Application/Trim/VideoTrimmer.php +++ b/src/Mooc/Videos/Application/Trim/VideoTrimmer.php @@ -1,6 +1,6 @@ finder = new VideoFinder($repository); } diff --git a/src/Mooc/Videos/Domain/Video.php b/src/Mooc/Videos/Domain/Video.php index 8bdfdf7c4..6028dc104 100644 --- a/src/Mooc/Videos/Domain/Video.php +++ b/src/Mooc/Videos/Domain/Video.php @@ -11,11 +11,11 @@ final class Video extends AggregateRoot { public function __construct( - private VideoId $id, - private VideoType $type, + private readonly VideoId $id, + private readonly VideoType $type, private VideoTitle $title, - private VideoUrl $url, - private CourseId $courseId + private readonly VideoUrl $url, + private readonly CourseId $courseId ) { } @@ -30,7 +30,11 @@ public static function create( $video->record( new VideoCreatedDomainEvent( - $id->value(), $type->value(), $title->value(), $url->value(), $courseId->value() + $id->value(), + $type->value(), + $title->value(), + $url->value(), + $courseId->value() ) ); diff --git a/src/Mooc/Videos/Domain/VideoCreatedDomainEvent.php b/src/Mooc/Videos/Domain/VideoCreatedDomainEvent.php index 93458fdfa..e820ac970 100644 --- a/src/Mooc/Videos/Domain/VideoCreatedDomainEvent.php +++ b/src/Mooc/Videos/Domain/VideoCreatedDomainEvent.php @@ -10,10 +10,10 @@ final class VideoCreatedDomainEvent extends DomainEvent { public function __construct( string $id, - private string $type, - private string $title, - private string $url, - private string $courseId, + private readonly string $type, + private readonly string $title, + private readonly string $url, + private readonly string $courseId, string $eventId = null, string $occurredOn = null ) { diff --git a/src/Mooc/Videos/Domain/VideoFinder.php b/src/Mooc/Videos/Domain/VideoFinder.php index 1a07f8403..ba7a22f00 100644 --- a/src/Mooc/Videos/Domain/VideoFinder.php +++ b/src/Mooc/Videos/Domain/VideoFinder.php @@ -6,7 +6,7 @@ final class VideoFinder { - public function __construct(private VideoRepository $repository) + public function __construct(private readonly VideoRepository $repository) { } diff --git a/src/Mooc/Videos/Domain/VideoNotFound.php b/src/Mooc/Videos/Domain/VideoNotFound.php index a252dcd83..7ba9f1dfd 100644 --- a/src/Mooc/Videos/Domain/VideoNotFound.php +++ b/src/Mooc/Videos/Domain/VideoNotFound.php @@ -8,7 +8,7 @@ final class VideoNotFound extends DomainError { - public function __construct(private VideoId $id) + public function __construct(private readonly VideoId $id) { parent::__construct(); } diff --git a/src/Mooc/Videos/Domain/VideoType.php b/src/Mooc/Videos/Domain/VideoType.php index 735b72d17..439c785b1 100644 --- a/src/Mooc/Videos/Domain/VideoType.php +++ b/src/Mooc/Videos/Domain/VideoType.php @@ -16,7 +16,7 @@ final class VideoType extends Enum public const SCREENCAST = 'screencast'; public const INTERVIEW = 'interview'; - protected function throwExceptionForInvalidValue($value): void + protected function throwExceptionForInvalidValue($value): never { throw new InvalidArgumentException(sprintf('The <%s> value is not a valid video type', $value)); } diff --git a/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoIdType.php b/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoIdType.php index dbcec26aa..7f5eef170 100644 --- a/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoIdType.php +++ b/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoIdType.php @@ -14,4 +14,3 @@ protected function typeClassName(): string return VideoId::class; } } - diff --git a/src/Shared/Domain/Assert.php b/src/Shared/Domain/Assert.php index 8b4eaee9c..d47b45939 100644 --- a/src/Shared/Domain/Assert.php +++ b/src/Shared/Domain/Assert.php @@ -19,7 +19,7 @@ public static function instanceOf(string $class, $item): void { if (!$item instanceof $class) { throw new InvalidArgumentException( - sprintf('The object <%s> is not an instance of <%s>', $class, get_class($item)) + sprintf('The object <%s> is not an instance of <%s>', $class, $item::class) ); } } diff --git a/src/Shared/Domain/Bus/Event/DomainEvent.php b/src/Shared/Domain/Bus/Event/DomainEvent.php index daafdf1ee..0bca368d4 100644 --- a/src/Shared/Domain/Bus/Event/DomainEvent.php +++ b/src/Shared/Domain/Bus/Event/DomainEvent.php @@ -10,10 +10,10 @@ abstract class DomainEvent { - private string $eventId; - private string $occurredOn; + private readonly string $eventId; + private readonly string $occurredOn; - public function __construct(private string $aggregateId, string $eventId = null, string $occurredOn = null) + public function __construct(private readonly string $aggregateId, string $eventId = null, string $occurredOn = null) { $this->eventId = $eventId ?: Uuid::random()->value(); $this->occurredOn = $occurredOn ?: Utils::dateToString(new DateTimeImmutable()); diff --git a/src/Shared/Domain/Collection.php b/src/Shared/Domain/Collection.php index 8975e05ea..137e6c234 100644 --- a/src/Shared/Domain/Collection.php +++ b/src/Shared/Domain/Collection.php @@ -10,7 +10,7 @@ abstract class Collection implements Countable, IteratorAggregate { - public function __construct(private array $items) + public function __construct(private readonly array $items) { Assert::arrayOf($this->type(), $items); } diff --git a/src/Shared/Domain/Criteria/Criteria.php b/src/Shared/Domain/Criteria/Criteria.php index e73ee933f..1c762ed23 100644 --- a/src/Shared/Domain/Criteria/Criteria.php +++ b/src/Shared/Domain/Criteria/Criteria.php @@ -7,10 +7,10 @@ final class Criteria { public function __construct( - private Filters $filters, - private Order $order, - private ?int $offset, - private ?int $limit + private readonly Filters $filters, + private readonly Order $order, + private readonly ?int $offset, + private readonly ?int $limit ) { } diff --git a/src/Shared/Domain/Criteria/Filter.php b/src/Shared/Domain/Criteria/Filter.php index 89e031132..5a8cbf3bf 100644 --- a/src/Shared/Domain/Criteria/Filter.php +++ b/src/Shared/Domain/Criteria/Filter.php @@ -7,9 +7,9 @@ final class Filter { public function __construct( - private FilterField $field, - private FilterOperator $operator, - private FilterValue $value + private readonly FilterField $field, + private readonly FilterOperator $operator, + private readonly FilterValue $value ) { } diff --git a/src/Shared/Domain/Criteria/FilterOperator.php b/src/Shared/Domain/Criteria/FilterOperator.php index 4567997a2..1c9c3b8ff 100644 --- a/src/Shared/Domain/Criteria/FilterOperator.php +++ b/src/Shared/Domain/Criteria/FilterOperator.php @@ -27,7 +27,7 @@ public function isContaining(): bool return in_array($this->value(), self::$containing, true); } - protected function throwExceptionForInvalidValue($value): void + protected function throwExceptionForInvalidValue($value): never { throw new InvalidArgumentException(sprintf('The filter <%s> is invalid', $value)); } diff --git a/src/Shared/Domain/Criteria/Filters.php b/src/Shared/Domain/Criteria/Filters.php index 1dc56b3ce..b55a5e0f2 100644 --- a/src/Shared/Domain/Criteria/Filters.php +++ b/src/Shared/Domain/Criteria/Filters.php @@ -16,7 +16,7 @@ public static function fromValues(array $values): self private static function filterBuilder(): callable { - return fn(array $values) => Filter::fromValues($values); + return fn (array $values) => Filter::fromValues($values); } public function add(Filter $filter): self @@ -32,7 +32,7 @@ public function filters(): array public function serialize(): string { return reduce( - static fn(string $accumulate, Filter $filter) => sprintf('%s^%s', $accumulate, $filter->serialize()), + static fn (string $accumulate, Filter $filter) => sprintf('%s^%s', $accumulate, $filter->serialize()), $this->items(), '' ); diff --git a/src/Shared/Domain/Criteria/Order.php b/src/Shared/Domain/Criteria/Order.php index 08f342bd1..643a65268 100644 --- a/src/Shared/Domain/Criteria/Order.php +++ b/src/Shared/Domain/Criteria/Order.php @@ -6,7 +6,7 @@ final class Order { - public function __construct(private OrderBy $orderBy, private OrderType $orderType) + public function __construct(private readonly OrderBy $orderBy, private readonly OrderType $orderType) { } diff --git a/src/Shared/Domain/Criteria/OrderType.php b/src/Shared/Domain/Criteria/OrderType.php index 7d46d0b83..2ffc46071 100644 --- a/src/Shared/Domain/Criteria/OrderType.php +++ b/src/Shared/Domain/Criteria/OrderType.php @@ -23,7 +23,7 @@ public function isNone(): bool return $this->equals(self::none()); } - protected function throwExceptionForInvalidValue($value): void + protected function throwExceptionForInvalidValue($value): never { throw new InvalidArgumentException($value); } diff --git a/src/Shared/Domain/SecondsInterval.php b/src/Shared/Domain/SecondsInterval.php index 52f480f21..55df80a10 100644 --- a/src/Shared/Domain/SecondsInterval.php +++ b/src/Shared/Domain/SecondsInterval.php @@ -8,7 +8,7 @@ final class SecondsInterval { - public function __construct(private Second $from, private Second $to) + public function __construct(private readonly Second $from, private readonly Second $to) { $this->ensureIntervalEndsAfterStart($from, $to); } diff --git a/src/Shared/Domain/Utils.php b/src/Shared/Domain/Utils.php index 854db5f25..e0eb706f8 100644 --- a/src/Shared/Domain/Utils.php +++ b/src/Shared/Domain/Utils.php @@ -34,7 +34,7 @@ public static function stringToDate(string $date): DateTimeImmutable public static function jsonEncode(array $values): string { - return json_encode($values); + return json_encode($values, JSON_THROW_ON_ERROR); } public static function jsonDecode(string $json): array @@ -50,7 +50,7 @@ public static function jsonDecode(string $json): array public static function toSnakeCase(string $text): string { - return ctype_lower($text) ? $text : strtolower(preg_replace('/([^A-Z\s])([A-Z])/', "$1_$2", $text)); + return ctype_lower($text) ? $text : strtolower((string) preg_replace('/([^A-Z\s])([A-Z])/', "$1_$2", $text)); } public static function toCamelCase(string $text): string @@ -75,7 +75,7 @@ public static function dot(array $array, string $prepend = ''): array public static function filesIn(string $path, string $fileType): array { return filter( - static fn(string $possibleModule) => strstr($possibleModule, $fileType), + static fn (string $possibleModule) => strstr($possibleModule, $fileType), scandir($path) ); } diff --git a/src/Shared/Domain/ValueObject/Enum.php b/src/Shared/Domain/ValueObject/Enum.php index 18afa4d3f..1d7eed987 100644 --- a/src/Shared/Domain/ValueObject/Enum.php +++ b/src/Shared/Domain/ValueObject/Enum.php @@ -55,7 +55,7 @@ public static function random(): static private static function keysFormatter(): callable { - return static fn($unused, string $key): string => Utils::toCamelCase(strtolower($key)); + return static fn ($unused, string $key): string => Utils::toCamelCase(strtolower($key)); } public function value() diff --git a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php index 4d0ac9b07..eb5cb6efe 100644 --- a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php +++ b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php @@ -27,7 +27,7 @@ public static function forPipedCallables(iterable $callables): array private static function classExtractor(CallableFirstParameterExtractor $parameterExtractor): callable { - return static fn(callable $handler): ?string => $parameterExtractor->extract($handler); + return static fn (callable $handler): ?string => $parameterExtractor->extract($handler); } private static function pipedCallablesReducer(): callable @@ -45,7 +45,7 @@ private static function pipedCallablesReducer(): callable private static function unflatten(): callable { - return static fn($value) => [$value]; + return static fn ($value) => [$value]; } public function extract($class): ?string diff --git a/src/Shared/Infrastructure/Bus/Command/CommandNotRegisteredError.php b/src/Shared/Infrastructure/Bus/Command/CommandNotRegisteredError.php index 7d18fd696..90efecda7 100644 --- a/src/Shared/Infrastructure/Bus/Command/CommandNotRegisteredError.php +++ b/src/Shared/Infrastructure/Bus/Command/CommandNotRegisteredError.php @@ -11,9 +11,8 @@ final class CommandNotRegisteredError extends RuntimeException { public function __construct(Command $command) { - $commandClass = get_class($command); + $commandClass = $command::class; parent::__construct("The command <$commandClass> hasn't a command handler associated"); } } - diff --git a/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php b/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php index bd7e659a8..ab94755cc 100644 --- a/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php +++ b/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php @@ -15,7 +15,7 @@ final class InMemorySymfonyCommandBus implements CommandBus { - private MessageBus $bus; + private readonly MessageBus $bus; public function __construct(iterable $commandHandlers) { diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php b/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php index a50ba7db8..cb2e77213 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php @@ -10,7 +10,7 @@ final class DomainEventJsonDeserializer { - public function __construct(private DomainEventMapping $mapping) + public function __construct(private readonly DomainEventMapping $mapping) { } diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php b/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php index 5542a5c7d..956d864bc 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php @@ -29,7 +29,7 @@ public function for(string $name) private function eventsExtractor(): callable { - return fn(array $mapping, DomainEventSubscriber $subscriber) => array_merge( + return fn (array $mapping, DomainEventSubscriber $subscriber) => array_merge( $mapping, reindex( $this->eventNameExtractor(), @@ -40,6 +40,6 @@ private function eventsExtractor(): callable private function eventNameExtractor(): callable { - return static fn(string $eventClass): string => $eventClass::eventName(); + return static fn (string $eventClass): string => $eventClass::eventName(); } } diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php b/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php index ba3e24abb..f456bc573 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php @@ -13,7 +13,7 @@ final class DomainEventSubscriberLocator { - private array $mapping; + private readonly array $mapping; public function __construct(Traversable $mapping) { @@ -30,7 +30,7 @@ public function allSubscribedTo(string $eventClass): array public function withRabbitMqQueueNamed(string $queueName): DomainEventSubscriber|callable { $subscriber = search( - static fn(DomainEventSubscriber $subscriber) => RabbitMqQueueNameFormatter::format($subscriber) === + static fn (DomainEventSubscriber $subscriber) => RabbitMqQueueNameFormatter::format($subscriber) === $queueName, $this->mapping ); diff --git a/src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php b/src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php index 22d9941ef..d894ad23a 100644 --- a/src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php @@ -14,7 +14,7 @@ class InMemorySymfonyEventBus implements EventBus { - private MessageBus $bus; + private readonly MessageBus $bus; public function __construct(iterable $subscribers) { diff --git a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php index 127cc1715..85b3481cc 100644 --- a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php +++ b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php @@ -16,9 +16,9 @@ final class MySqlDoctrineDomainEventsConsumer { - private Connection $connection; + private readonly Connection $connection; - public function __construct(EntityManager $entityManager, private DomainEventMapping $eventMapping) + public function __construct(EntityManager $entityManager, private readonly DomainEventMapping $eventMapping) { $this->connection = $entityManager->getConnection(); } @@ -63,6 +63,6 @@ private function formatDate($stringDate): string private function idExtractor(): callable { - return static fn(array $event): string => "'${event['id']}'"; + return static fn (array $event): string => "'${event['id']}'"; } } diff --git a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php index 003465fbc..77c8e451c 100644 --- a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php @@ -14,7 +14,7 @@ final class MySqlDoctrineEventBus implements EventBus { private const DATABASE_TIMESTAMP_FORMAT = 'Y-m-d H:i:s'; - private Connection $connection; + private readonly Connection $connection; public function __construct(EntityManager $entityManager) { @@ -39,9 +39,9 @@ private function publisher(): callable $this->connection->executeUpdate( <<connection = $connection; } public function configure(string $exchangeName, DomainEventSubscriber ...$subscribers): void @@ -55,7 +52,7 @@ private function queueDeclarator( $exchangeName, $retryExchangeName, $deadLetterExchangeName - ) { + ): void { $queueName = RabbitMqQueueNameFormatter::format($subscriber); $retryQueueName = RabbitMqQueueNameFormatter::formatRetry($subscriber); $deadLetterQueueName = RabbitMqQueueNameFormatter::formatDeadLetter($subscriber); diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php index 2440bbf82..a43fa35d8 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php @@ -17,11 +17,9 @@ final class RabbitMqConnection private static array $exchanges = []; /** @var AMQPQueue[] */ private static array $queues = []; - private array $configuration; - public function __construct(array $configuration) + public function __construct(private readonly array $configuration) { - $this->configuration = $configuration; } public function queue(string $name): AMQPQueue diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php index 16a727eaf..8c007002b 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php @@ -14,35 +14,26 @@ final class RabbitMqDomainEventsConsumer { - private RabbitMqConnection $connection; - private DomainEventJsonDeserializer $deserializer; - private string $exchangeName; - private int $maxRetries; - public function __construct( - RabbitMqConnection $connection, - DomainEventJsonDeserializer $deserializer, - string $exchangeName, - int $maxRetries + private readonly RabbitMqConnection $connection, + private readonly DomainEventJsonDeserializer $deserializer, + private readonly string $exchangeName, + private readonly int $maxRetries ) { - $this->connection = $connection; - $this->deserializer = $deserializer; - $this->exchangeName = $exchangeName; - $this->maxRetries = $maxRetries; } public function consume(callable $subscriber, string $queueName): void { try { $this->connection->queue($queueName)->consume($this->consumer($subscriber)); - } catch (AMQPQueueException $error) { + } catch (AMQPQueueException) { // We don't want to raise an error if there are no messages in the queue } } private function consumer(callable $subscriber): callable { - return function (AMQPEnvelope $envelope, AMQPQueue $queue) use ($subscriber) { + return function (AMQPEnvelope $envelope, AMQPQueue $queue) use ($subscriber): void { $event = $this->deserializer->deserialize($envelope->getBody()); try { diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php index 48c278745..2440afda0 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php @@ -13,18 +13,11 @@ final class RabbitMqEventBus implements EventBus { - private RabbitMqConnection $connection; - private string $exchangeName; - private MySqlDoctrineEventBus $failoverPublisher; - public function __construct( - RabbitMqConnection $connection, - string $exchangeName, - MySqlDoctrineEventBus $failoverPublisher + private readonly RabbitMqConnection $connection, + private readonly string $exchangeName, + private readonly MySqlDoctrineEventBus $failoverPublisher ) { - $this->connection = $connection; - $this->exchangeName = $exchangeName; - $this->failoverPublisher = $failoverPublisher; } public function publish(DomainEvent ...$events): void @@ -34,10 +27,10 @@ public function publish(DomainEvent ...$events): void private function publisher(): callable { - return function (DomainEvent $event) { + return function (DomainEvent $event): void { try { $this->publishEvent($event); - } catch (AMQPException $error) { + } catch (AMQPException) { $this->failoverPublisher->publish($event); } }; diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqQueueNameFormatter.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqQueueNameFormatter.php index 312c31a4b..15bf09e9a 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqQueueNameFormatter.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqQueueNameFormatter.php @@ -13,7 +13,7 @@ final class RabbitMqQueueNameFormatter { public static function format(DomainEventSubscriber $subscriber): string { - $subscriberClassPaths = explode('\\', str_replace('CodelyTv', 'codelytv', get_class($subscriber))); + $subscriberClassPaths = explode('\\', str_replace('CodelyTv', 'codelytv', $subscriber::class)); $queueNameParts = [ $subscriberClassPaths[0], @@ -41,13 +41,13 @@ public static function formatDeadLetter(DomainEventSubscriber $subscriber): stri public static function shortFormat(DomainEventSubscriber $subscriber): string { - $subscriberCamelCaseName = (string) last(explode('\\', get_class($subscriber))); + $subscriberCamelCaseName = (string) last(explode('\\', $subscriber::class)); return Utils::toSnakeCase($subscriberCamelCaseName); } private static function toSnakeCase(): callable { - return static fn(string $text) => Utils::toSnakeCase($text); + return static fn (string $text) => Utils::toSnakeCase($text); } } diff --git a/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php b/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php index 594897b5f..b9e0bb1ab 100644 --- a/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php @@ -11,8 +11,11 @@ final class WithPrometheusMonitoringEventBus implements EventBus { - public function __construct(private PrometheusMonitor $monitor, private string $appName, private EventBus $bus) - { + public function __construct( + private readonly PrometheusMonitor $monitor, + private readonly string $appName, + private readonly EventBus $bus + ) { } public function publish(DomainEvent ...$events): void @@ -24,7 +27,7 @@ public function publish(DomainEvent ...$events): void ['name'] ); - each(fn(DomainEvent $event) => $counter->inc(['name' => $event::eventName()]), $events); + each(fn (DomainEvent $event) => $counter->inc(['name' => $event::eventName()]), $events); $this->bus->publish(...$events); } diff --git a/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBus.php b/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBus.php index 31092cb53..d01b9e105 100644 --- a/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBus.php +++ b/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBus.php @@ -16,7 +16,7 @@ final class InMemorySymfonyQueryBus implements QueryBus { - private MessageBus $bus; + private readonly MessageBus $bus; public function __construct(iterable $queryHandlers) { diff --git a/src/Shared/Infrastructure/Bus/Query/QueryNotRegisteredError.php b/src/Shared/Infrastructure/Bus/Query/QueryNotRegisteredError.php index c7464bf01..9f0d64588 100644 --- a/src/Shared/Infrastructure/Bus/Query/QueryNotRegisteredError.php +++ b/src/Shared/Infrastructure/Bus/Query/QueryNotRegisteredError.php @@ -11,7 +11,7 @@ final class QueryNotRegisteredError extends RuntimeException { public function __construct(Query $query) { - $queryClass = get_class($query); + $queryClass = $query::class; parent::__construct("The query <$queryClass> hasn't a query handler associated"); } diff --git a/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php b/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php index 349295901..e00526007 100644 --- a/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php +++ b/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php @@ -12,7 +12,7 @@ final class DatabaseConnections { - private array $connections; + private readonly array $connections; public function __construct(iterable $connections) { @@ -21,7 +21,7 @@ public function __construct(iterable $connections) public function clear(): void { - each(fn(EntityManager $entityManager) => $entityManager->clear(), $this->connections); + each(fn (EntityManager $entityManager) => $entityManager->clear(), $this->connections); } public function truncate(): void diff --git a/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php b/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php index 498fc2bcb..f5a0cfcde 100644 --- a/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php +++ b/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php @@ -27,8 +27,7 @@ public static function create( bool $isDevMode, string $schemaFile, array $dbalCustomTypesClasses - ): EntityManager - { + ): EntityManager { if ($isDevMode) { static::generateDatabaseIfNotExists($parameters, $schemaFile); } diff --git a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php index 5c3fdc859..1ead42d3e 100644 --- a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php +++ b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php @@ -8,7 +8,7 @@ final class ElasticsearchClient { - public function __construct(private Client $client, private string $indexPrefix) + public function __construct(private readonly Client $client, private readonly string $indexPrefix) { } diff --git a/src/Shared/Infrastructure/Monitoring/PrometheusMonitor.php b/src/Shared/Infrastructure/Monitoring/PrometheusMonitor.php index 562087724..31e2a6adb 100644 --- a/src/Shared/Infrastructure/Monitoring/PrometheusMonitor.php +++ b/src/Shared/Infrastructure/Monitoring/PrometheusMonitor.php @@ -9,7 +9,7 @@ final class PrometheusMonitor { - private CollectorRegistry $registry; + private readonly CollectorRegistry $registry; public function __construct() { diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php index 73a03f66e..40767ac0c 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php @@ -15,9 +15,9 @@ final class DoctrineCriteriaConverter { public function __construct( - private Criteria $criteria, - private array $criteriaToDoctrineFields = [], - private array $hydrators = [] + private readonly Criteria $criteria, + private readonly array $criteriaToDoctrineFields = [], + private readonly array $hydrators = [] ) { } diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php index d6210ee63..7ac1ea13f 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php @@ -10,7 +10,7 @@ abstract class DoctrineRepository { - public function __construct(private EntityManager $entityManager) + public function __construct(private readonly EntityManager $entityManager) { } diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php b/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php index 76df29d11..d9fd8b3ab 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php @@ -17,7 +17,7 @@ abstract protected function typeClassName(): string; public static function customTypeName(): string { - return Utils::toSnakeCase(str_replace('Type', '', last(explode('\\', static::class)))); + return Utils::toSnakeCase(str_replace('Type', '', (string) last(explode('\\', static::class)))); } public function getName(): string diff --git a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php index c6b5a5cd1..1949acdbe 100644 --- a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php +++ b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php @@ -12,7 +12,7 @@ abstract class ElasticsearchRepository { - public function __construct(private ElasticsearchClient $client) + public function __construct(private readonly ElasticsearchClient $client) { } @@ -57,6 +57,6 @@ protected function indexName(): string private function elasticValuesExtractor(): callable { - return static fn(array $elasticValues): array => $elasticValues['_source']; + return static fn (array $elasticValues): array => $elasticValues['_source']; } } diff --git a/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php b/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php index 9d835decb..a365d8c35 100644 --- a/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php +++ b/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php @@ -17,7 +17,7 @@ public function onKernelRequest(RequestEvent $event): void $requestContents = $request->getContent(); if (!empty($requestContents) && $this->containsHeader($request, 'Content-Type', 'application/json')) { - $jsonData = json_decode($requestContents, true); + $jsonData = json_decode($requestContents, true, 512, JSON_THROW_ON_ERROR); if (!$jsonData) { throw new HttpException(Response::HTTP_BAD_REQUEST, 'Invalid json data'); } @@ -25,7 +25,7 @@ public function onKernelRequest(RequestEvent $event): void foreach ($jsonData as $key => $value) { $jsonDataLowerCase[preg_replace_callback( '/_(.)/', - static fn($matches) => strtoupper($matches[1]), + static fn ($matches) => strtoupper($matches[1]), $key )] = $value; } @@ -35,6 +35,6 @@ public function onKernelRequest(RequestEvent $event): void private function containsHeader(Request $request, string $name, string $value): bool { - return str_starts_with($request->headers->get($name), $value); + return str_starts_with((string) $request->headers->get($name), $value); } } diff --git a/src/Shared/Infrastructure/Symfony/ApiController.php b/src/Shared/Infrastructure/Symfony/ApiController.php index 459c3eb6e..ce5a18c76 100644 --- a/src/Shared/Infrastructure/Symfony/ApiController.php +++ b/src/Shared/Infrastructure/Symfony/ApiController.php @@ -14,12 +14,12 @@ abstract class ApiController { public function __construct( - private QueryBus $queryBus, - private CommandBus $commandBus, + private readonly QueryBus $queryBus, + private readonly CommandBus $commandBus, ApiExceptionsHttpStatusCodeMapping $exceptionHandler ) { each( - fn(int $httpCode, string $exceptionClass) => $exceptionHandler->register($exceptionClass, $httpCode), + fn (int $httpCode, string $exceptionClass) => $exceptionHandler->register($exceptionClass, $httpCode), $this->exceptions() ); } diff --git a/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php b/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php index 2ecf6e42f..256d1e71a 100644 --- a/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php +++ b/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php @@ -12,7 +12,7 @@ final class ApiExceptionListener { - public function __construct(private ApiExceptionsHttpStatusCodeMapping $exceptionHandler) + public function __construct(private readonly ApiExceptionsHttpStatusCodeMapping $exceptionHandler) { } @@ -26,7 +26,7 @@ public function onException(ExceptionEvent $event): void 'code' => $this->exceptionCodeFor($exception), 'message' => $exception->getMessage(), ], - $this->exceptionHandler->statusCodeFor(get_class($exception)) + $this->exceptionHandler->statusCodeFor($exception::class) ) ); } diff --git a/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php b/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php index 36083593e..6b4a74093 100644 --- a/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php +++ b/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php @@ -14,7 +14,7 @@ final class BasicHttpAuthMiddleware { - public function __construct(private CommandBus $bus) + public function __construct(private readonly CommandBus $bus) { } diff --git a/src/Shared/Infrastructure/Symfony/WebController.php b/src/Shared/Infrastructure/Symfony/WebController.php index 8d8808b3a..81efc342d 100644 --- a/src/Shared/Infrastructure/Symfony/WebController.php +++ b/src/Shared/Infrastructure/Symfony/WebController.php @@ -17,9 +17,9 @@ abstract class WebController extends ApiController { public function __construct( - private Environment $twig, - private RouterInterface $router, - private RequestStack $requestStack, + private readonly Environment $twig, + private readonly RouterInterface $router, + private readonly RequestStack $requestStack, QueryBus $queryBus, CommandBus $commandBus, ApiExceptionsHttpStatusCodeMapping $exceptionHandler diff --git a/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php b/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php index 3a54c1407..490e9d922 100644 --- a/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php +++ b/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php @@ -27,7 +27,7 @@ public function it_should_search_all_existing_courses(): void $this->elasticRepository()->save($existingCourse); $this->elasticRepository()->save($anotherExistingCourse); - $this->eventually(fn() => $this->assertSimilar($existingCourses, $this->elasticRepository()->searchAll())); + $this->eventually(fn () => $this->assertSimilar($existingCourses, $this->elasticRepository()->searchAll())); } /** @test */ @@ -41,7 +41,7 @@ public function it_should_search_all_existing_courses_with_an_empty_criteria(): $this->elasticRepository()->save($anotherExistingCourse); $this->eventually( - fn() => $this->assertSimilar( + fn () => $this->assertSimilar( $existingCourses, $this->elasticRepository()->matching(CriteriaMother::empty()) ) @@ -63,7 +63,7 @@ public function it_should_filter_by_criteria(): void $this->elasticRepository()->save($intellijCourse); $this->eventually( - fn() => $this->assertSimilar($dddCourses, $this->elasticRepository()->matching($nameContainsDddCriteria)) + fn () => $this->assertSimilar($dddCourses, $this->elasticRepository()->matching($nameContainsDddCriteria)) ); } } diff --git a/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php b/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php index d05637331..ed8e836a4 100644 --- a/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php +++ b/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php @@ -21,7 +21,7 @@ public static function create( return new CoursesCounter( $id ?? CoursesCounterIdMother::create(), $total ?? CoursesCounterTotalMother::create(), - ...count($existingCourses) ? $existingCourses : Repeater::random(fn() => CourseIdMother::create()) + ...count($existingCourses) ? $existingCourses : Repeater::random(fn () => CourseIdMother::create()) ); } diff --git a/tests/Shared/Domain/DuplicatorMother.php b/tests/Shared/Domain/DuplicatorMother.php index 4a74f61c8..2f23565ab 100644 --- a/tests/Shared/Domain/DuplicatorMother.php +++ b/tests/Shared/Domain/DuplicatorMother.php @@ -16,7 +16,7 @@ public static function with($object, array $newParams): mixed $reflection = new ReflectionObject($duplicated); each( - static function (ReflectionProperty $property) use ($duplicated, $newParams) { + static function (ReflectionProperty $property) use ($duplicated, $newParams): void { if (isset($newParams[$property->getName()])) { $property->setAccessible(true); $property->setValue($duplicated, $newParams[$property->getName()]); diff --git a/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php b/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php index cfd5187c2..3586816a1 100644 --- a/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php @@ -40,8 +40,8 @@ public function it_should_raise_an_exception_dispatching_a_non_registered_comman private function commandHandler(): object { - return new class { - public function __invoke(FakeCommand $command) + return new class () { + public function __invoke(FakeCommand $command): void { throw new RuntimeException('This works fine!'); } diff --git a/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php b/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php index 5cf3ff4ab..d2d4457e1 100644 --- a/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php @@ -39,8 +39,8 @@ public function it_should_publish_and_consume_domain_events_from_msql(): void $this->bus->publish($domainEvent, $anotherDomainEvent); $this->consumer->consume( - fn(DomainEvent ...$expectedEvents) => $this->assertContainsEquals($domainEvent, $expectedEvents), - $eventsToConsume = 2 + subscribers: fn (DomainEvent ...$expectedEvents) => $this->assertContainsEquals($domainEvent, $expectedEvents), + eventsToConsume: 2 ); } diff --git a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php index 4e15c5296..310d3ce58 100644 --- a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php +++ b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php @@ -18,7 +18,7 @@ public static function subscribedTo(): array ]; } - public function __invoke(CourseCreatedDomainEvent|CoursesCounterIncrementedDomainEvent $event) + public function __invoke(CourseCreatedDomainEvent|CoursesCounterIncrementedDomainEvent $event): void { } } diff --git a/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php b/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php index 820c6eb3d..48fd55d26 100644 --- a/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php @@ -40,8 +40,8 @@ public function it_should_raise_an_exception_dispatching_a_non_registered_query( private function queryHandler(): object { - return new class { - public function __invoke(FakeQuery $query) + return new class () { + public function __invoke(FakeQuery $query): void { throw new RuntimeException('This works fine!'); } diff --git a/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php b/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php index fdf2b70f5..19058ab66 100644 --- a/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php +++ b/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php @@ -30,7 +30,7 @@ private function truncateDatabaseSql(array $tables): string private function truncateTableSql(): callable { - return fn(array $table): string => sprintf('TRUNCATE TABLE `%s`;', first($table)); + return fn (array $table): string => sprintf('TRUNCATE TABLE `%s`;', first($table)); } private function tables(Connection $connection): array diff --git a/tests/Shared/Infrastructure/Elastic/ElasticDatabaseCleaner.php b/tests/Shared/Infrastructure/Elastic/ElasticDatabaseCleaner.php index 0f318cc6d..651ede7f6 100644 --- a/tests/Shared/Infrastructure/Elastic/ElasticDatabaseCleaner.php +++ b/tests/Shared/Infrastructure/Elastic/ElasticDatabaseCleaner.php @@ -9,12 +9,12 @@ final class ElasticDatabaseCleaner { - public function __invoke(ElasticsearchClient $client) + public function __invoke(ElasticsearchClient $client): void { $indices = $client->client()->cat()->indices(); each( - static function (array $index) use ($client) { + static function (array $index) use ($client): void { $indexName = $index['index']; $client->client()->indices()->delete(['index' => $indexName]); diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php index d0e05d24f..afa3a6f18 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php @@ -38,8 +38,8 @@ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = f private function contains(array $expectedArray, array $actualArray): bool { - $exists = fn(AggregateRoot $expected) => any( - fn(AggregateRoot $actual) => TestUtils::isSimilar($expected, $actual), + $exists = fn (AggregateRoot $expected) => any( + fn (AggregateRoot $actual) => TestUtils::isSimilar($expected, $actual), $actualArray ); diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php index a795b0188..01317fa01 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php @@ -47,7 +47,7 @@ private function aggregateRootsAreSimilar(AggregateRoot $expected, AggregateRoot private function aggregateRootsAreTheSameClass(AggregateRoot $expected, AggregateRoot $actual): bool { - return get_class($expected) === get_class($actual); + return $expected::class === $actual::class; } private function aggregateRootPropertiesAreSimilar(AggregateRoot $expected, AggregateRoot $actual): bool diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php index 3d90627e3..b7dd6773f 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php @@ -38,8 +38,8 @@ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = f private function contains(array $expectedArray, array $actualArray): bool { - $exists = static fn(DomainEvent $expected) => any( - static fn(DomainEvent $actual) => TestUtils::isSimilar($expected, $actual), + $exists = static fn (DomainEvent $expected) => any( + static fn (DomainEvent $actual) => TestUtils::isSimilar($expected, $actual), $actualArray ); diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php index e3f5d3675..48a52274a 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php @@ -46,7 +46,7 @@ private function areSimilar(DomainEvent $expected, DomainEvent $actual): bool private function areTheSameClass(DomainEvent $expected, DomainEvent $actual): bool { - return get_class($expected) === get_class($actual); + return $expected::class === $actual::class; } private function propertiesAreSimilar(DomainEvent $expected, DomainEvent $actual): bool From 38159067018714cb37ab29274a2352d6611f4fb1 Mon Sep 17 00:00:00 2001 From: Quentin Rogeret Date: Mon, 12 Sep 2022 22:38:14 +0200 Subject: [PATCH 10/40] remove non-existent symfony flag (#322) Co-authored-by: Quentin Rogeret --- docker-compose.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index d720f5b1e..19fc0366b 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -67,7 +67,7 @@ services: - shared_rabbitmq - shared_prometheus - backoffice_elasticsearch - command: symfony serve --dir=apps/backoffice/backend/public --port=8040 --force-php-discovery + command: symfony serve --dir=apps/backoffice/backend/public --port=8040 backoffice_frontend_php: container_name: codely-php_ddd_skeleton-backoffice_frontend-php @@ -86,7 +86,7 @@ services: - shared_prometheus - backoffice_elasticsearch - mooc_mysql - command: symfony serve --dir=apps/backoffice/frontend/public --port=8041 --force-php-discovery + command: symfony serve --dir=apps/backoffice/frontend/public --port=8041 mooc_backend_php: container_name: codely-php_ddd_skeleton-mooc_backend-php @@ -104,4 +104,4 @@ services: - shared_rabbitmq - shared_prometheus - mooc_mysql - command: symfony serve --dir=apps/mooc/backend/public --port=8030 --force-php-discovery + command: symfony serve --dir=apps/mooc/backend/public --port=8030 From 52dbdc80ccac9acecb9e974f50c26e60bc4973e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Wed, 27 Sep 2023 13:14:11 +0200 Subject: [PATCH 11/40] chore: upgrade to php 8.2 (#351) * chore: upgrade to php 8.2 * chore: upgrade php cs fixer * chore: upgrade psalm * fix: use {$var} instead of ${var} * fix: downgrade symfony extension Until upgrading to the newest symfony version --- Dockerfile | 16 +- apps/backoffice/backend/public/index.php | 2 +- .../backend/src/BackofficeBackendKernel.php | 1 + .../Courses/CoursesGetController.php | 3 +- .../Controller/Metrics/MetricsController.php | 2 +- apps/backoffice/frontend/public/index.php | 2 +- .../frontend/src/BackofficeFrontendKernel.php | 1 + .../ImportCoursesToElasticsearchCommand.php | 4 +- .../Controller/Metrics/MetricsController.php | 2 +- apps/bootstrap.php | 4 +- apps/mooc/backend/public/index.php | 2 +- .../MySql/ConsumeMySqlDomainEventsCommand.php | 7 +- .../RabbitMq/ConfigureRabbitMqCommand.php | 6 +- .../ConsumeRabbitMqDomainEventsCommand.php | 7 +- ...SupervisorRabbitMqConsumerFilesCommand.php | 3 +- .../HealthCheck/HealthCheckGetController.php | 2 +- .../Controller/Metrics/MetricsController.php | 2 +- apps/mooc/backend/src/MoocBackendKernel.php | 1 + composer.json | 15 +- composer.lock | 3251 +++++++++-------- etc/infrastructure/php/extensions/rabbitmq.sh | 6 - etc/infrastructure/php/extensions/xdebug.sh | 7 - psalm.xml | 6 +- rector.php | 18 + .../Application/Store/DomainEventStorer.php | 4 +- .../Store/StoreDomainEventOnOccurred.php | 4 +- .../Domain/AnalyticsDomainEvent.php | 10 +- .../Domain/AnalyticsDomainEventBody.php | 4 +- .../Authenticate/AuthenticateUserCommand.php | 4 +- .../AuthenticateUserCommandHandler.php | 4 +- .../Authenticate/UserAuthenticator.php | 4 +- src/Backoffice/Auth/Domain/AuthUser.php | 4 +- .../Persistence/InMemoryAuthRepository.php | 1 + .../Application/BackofficeCourseResponse.php | 4 +- .../Create/BackofficeCourseCreator.php | 4 +- .../CreateBackofficeCourseOnCourseCreated.php | 4 +- .../AllBackofficeCoursesSearcher.php | 5 +- ...SearchAllBackofficeCoursesQueryHandler.php | 4 +- .../BackofficeCoursesByCriteriaSearcher.php | 5 +- ...SearchBackofficeCoursesByCriteriaQuery.php | 12 +- ...ackofficeCoursesByCriteriaQueryHandler.php | 4 +- ...lasticsearchBackofficeCourseRepository.php | 1 + ...nMemoryCacheBackofficeCourseRepository.php | 1 + .../Application/Create/CourseCreator.php | 4 +- .../Create/CreateCourseCommand.php | 4 +- .../Create/CreateCourseCommandHandler.php | 4 +- .../Courses/Application/Find/CourseFinder.php | 4 +- .../Application/Update/CourseRenamer.php | 6 +- .../Application/Find/CoursesCounterFinder.php | 4 +- .../Find/CoursesCounterResponse.php | 4 +- .../Find/FindCoursesCounterQueryHandler.php | 4 +- .../Increment/CoursesCounterIncrementer.php | 8 +- ...IncrementCoursesCounterOnCourseCreated.php | 5 +- .../CoursesCounter/Domain/CoursesCounter.php | 1 + .../Persistence/Doctrine/CourseIdsType.php | 1 + .../Doctrine/DbalTypesSearcher.php | 1 + .../Application/Create/CreateVideoCommand.php | 12 +- .../Create/CreateVideoCommandHandler.php | 4 +- .../Application/Create/VideoCreator.php | 4 +- .../Application/Find/FindVideoQuery.php | 4 +- .../Find/FindVideoQueryHandler.php | 1 + .../Videos/Application/Find/VideoResponse.php | 12 +- .../Application/Trim/TrimVideoCommand.php | 4 +- .../Trim/TrimVideoCommandHandler.php | 4 +- .../Application/Update/VideoTitleUpdater.php | 6 +- src/Mooc/Videos/Domain/VideoFinder.php | 4 +- src/Shared/Domain/Collection.php | 4 +- src/Shared/Domain/Criteria/Criteria.php | 10 +- src/Shared/Domain/Criteria/Filter.php | 8 +- src/Shared/Domain/Criteria/Filters.php | 1 + src/Shared/Domain/Criteria/Order.php | 4 +- src/Shared/Domain/SecondsInterval.php | 4 +- src/Shared/Domain/Utils.php | 1 + src/Shared/Domain/ValueObject/Enum.php | 1 + .../Bus/CallableFirstParameterExtractor.php | 1 + .../Bus/Event/DomainEventJsonDeserializer.php | 4 +- .../Bus/Event/DomainEventMapping.php | 1 + .../Event/DomainEventSubscriberLocator.php | 1 + .../MySqlDoctrineDomainEventsConsumer.php | 9 +- .../Bus/Event/MySql/MySqlDoctrineEventBus.php | 1 + .../Bus/Event/RabbitMq/RabbitMqConfigurer.php | 5 +- .../RabbitMq/RabbitMqDomainEventsConsumer.php | 11 +- .../Bus/Event/RabbitMq/RabbitMqEventBus.php | 9 +- .../RabbitMq/RabbitMqQueueNameFormatter.php | 1 + .../WithPrometheusMonitoringEventBus.php | 9 +- .../Doctrine/DatabaseConnections.php | 1 + .../Dbal/DbalCustomTypesRegistrar.php | 1 + .../Doctrine/DoctrineEntityManagerFactory.php | 1 + .../Elasticsearch/ElasticsearchClient.php | 4 +- .../Infrastructure/Logger/MonologLogger.php | 4 +- .../Monitoring/PrometheusMonitor.php | 4 +- .../Doctrine/DoctrineCriteriaConverter.php | 8 +- .../Persistence/Doctrine/UuidType.php | 1 + .../ElasticsearchCriteriaConverter.php | 1 + .../Elasticsearch/ElasticsearchRepository.php | 1 + .../Symfony/AddJsonBodyToRequestListener.php | 2 +- .../Infrastructure/Symfony/ApiController.php | 1 + .../Symfony/ApiExceptionListener.php | 4 +- .../ApiExceptionsHttpStatusCodeMapping.php | 1 + .../Symfony/BasicHttpAuthMiddleware.php | 4 +- .../Auth/AuthModuleUnitTestCase.php | 4 +- .../PhpUnit/BackofficeEnvironmentArranger.php | 3 +- .../Courses/CoursesModuleUnitTestCase.php | 4 +- .../CoursesCounterModuleUnitTestCase.php | 4 +- .../PhpUnit/MoocEnvironmentArranger.php | 3 +- tests/Shared/Domain/DuplicatorMother.php | 1 + tests/Shared/Domain/IntegerMother.php | 2 +- tests/Shared/Domain/MotherCreator.php | 4 +- tests/Shared/Domain/RandomElementPicker.php | 2 +- .../Infrastructure/Behat/ApiContext.php | 8 +- .../Behat/ApplicationFeatureContext.php | 2 +- .../Command/InMemorySymfonyCommandBusTest.php | 2 +- .../Event/RabbitMq/RabbitMqEventBusTest.php | 14 +- .../Infrastructure/Bus/Query/FakeResponse.php | 2 +- .../Bus/Query/InMemorySymfonyQueryBusTest.php | 2 +- .../Doctrine/MySqlDatabaseCleaner.php | 1 + .../Elastic/ElasticDatabaseCleaner.php | 1 + .../Shared/Infrastructure/Mink/MinkHelper.php | 2 +- .../Mink/MinkSessionRequestHelper.php | 4 +- .../Mockery/CodelyTvMatcherIsSimilar.php | 4 +- .../AggregateRootArraySimilarComparator.php | 3 +- .../DomainEventArraySimilarComparator.php | 3 +- .../CodelyTvConstraintIsSimilar.php | 3 +- .../PhpUnit/InfrastructureTestCase.php | 2 +- .../Infrastructure/PhpUnit/UnitTestCase.php | 8 +- 125 files changed, 2045 insertions(+), 1724 deletions(-) delete mode 100644 etc/infrastructure/php/extensions/rabbitmq.sh delete mode 100644 etc/infrastructure/php/extensions/xdebug.sh create mode 100644 rector.php diff --git a/Dockerfile b/Dockerfile index 5e677d79f..2487c2e17 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,12 @@ -FROM php:8.1.6-fpm-alpine +FROM php:8.2-fpm-alpine WORKDIR /app -RUN wget https://github.com/FriendsOfPHP/pickle/releases/download/v0.7.9/pickle.phar \ +RUN wget https://github.com/FriendsOfPHP/pickle/releases/download/v0.7.11/pickle.phar \ && mv pickle.phar /usr/local/bin/pickle \ && chmod +x /usr/local/bin/pickle RUN apk --update upgrade \ - && apk add --no-cache autoconf automake make gcc g++ bash icu-dev libzip-dev rabbitmq-c rabbitmq-c-dev \ + && apk add --no-cache autoconf automake make gcc g++ bash icu-dev libzip-dev rabbitmq-c rabbitmq-c-dev linux-headers \ && docker-php-ext-install -j$(nproc) \ bcmath \ opcache \ @@ -14,13 +14,9 @@ RUN apk --update upgrade \ zip \ pdo_mysql -RUN pickle install apcu@5.1.21 - -ADD etc/infrastructure/php/extensions/rabbitmq.sh /root/install-rabbitmq.sh -ADD etc/infrastructure/php/extensions/xdebug.sh /root/install-xdebug.sh -RUN apk add git -RUN sh /root/install-rabbitmq.sh -RUN sh /root/install-xdebug.sh +RUN pickle install apcu@5.1.22 +RUN pickle install amqp@2.1.0 +RUN pickle install xdebug@3.2.2 RUN docker-php-ext-enable \ amqp \ diff --git a/apps/backoffice/backend/public/index.php b/apps/backoffice/backend/public/index.php index 8c109ee2d..c8cc58db9 100644 --- a/apps/backoffice/backend/public/index.php +++ b/apps/backoffice/backend/public/index.php @@ -14,7 +14,7 @@ if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? $_ENV['TRUSTED_PROXIES'] ?? false) { Request::setTrustedProxies( - explode(',', $trustedProxies), + explode(',', (string) $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST ); } diff --git a/apps/backoffice/backend/src/BackofficeBackendKernel.php b/apps/backoffice/backend/src/BackofficeBackendKernel.php index 25c8aa935..aa828f9f8 100644 --- a/apps/backoffice/backend/src/BackofficeBackendKernel.php +++ b/apps/backoffice/backend/src/BackofficeBackendKernel.php @@ -9,6 +9,7 @@ use Symfony\Component\Config\Resource\FileResource; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Kernel; + use function dirname; final class BackofficeBackendKernel extends Kernel diff --git a/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php b/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php index 7b1570dbb..3819852df 100644 --- a/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php +++ b/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php @@ -10,9 +10,10 @@ use CodelyTv\Shared\Domain\Bus\Query\QueryBus; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; + use function Lambdish\Phunctional\map; -final class CoursesGetController +final readonly class CoursesGetController { public function __construct(private QueryBus $queryBus) { diff --git a/apps/backoffice/backend/src/Controller/Metrics/MetricsController.php b/apps/backoffice/backend/src/Controller/Metrics/MetricsController.php index 6326b58fb..a4fced07a 100644 --- a/apps/backoffice/backend/src/Controller/Metrics/MetricsController.php +++ b/apps/backoffice/backend/src/Controller/Metrics/MetricsController.php @@ -9,7 +9,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -final class MetricsController +final readonly class MetricsController { public function __construct(private PrometheusMonitor $monitor) { diff --git a/apps/backoffice/frontend/public/index.php b/apps/backoffice/frontend/public/index.php index af90aac44..f8510243a 100644 --- a/apps/backoffice/frontend/public/index.php +++ b/apps/backoffice/frontend/public/index.php @@ -14,7 +14,7 @@ if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? $_ENV['TRUSTED_PROXIES'] ?? false) { Request::setTrustedProxies( - explode(',', $trustedProxies), + explode(',', (string) $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST ); } diff --git a/apps/backoffice/frontend/src/BackofficeFrontendKernel.php b/apps/backoffice/frontend/src/BackofficeFrontendKernel.php index 2b5e5247b..9413df568 100644 --- a/apps/backoffice/frontend/src/BackofficeFrontendKernel.php +++ b/apps/backoffice/frontend/src/BackofficeFrontendKernel.php @@ -9,6 +9,7 @@ use Symfony\Component\Config\Resource\FileResource; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Kernel; + use function dirname; final class BackofficeFrontendKernel extends Kernel diff --git a/apps/backoffice/frontend/src/Command/ImportCoursesToElasticsearchCommand.php b/apps/backoffice/frontend/src/Command/ImportCoursesToElasticsearchCommand.php index 21bc0f4c6..62948247d 100644 --- a/apps/backoffice/frontend/src/Command/ImportCoursesToElasticsearchCommand.php +++ b/apps/backoffice/frontend/src/Command/ImportCoursesToElasticsearchCommand.php @@ -13,8 +13,8 @@ final class ImportCoursesToElasticsearchCommand extends Command { public function __construct( - private MySqlBackofficeCourseRepository $mySqlRepository, - private ElasticsearchBackofficeCourseRepository $elasticRepository + private readonly MySqlBackofficeCourseRepository $mySqlRepository, + private readonly ElasticsearchBackofficeCourseRepository $elasticRepository ) { parent::__construct(); } diff --git a/apps/backoffice/frontend/src/Controller/Metrics/MetricsController.php b/apps/backoffice/frontend/src/Controller/Metrics/MetricsController.php index 0b194cf1d..1e00d4893 100644 --- a/apps/backoffice/frontend/src/Controller/Metrics/MetricsController.php +++ b/apps/backoffice/frontend/src/Controller/Metrics/MetricsController.php @@ -9,7 +9,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -final class MetricsController +final readonly class MetricsController { public function __construct(private PrometheusMonitor $monitor) { diff --git a/apps/bootstrap.php b/apps/bootstrap.php index f9717d54c..1c3488ac1 100644 --- a/apps/bootstrap.php +++ b/apps/bootstrap.php @@ -10,7 +10,7 @@ // Run "composer dump-env prod" to create it (requires symfony/flex >=1.2) if (is_array($env = @include $rootPath . '/.env.local.php')) { foreach ($env as $k => $v) { - $_ENV[$k] = $_ENV[$k] ?? (isset($_SERVER[$k]) && str_starts_with($k, 'HTTP_') ? $_SERVER[$k] : $v); + $_ENV[$k] ??= isset($_SERVER[$k]) && str_starts_with($k, 'HTTP_') ? $_SERVER[$k] : $v; } } elseif (!class_exists(Dotenv::class)) { throw new RuntimeException( @@ -23,6 +23,6 @@ $_SERVER += $_ENV; $_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = ($_SERVER['APP_ENV'] ?? $_ENV['APP_ENV'] ?? null) ?: 'dev'; -$_SERVER['APP_DEBUG'] = $_SERVER['APP_DEBUG'] ?? $_ENV['APP_DEBUG'] ?? 'prod' !== $_SERVER['APP_ENV']; +$_SERVER['APP_DEBUG'] ??= $_ENV['APP_DEBUG'] ?? 'prod' !== $_SERVER['APP_ENV']; $_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = (int) $_SERVER['APP_DEBUG'] || filter_var($_SERVER['APP_DEBUG'], FILTER_VALIDATE_BOOLEAN) ? '1' : '0'; diff --git a/apps/mooc/backend/public/index.php b/apps/mooc/backend/public/index.php index 9d02406aa..d3de27b72 100644 --- a/apps/mooc/backend/public/index.php +++ b/apps/mooc/backend/public/index.php @@ -14,7 +14,7 @@ if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? $_ENV['TRUSTED_PROXIES'] ?? false) { Request::setTrustedProxies( - explode(',', $trustedProxies), + explode(',', (string) $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST ); } diff --git a/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php b/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php index 69aeaff18..5ce3765b6 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php @@ -12,6 +12,7 @@ use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; + use function Lambdish\Phunctional\pipe; final class ConsumeMySqlDomainEventsCommand extends Command @@ -19,9 +20,9 @@ final class ConsumeMySqlDomainEventsCommand extends Command protected static $defaultName = 'codelytv:domain-events:mysql:consume'; public function __construct( - private MySqlDoctrineDomainEventsConsumer $consumer, - private DatabaseConnections $connections, - private DomainEventSubscriberLocator $subscriberLocator + private readonly MySqlDoctrineDomainEventsConsumer $consumer, + private readonly DatabaseConnections $connections, + private readonly DomainEventSubscriberLocator $subscriberLocator ) { parent::__construct(); } diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php index 3055c60a6..876cda3b3 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php @@ -15,9 +15,9 @@ final class ConfigureRabbitMqCommand extends Command protected static $defaultName = 'codelytv:domain-events:rabbitmq:configure'; public function __construct( - private RabbitMqConfigurer $configurer, - private string $exchangeName, - private Traversable $subscribers + private readonly RabbitMqConfigurer $configurer, + private readonly string $exchangeName, + private readonly Traversable $subscribers ) { parent::__construct(); } diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php index 4fcd6d403..49a32a533 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php @@ -11,6 +11,7 @@ use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; + use function Lambdish\Phunctional\repeat; final class ConsumeRabbitMqDomainEventsCommand extends Command @@ -18,9 +19,9 @@ final class ConsumeRabbitMqDomainEventsCommand extends Command protected static $defaultName = 'codelytv:domain-events:rabbitmq:consume'; public function __construct( - private RabbitMqDomainEventsConsumer $consumer, - private DatabaseConnections $connections, - private DomainEventSubscriberLocator $locator + private readonly RabbitMqDomainEventsConsumer $consumer, + private readonly DatabaseConnections $connections, + private readonly DomainEventSubscriberLocator $locator ) { parent::__construct(); } diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php index 3fd739cbf..fcf4c5ba7 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php @@ -11,6 +11,7 @@ use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; + use function Lambdish\Phunctional\each; final class GenerateSupervisorRabbitMqConsumerFilesCommand extends Command @@ -20,7 +21,7 @@ final class GenerateSupervisorRabbitMqConsumerFilesCommand extends Command private const SUPERVISOR_PATH = __DIR__ . '/../../../../build/supervisor'; protected static $defaultName = 'codelytv:domain-events:rabbitmq:generate-supervisor-files'; - public function __construct(private DomainEventSubscriberLocator $locator) + public function __construct(private readonly DomainEventSubscriberLocator $locator) { parent::__construct(); } diff --git a/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php b/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php index 82c30e36f..c69c0fd70 100644 --- a/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php +++ b/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php @@ -8,7 +8,7 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; -final class HealthCheckGetController +final readonly class HealthCheckGetController { public function __construct(private RandomNumberGenerator $generator) { diff --git a/apps/mooc/backend/src/Controller/Metrics/MetricsController.php b/apps/mooc/backend/src/Controller/Metrics/MetricsController.php index 32428afd7..905cc6e7e 100644 --- a/apps/mooc/backend/src/Controller/Metrics/MetricsController.php +++ b/apps/mooc/backend/src/Controller/Metrics/MetricsController.php @@ -9,7 +9,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -final class MetricsController +final readonly class MetricsController { public function __construct(private PrometheusMonitor $monitor) { diff --git a/apps/mooc/backend/src/MoocBackendKernel.php b/apps/mooc/backend/src/MoocBackendKernel.php index 4ae0b228b..06e0ec90d 100644 --- a/apps/mooc/backend/src/MoocBackendKernel.php +++ b/apps/mooc/backend/src/MoocBackendKernel.php @@ -9,6 +9,7 @@ use Symfony\Component\Config\Resource\FileResource; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Kernel; + use function dirname; final class MoocBackendKernel extends Kernel diff --git a/composer.json b/composer.json index ea800fcce..83d77b034 100644 --- a/composer.json +++ b/composer.json @@ -4,7 +4,7 @@ "type": "project", "description": "An example project applying Domain-Driven Design, Hexagonal Architecture and CQRS in a Monorepository", "require": { - "php": "^8.1", + "php": "^8.2", "ext-amqp": "*", "ext-apcu": "*", @@ -40,10 +40,10 @@ "roave/security-advisories": "dev-master", - "behat/behat": "^3", - "friends-of-behat/mink-extension": "^2", - "friends-of-behat/symfony-extension": "^2", - "behat/mink-browserkit-driver": "^2", + "behat/behat": "^3.13", + "friends-of-behat/mink-extension": "2.6.1", + "friends-of-behat/symfony-extension": "2.3.1", + "behat/mink-browserkit-driver": "2.1.0", "phpunit/phpunit": "^9", "mockery/mockery": "^1", @@ -51,8 +51,9 @@ "fakerphp/faker": "^1", "symfony/error-handler": "^6", - "vimeo/psalm": "^4", - "friendsofphp/php-cs-fixer": "^3.8" + "vimeo/psalm": "^5.15", + "friendsofphp/php-cs-fixer": "^3", + "rector/rector": "^0.18.4" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index f12724bfe..7ededf775 100644 --- a/composer.lock +++ b/composer.lock @@ -4,30 +4,29 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c096ab9ab7ca0c43b0244f7dcbb55400", + "content-hash": "edaf2180f50e9c9bd8f7524b0844e9ee", "packages": [ { "name": "brick/math", - "version": "0.9.3", + "version": "0.11.0", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae" + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae", - "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae", + "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", "shasum": "" }, "require": { - "ext-json": "*", - "php": "^7.1 || ^8.0" + "php": "^8.0" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", - "vimeo/psalm": "4.9.2" + "phpunit/phpunit": "^9.0", + "vimeo/psalm": "5.0.0" }, "type": "library", "autoload": { @@ -52,19 +51,15 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.9.3" + "source": "https://github.com/brick/math/tree/0.11.0" }, "funding": [ { "url": "https://github.com/BenMorel", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/brick/math", - "type": "tidelift" } ], - "time": "2021-08-15T20:50:18+00:00" + "time": "2023-01-15T23:15:59+00:00" }, { "name": "doctrine/cache", @@ -161,31 +156,34 @@ }, { "name": "doctrine/collections", - "version": "1.6.8", + "version": "2.1.3", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "1958a744696c6bb3bb0d28db2611dc11610e78af" + "reference": "3023e150f90a38843856147b58190aa8b46cc155" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/1958a744696c6bb3bb0d28db2611dc11610e78af", - "reference": "1958a744696c6bb3bb0d28db2611dc11610e78af", + "url": "https://api.github.com/repos/doctrine/collections/zipball/3023e150f90a38843856147b58190aa8b46cc155", + "reference": "3023e150f90a38843856147b58190aa8b46cc155", "shasum": "" }, "require": { - "php": "^7.1.3 || ^8.0" + "doctrine/deprecations": "^1", + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.1.5", - "vimeo/psalm": "^4.2.1" + "doctrine/coding-standard": "^10.0", + "ext-json": "*", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^5.11" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" + "Doctrine\\Common\\Collections\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -224,22 +222,36 @@ ], "support": { "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/1.6.8" + "source": "https://github.com/doctrine/collections/tree/2.1.3" }, - "time": "2021-08-10T18:51:53+00:00" + "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%2Fcollections", + "type": "tidelift" + } + ], + "time": "2023-07-06T15:15:36+00:00" }, { "name": "doctrine/common", - "version": "3.3.0", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "c824e95d4c83b7102d8bc60595445a6f7d540f96" + "reference": "8b5e5650391f851ed58910b3e3d48a71062eeced" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/c824e95d4c83b7102d8bc60595445a6f7d540f96", - "reference": "c824e95d4c83b7102d8bc60595445a6f7d540f96", + "url": "https://api.github.com/repos/doctrine/common/zipball/8b5e5650391f851ed58910b3e3d48a71062eeced", + "reference": "8b5e5650391f851ed58910b3e3d48a71062eeced", "shasum": "" }, "require": { @@ -247,18 +259,19 @@ "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9.0", + "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": "^4.0.5", + "symfony/phpunit-bridge": "^6.1", "vimeo/psalm": "^4.4" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" + "Doctrine\\Common\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -300,7 +313,7 @@ ], "support": { "issues": "https://github.com/doctrine/common/issues", - "source": "https://github.com/doctrine/common/tree/3.3.0" + "source": "https://github.com/doctrine/common/tree/3.4.3" }, "funding": [ { @@ -316,42 +329,44 @@ "type": "tidelift" } ], - "time": "2022-02-05T18:28:51+00:00" + "time": "2022-10-09T11:47:59+00:00" }, { "name": "doctrine/dbal", - "version": "3.3.6", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "9e7f76dd1cde81c62574fdffa5a9c655c847ad21" + "reference": "00d03067f07482f025d41ab55e4ba0db5eca2cdf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/9e7f76dd1cde81c62574fdffa5a9c655c847ad21", - "reference": "9e7f76dd1cde81c62574fdffa5a9c655c847ad21", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/00d03067f07482f025d41ab55e4ba0db5eca2cdf", + "reference": "00d03067f07482f025d41ab55e4ba0db5eca2cdf", "shasum": "" }, "require": { "composer-runtime-api": "^2", "doctrine/cache": "^1.11|^2.0", "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1.0", - "php": "^7.3 || ^8.0", + "doctrine/event-manager": "^1|^2", + "php": "^7.4 || ^8.0", "psr/cache": "^1|^2|^3", "psr/log": "^1|^2|^3" }, "require-dev": { - "doctrine/coding-standard": "9.0.0", - "jetbrains/phpstorm-stubs": "2022.1", - "phpstan/phpstan": "1.6.3", - "phpstan/phpstan-strict-rules": "^1.2", - "phpunit/phpunit": "9.5.20", - "psalm/plugin-phpunit": "0.16.1", - "squizlabs/php_codesniffer": "3.6.2", - "symfony/cache": "^5.2|^6.0", - "symfony/console": "^2.7|^3.0|^4.0|^5.0|^6.0", - "vimeo/psalm": "4.23.0" + "doctrine/coding-standard": "12.0.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2023.1", + "phpstan/phpstan": "1.10.35", + "phpstan/phpstan-strict-rules": "^1.5", + "phpunit/phpunit": "9.6.13", + "psalm/plugin-phpunit": "0.18.4", + "slevomat/coding-standard": "8.13.1", + "squizlabs/php_codesniffer": "3.7.2", + "symfony/cache": "^5.4|^6.0", + "symfony/console": "^4.4|^5.4|^6.0", + "vimeo/psalm": "4.30.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -411,7 +426,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.3.6" + "source": "https://github.com/doctrine/dbal/tree/3.7.0" }, "funding": [ { @@ -427,29 +442,33 @@ "type": "tidelift" } ], - "time": "2022-05-02T17:21:01+00:00" + "time": "2023-09-26T20:56:55+00:00" }, { "name": "doctrine/deprecations", - "version": "v1.0.0", + "version": "v1.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" + "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", + "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", "shasum": "" }, "require": { - "php": "^7.1|^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5|^8.5|^9.5", - "psr/log": "^1|^2|^3" + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -468,43 +487,40 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" + "source": "https://github.com/doctrine/deprecations/tree/v1.1.1" }, - "time": "2022-05-02T15:47:09+00:00" + "time": "2023-06-03T09:27:29+00:00" }, { "name": "doctrine/event-manager", - "version": "1.1.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f" + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32", + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "conflict": { - "doctrine/common": "<2.9@dev" + "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpunit/phpunit": "^7.0" + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.8", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.28" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" + "Doctrine\\Common\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -548,7 +564,7 @@ ], "support": { "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.1.x" + "source": "https://github.com/doctrine/event-manager/tree/2.0.0" }, "funding": [ { @@ -564,32 +580,32 @@ "type": "tidelift" } ], - "time": "2020-05-29T18:28:51+00:00" + "time": "2022-10-12T20:59:15+00:00" }, { "name": "doctrine/inflector", - "version": "2.0.4", + "version": "2.0.8", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89" + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", - "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "vimeo/psalm": "^4.10" + "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" }, "type": "library", "autoload": { @@ -639,7 +655,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.4" + "source": "https://github.com/doctrine/inflector/tree/2.0.8" }, "funding": [ { @@ -655,34 +671,34 @@ "type": "tidelift" } ], - "time": "2021-10-22T20:16:43+00:00" + "time": "2023-06-16T13:40:37+00:00" }, { "name": "doctrine/instantiator", - "version": "1.4.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9", + "doctrine/coding-standard": "^11", "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.22" + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" }, "type": "library", "autoload": { @@ -709,7 +725,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" }, "funding": [ { @@ -725,35 +741,37 @@ "type": "tidelift" } ], - "time": "2022-03-03T08:28:38+00:00" + "time": "2022-12-30T00:23:10+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.3", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", "shasum": "" }, "require": { + "doctrine/deprecations": "^1.0", "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9.0", + "doctrine/coding-standard": "^9 || ^10", "phpstan/phpstan": "^1.3", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.11" + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.11 || ^5.0" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + "Doctrine\\Common\\Lexer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -785,7 +803,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.3" + "source": "https://github.com/doctrine/lexer/tree/2.1.0" }, "funding": [ { @@ -801,57 +819,59 @@ "type": "tidelift" } ], - "time": "2022-02-28T11:07:21+00:00" + "time": "2022-12-14T08:49:07+00:00" }, { "name": "doctrine/orm", - "version": "2.12.2", + "version": "2.16.2", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "8291a7f09b12d14783ed6537b4586583d155869e" + "reference": "17500f56eaa930f5cd14d765bc2cd851c7d37cc0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/8291a7f09b12d14783ed6537b4586583d155869e", - "reference": "8291a7f09b12d14783ed6537b4586583d155869e", + "url": "https://api.github.com/repos/doctrine/orm/zipball/17500f56eaa930f5cd14d765bc2cd851c7d37cc0", + "reference": "17500f56eaa930f5cd14d765bc2cd851c7d37cc0", "shasum": "" }, "require": { "composer-runtime-api": "^2", "doctrine/cache": "^1.12.1 || ^2.1.1", - "doctrine/collections": "^1.5", + "doctrine/collections": "^1.5 || ^2.1", "doctrine/common": "^3.0.3", "doctrine/dbal": "^2.13.1 || ^3.2", "doctrine/deprecations": "^0.5.3 || ^1", - "doctrine/event-manager": "^1.1", + "doctrine/event-manager": "^1.2 || ^2", "doctrine/inflector": "^1.4 || ^2.0", - "doctrine/instantiator": "^1.3", - "doctrine/lexer": "^1.2.3", + "doctrine/instantiator": "^1.3 || ^2", + "doctrine/lexer": "^2", "doctrine/persistence": "^2.4 || ^3", "ext-ctype": "*", "php": "^7.1 || ^8.0", "psr/cache": "^1 || ^2 || ^3", - "symfony/console": "^3.0 || ^4.0 || ^5.0 || ^6.0", + "symfony/console": "^4.2 || ^5.0 || ^6.0", "symfony/polyfill-php72": "^1.23", "symfony/polyfill-php80": "^1.16" }, "conflict": { - "doctrine/annotations": "<1.13 || >= 2.0" + "doctrine/annotations": "<1.13 || >= 3.0" }, "require-dev": { - "doctrine/annotations": "^1.13", - "doctrine/coding-standard": "^9.0", + "doctrine/annotations": "^1.13 || ^2", + "doctrine/coding-standard": "^9.0.2 || ^12.0", "phpbench/phpbench": "^0.16.10 || ^1.0", - "phpstan/phpstan": "~1.4.10 || 1.6.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "phpstan/phpstan": "~1.4.10 || 1.10.28", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", "psr/log": "^1 || ^2 || ^3", - "squizlabs/php_codesniffer": "3.6.2", + "squizlabs/php_codesniffer": "3.7.2", "symfony/cache": "^4.4 || ^5.4 || ^6.0", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2", "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0", - "vimeo/psalm": "4.23.0" + "vimeo/psalm": "4.30.0 || 5.14.1" }, "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" }, @@ -898,45 +918,42 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.12.2" + "source": "https://github.com/doctrine/orm/tree/2.16.2" }, - "time": "2022-05-02T19:10:07+00:00" + "time": "2023-08-27T18:21:56+00:00" }, { "name": "doctrine/persistence", - "version": "3.0.2", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "25ec98a8cbd1f850e60fdb62c0ef77c162da8704" + "reference": "63fee8c33bef740db6730eb2a750cd3da6495603" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/25ec98a8cbd1f850e60fdb62c0ef77c162da8704", - "reference": "25ec98a8cbd1f850e60fdb62c0ef77c162da8704", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/63fee8c33bef740db6730eb2a750cd3da6495603", + "reference": "63fee8c33bef740db6730eb2a750cd3da6495603", "shasum": "" }, "require": { - "doctrine/collections": "^1.0", - "doctrine/event-manager": "^1.0", + "doctrine/event-manager": "^1 || ^2", "php": "^7.2 || ^8.0", "psr/cache": "^1.0 || ^2.0 || ^3.0" }, "conflict": { - "doctrine/annotations": "<1.7 || >=2.0", "doctrine/common": "<2.10" }, "require-dev": { "composer/package-versions-deprecated": "^1.11", - "doctrine/annotations": "^1.7", - "doctrine/coding-standard": "^9.0", + "doctrine/coding-standard": "^11", "doctrine/common": "^3.0", - "phpstan/phpstan": "1.5.0", + "phpstan/phpstan": "1.9.4", "phpstan/phpstan-phpunit": "^1", "phpstan/phpstan-strict-rules": "^1.1", "phpunit/phpunit": "^8.5 || ^9.5", "symfony/cache": "^4.4 || ^5.4 || ^6.0", - "vimeo/psalm": "4.22.0" + "vimeo/psalm": "4.30.0 || 5.3.0" }, "type": "library", "autoload": { @@ -985,7 +1002,7 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/3.0.2" + "source": "https://github.com/doctrine/persistence/tree/3.2.0" }, "funding": [ { @@ -1001,20 +1018,20 @@ "type": "tidelift" } ], - "time": "2022-05-06T06:10:05+00:00" + "time": "2023-05-17T18:32:04+00:00" }, { "name": "elasticsearch/elasticsearch", - "version": "v7.17.0", + "version": "v7.17.2", "source": { "type": "git", - "url": "https://github.com/elastic/elasticsearch-php.git", - "reference": "1890f9d7fde076b5a3ddcf579a802af05b2e781b" + "url": "git@github.com:elastic/elasticsearch-php.git", + "reference": "2d302233f2bb0926812d82823bb820d405e130fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/1890f9d7fde076b5a3ddcf579a802af05b2e781b", - "reference": "1890f9d7fde076b5a3ddcf579a802af05b2e781b", + "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/2d302233f2bb0926812d82823bb820d405e130fc", + "reference": "2d302233f2bb0926812d82823bb820d405e130fc", "shasum": "" }, "require": { @@ -1027,7 +1044,7 @@ "ext-yaml": "*", "ext-zip": "*", "mockery/mockery": "^1.2", - "phpstan/phpstan": "^0.12", + "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.3", "squizlabs/php_codesniffer": "^3.4", "symfony/finder": "~4.0" @@ -1064,11 +1081,7 @@ "elasticsearch", "search" ], - "support": { - "issues": "https://github.com/elastic/elasticsearch-php/issues", - "source": "https://github.com/elastic/elasticsearch-php/tree/v7.17.0" - }, - "time": "2022-02-03T13:40:04+00:00" + "time": "2023-04-21T15:31:12+00:00" }, { "name": "endclothing/prometheus_client_php", @@ -1121,23 +1134,23 @@ }, { "name": "ezimuel/guzzlestreams", - "version": "3.0.1", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/ezimuel/guzzlestreams.git", - "reference": "abe3791d231167f14eb80d413420d1eab91163a8" + "reference": "b4b5a025dfee70d6cd34c780e07330eb93d5b997" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezimuel/guzzlestreams/zipball/abe3791d231167f14eb80d413420d1eab91163a8", - "reference": "abe3791d231167f14eb80d413420d1eab91163a8", + "url": "https://api.github.com/repos/ezimuel/guzzlestreams/zipball/b4b5a025dfee70d6cd34c780e07330eb93d5b997", + "reference": "b4b5a025dfee70d6cd34c780e07330eb93d5b997", "shasum": "" }, "require": { "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "~9.0" }, "type": "library", "extra": { @@ -1168,22 +1181,22 @@ "stream" ], "support": { - "source": "https://github.com/ezimuel/guzzlestreams/tree/3.0.1" + "source": "https://github.com/ezimuel/guzzlestreams/tree/3.1.0" }, - "time": "2020-02-14T23:11:50+00:00" + "time": "2022-10-24T12:58:50+00:00" }, { "name": "ezimuel/ringphp", - "version": "1.2.0", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/ezimuel/ringphp.git", - "reference": "92b8161404ab1ad84059ebed41d9f757e897ce74" + "reference": "7887fc8488013065f72f977dcb281994f5fde9f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezimuel/ringphp/zipball/92b8161404ab1ad84059ebed41d9f757e897ce74", - "reference": "92b8161404ab1ad84059ebed41d9f757e897ce74", + "url": "https://api.github.com/repos/ezimuel/ringphp/zipball/7887fc8488013065f72f977dcb281994f5fde9f4", + "reference": "7887fc8488013065f72f977dcb281994f5fde9f4", "shasum": "" }, "require": { @@ -1225,28 +1238,28 @@ ], "description": "Fork of guzzle/RingPHP (abandoned) to be used with elasticsearch-php", "support": { - "source": "https://github.com/ezimuel/ringphp/tree/1.2.0" + "source": "https://github.com/ezimuel/ringphp/tree/1.2.2" }, - "time": "2021-11-16T11:51:30+00:00" + "time": "2022-12-07T11:28:53+00:00" }, { "name": "friendsofphp/proxy-manager-lts", - "version": "v1.0.12", + "version": "v1.0.16", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git", - "reference": "8419f0158715b30d4b99a5bd37c6a39671994ad7" + "reference": "ecadbdc9052e4ad08c60c8a02268712e50427f7c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/8419f0158715b30d4b99a5bd37c6a39671994ad7", - "reference": "8419f0158715b30d4b99a5bd37c6a39671994ad7", + "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/ecadbdc9052e4ad08c60c8a02268712e50427f7c", + "reference": "ecadbdc9052e4ad08c60c8a02268712e50427f7c", "shasum": "" }, "require": { "laminas/laminas-code": "~3.4.1|^4.0", "php": ">=7.1", - "symfony/filesystem": "^4.4.17|^5.0|^6.0" + "symfony/filesystem": "^4.4.17|^5.0|^6.0|^7.0" }, "conflict": { "laminas/laminas-stdlib": "<3.2.1", @@ -1257,7 +1270,7 @@ }, "require-dev": { "ext-phar": "*", - "symfony/phpunit-bridge": "^5.4|^6.0" + "symfony/phpunit-bridge": "^5.4|^6.0|^7.0" }, "type": "library", "extra": { @@ -1297,7 +1310,7 @@ ], "support": { "issues": "https://github.com/FriendsOfPHP/proxy-manager-lts/issues", - "source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.12" + "source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.16" }, "funding": [ { @@ -1309,28 +1322,28 @@ "type": "tidelift" } ], - "time": "2022-05-05T09:31:05+00:00" + "time": "2023-05-24T07:17:17+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "6.5.7", + "version": "6.5.8", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "724562fa861e21a4071c652c8a159934e4f05592" + "reference": "a52f0440530b54fa079ce76e8c5d196a42cad981" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/724562fa861e21a4071c652c8a159934e4f05592", - "reference": "724562fa861e21a4071c652c8a159934e4f05592", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a52f0440530b54fa079ce76e8c5d196a42cad981", + "reference": "a52f0440530b54fa079ce76e8c5d196a42cad981", "shasum": "" }, "require": { "ext-json": "*", "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", + "guzzlehttp/psr7": "^1.9", "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.17.0" + "symfony/polyfill-intl-idn": "^1.17" }, "require-dev": { "ext-curl": "*", @@ -1408,7 +1421,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/6.5.7" + "source": "https://github.com/guzzle/guzzle/tree/6.5.8" }, "funding": [ { @@ -1424,20 +1437,20 @@ "type": "tidelift" } ], - "time": "2022-06-09T21:36:50+00:00" + "time": "2022-06-20T22:16:07+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.1", + "version": "1.5.3", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "url": "https://api.github.com/repos/guzzle/promises/zipball/67ab6e18aaa14d753cc148911d273f6e6cb6721e", + "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e", "shasum": "" }, "require": { @@ -1447,11 +1460,6 @@ "symfony/phpunit-bridge": "^4.4 || ^5.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, "autoload": { "files": [ "src/functions_include.php" @@ -1492,7 +1500,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.1" + "source": "https://github.com/guzzle/promises/tree/1.5.3" }, "funding": [ { @@ -1508,20 +1516,20 @@ "type": "tidelift" } ], - "time": "2021-10-22T20:56:57+00:00" + "time": "2023-05-21T12:31:43+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.8.5", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "337e3ad8e5716c15f9657bd214d16cc5e69df268" + "reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/337e3ad8e5716c15f9657bd214d16cc5e69df268", - "reference": "337e3ad8e5716c15f9657bd214d16cc5e69df268", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/e4490cabc77465aaee90b20cfc9a770f8c04be6b", + "reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b", "shasum": "" }, "require": { @@ -1540,11 +1548,6 @@ "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7-dev" - } - }, "autoload": { "files": [ "src/functions_include.php" @@ -1602,7 +1605,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.8.5" + "source": "https://github.com/guzzle/psr7/tree/1.9.1" }, "funding": [ { @@ -1618,7 +1621,7 @@ "type": "tidelift" } ], - "time": "2022-03-20T21:51:18+00:00" + "time": "2023-04-17T16:00:37+00:00" }, { "name": "lambdish/phunctional", @@ -1678,29 +1681,29 @@ }, { "name": "laminas/laminas-code", - "version": "4.5.2", + "version": "4.12.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-code.git", - "reference": "da01fb74c08f37e20e7ae49f1e3ee09aa401ebad" + "reference": "36cbee228b427446419dd51944bdfb6bb8ddbcd0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/da01fb74c08f37e20e7ae49f1e3ee09aa401ebad", - "reference": "da01fb74c08f37e20e7ae49f1e3ee09aa401ebad", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/36cbee228b427446419dd51944bdfb6bb8ddbcd0", + "reference": "36cbee228b427446419dd51944bdfb6bb8ddbcd0", "shasum": "" }, "require": { - "php": ">=7.4, <8.2" + "php": "~8.1.0 || ~8.2.0" }, "require-dev": { - "doctrine/annotations": "^1.13.2", + "doctrine/annotations": "^2.0.0", "ext-phar": "*", "laminas/laminas-coding-standard": "^2.3.0", "laminas/laminas-stdlib": "^3.6.1", - "phpunit/phpunit": "^9.5.10", - "psalm/plugin-phpunit": "^0.16.1", - "vimeo/psalm": "^4.13.1" + "phpunit/phpunit": "^10.0.9", + "psalm/plugin-phpunit": "^0.18.4", + "vimeo/psalm": "^5.7.1" }, "suggest": { "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", @@ -1708,9 +1711,6 @@ }, "type": "library", "autoload": { - "files": [ - "polyfill/ReflectionEnumPolyfill.php" - ], "psr-4": { "Laminas\\Code\\": "src/" } @@ -1740,30 +1740,30 @@ "type": "community_bridge" } ], - "time": "2022-06-06T11:26:02+00:00" + "time": "2023-09-06T14:56:25+00:00" }, { "name": "laminas/laminas-zendframework-bridge", - "version": "1.5.0", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-zendframework-bridge.git", - "reference": "7f049390b756d34ba5940a8fb47634fbb51f79ab" + "reference": "5ef52e26392777a26dbb8f20fe24f91b406459f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/7f049390b756d34ba5940a8fb47634fbb51f79ab", - "reference": "7f049390b756d34ba5940a8fb47634fbb51f79ab", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/5ef52e26392777a26dbb8f20fe24f91b406459f6", + "reference": "5ef52e26392777a26dbb8f20fe24f91b406459f6", "shasum": "" }, "require": { - "php": ">=7.4, <8.2" + "php": "~8.0.0 || ~8.1.0 || ~8.2.0" }, "require-dev": { - "phpunit/phpunit": "^9.5.14", - "psalm/plugin-phpunit": "^0.15.2", - "squizlabs/php_codesniffer": "^3.6.2", - "vimeo/psalm": "^4.21.0" + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.0", + "squizlabs/php_codesniffer": "^3.7.1", + "vimeo/psalm": "^4.29.0" }, "type": "library", "extra": { @@ -1802,20 +1802,20 @@ "type": "community_bridge" } ], - "time": "2022-02-22T22:17:01+00:00" + "time": "2022-12-12T11:44:10+00:00" }, { "name": "monolog/monolog", - "version": "3.1.0", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "0c375495d40df0207e5833dca333f963b171ff43" + "reference": "e2392369686d420ca32df3803de28b5d6f76867d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/0c375495d40df0207e5833dca333f963b171ff43", - "reference": "0c375495d40df0207e5833dca333f963b171ff43", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/e2392369686d420ca32df3803de28b5d6f76867d", + "reference": "e2392369686d420ca32df3803de28b5d6f76867d", "shasum": "" }, "require": { @@ -1830,17 +1830,16 @@ "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7 || ^8", "ext-json": "*", - "graylog2/gelf-php": "^1.4.2", - "guzzlehttp/guzzle": "^7.4", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "php-console/php-console": "^3.1.3", - "phpstan/phpstan": "^1.4", + "phpstan/phpstan": "^1.9", "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "phpunit/phpunit": "^9.5.16", - "predis/predis": "^1.1", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "^10.1", + "predis/predis": "^1.1 || ^2", "ruflin/elastica": "^7", "symfony/mailer": "^5.4 || ^6", "symfony/mime": "^5.4 || ^6" @@ -1858,7 +1857,6 @@ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", "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" }, @@ -1893,7 +1891,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.1.0" + "source": "https://github.com/Seldaek/monolog/tree/3.4.0" }, "funding": [ { @@ -1905,7 +1903,7 @@ "type": "tidelift" } ], - "time": "2022-06-09T09:09:00+00:00" + "time": "2023-06-21T08:46:11+00:00" }, { "name": "psr/cache", @@ -1956,24 +1954,77 @@ }, "time": "2021-02-03T23:26:27+00:00" }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+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/" @@ -2000,9 +2051,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", @@ -2056,25 +2107,25 @@ }, { "name": "psr/http-message", - "version": "1.0.1", + "version": "1.1", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { @@ -2103,9 +2154,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/master" + "source": "https://github.com/php-fig/http-message/tree/1.1" }, - "time": "2016-08-06T14:39:51+00:00" + "time": "2023-04-04T09:50:52+00:00" }, { "name": "psr/log", @@ -2203,42 +2254,52 @@ }, { "name": "ramsey/collection", - "version": "1.2.2", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a" + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a", - "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", "shasum": "" }, "require": { - "php": "^7.3 || ^8", - "symfony/polyfill-php81": "^1.23" + "php": "^8.1" }, "require-dev": { - "captainhook/captainhook": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "ergebnis/composer-normalize": "^2.6", - "fakerphp/faker": "^1.5", - "hamcrest/hamcrest-php": "^2", - "jangregor/phpstan-prophecy": "^0.8", - "mockery/mockery": "^1.3", + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.28.3", + "fakerphp/faker": "^1.21", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^1.0", + "mockery/mockery": "^1.5", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcsstandards/phpcsutils": "^1.0.0-rc1", "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "^1", - "phpstan/phpstan": "^0.12.32", - "phpstan/phpstan-mockery": "^0.12.5", - "phpstan/phpstan-phpunit": "^0.12.11", - "phpunit/phpunit": "^8.5 || ^9", - "psy/psysh": "^0.10.4", - "slevomat/coding-standard": "^6.3", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.4" + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18.4", + "ramsey/coding-standard": "^2.0.3", + "ramsey/conventional-commits": "^1.3", + "vimeo/psalm": "^5.4" }, "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, "autoload": { "psr-4": { "Ramsey\\Collection\\": "src/" @@ -2266,7 +2327,7 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.2.2" + "source": "https://github.com/ramsey/collection/tree/2.0.0" }, "funding": [ { @@ -2278,28 +2339,27 @@ "type": "tidelift" } ], - "time": "2021-10-10T03:01:02+00:00" + "time": "2022-12-31T21:50:55+00:00" }, { "name": "ramsey/uuid", - "version": "4.3.1", + "version": "4.7.4", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "8505afd4fea63b81a85d3b7b53ac3cb8dc347c28" + "reference": "60a4c63ab724854332900504274f6150ff26d286" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/8505afd4fea63b81a85d3b7b53ac3cb8dc347c28", - "reference": "8505afd4fea63b81a85d3b7b53ac3cb8dc347c28", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/60a4c63ab724854332900504274f6150ff26d286", + "reference": "60a4c63ab724854332900504274f6150ff26d286", "shasum": "" }, "require": { - "brick/math": "^0.8 || ^0.9", - "ext-ctype": "*", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", "ext-json": "*", "php": "^8.0", - "ramsey/collection": "^1.0" + "ramsey/collection": "^1.2 || ^2.0" }, "replace": { "rhumsaa/uuid": "self.version" @@ -2311,24 +2371,23 @@ "doctrine/annotations": "^1.8", "ergebnis/composer-normalize": "^2.15", "mockery/mockery": "^1.3", - "moontoast/math": "^1.1", "paragonie/random-lib": "^2", "php-mock/php-mock": "^2.2", "php-mock/php-mock-mockery": "^1.3", "php-parallel-lint/php-parallel-lint": "^1.1", "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-mockery": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", "phpunit/phpunit": "^8.5 || ^9", - "slevomat/coding-standard": "^7.0", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", "squizlabs/php_codesniffer": "^3.5", "vimeo/psalm": "^4.9" }, "suggest": { "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-ctype": "Enables faster processing of character classification using ctype functions.", "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", @@ -2360,7 +2419,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.3.1" + "source": "https://github.com/ramsey/uuid/tree/4.7.4" }, "funding": [ { @@ -2372,27 +2431,27 @@ "type": "tidelift" } ], - "time": "2022-03-27T21:42:02+00:00" + "time": "2023-04-15T23:01:58+00:00" }, { "name": "react/promise", - "version": "v2.9.0", + "version": "v2.10.0", "source": { "type": "git", "url": "https://github.com/reactphp/promise.git", - "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910" + "reference": "f913fb8cceba1e6644b7b90c4bfb678ed8a3ef38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/234f8fd1023c9158e2314fa9d7d0e6a83db42910", - "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910", + "url": "https://api.github.com/repos/reactphp/promise/zipball/f913fb8cceba1e6644b7b90c4bfb678ed8a3ef38", + "reference": "f913fb8cceba1e6644b7b90c4bfb678ed8a3ef38", "shasum": "" }, "require": { "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.36" }, "type": "library", "autoload": { @@ -2436,41 +2495,37 @@ ], "support": { "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v2.9.0" + "source": "https://github.com/reactphp/promise/tree/v2.10.0" }, "funding": [ { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "time": "2022-02-11T10:27:51+00:00" + "time": "2023-05-02T15:15:43+00:00" }, { "name": "symfony/cache", - "version": "v6.1.1", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "364fc90734230d936ac2db8e897cc03ec8497bbb" + "reference": "e60d00b4f633efa4c1ef54e77c12762d9073e7b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/364fc90734230d936ac2db8e897cc03ec8497bbb", - "reference": "364fc90734230d936ac2db8e897cc03ec8497bbb", + "url": "https://api.github.com/repos/symfony/cache/zipball/e60d00b4f633efa4c1ef54e77c12762d9073e7b3", + "reference": "e60d00b4f633efa4c1ef54e77c12762d9073e7b3", "shasum": "" }, "require": { "php": ">=8.1", "psr/cache": "^2.0|^3.0", "psr/log": "^1.1|^2|^3", - "symfony/cache-contracts": "^1.1.7|^2|^3", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/var-exporter": "^5.4|^6.0" + "symfony/cache-contracts": "^2.5|^3", + "symfony/service-contracts": "^2.5|^3", + "symfony/var-exporter": "^6.2.10" }, "conflict": { "doctrine/dbal": "<2.13.1", @@ -2486,7 +2541,7 @@ "require-dev": { "cache/integration-tests": "dev-master", "doctrine/dbal": "^2.13.1|^3.0", - "predis/predis": "^1.1", + "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0|^3.0", "symfony/config": "^5.4|^6.0", "symfony/dependency-injection": "^5.4|^6.0", @@ -2521,14 +2576,14 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Provides an extended PSR-6, PSR-16 (and tags) implementation", + "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", "homepage": "https://symfony.com", "keywords": [ "caching", "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.1.1" + "source": "https://github.com/symfony/cache/tree/v6.3.4" }, "funding": [ { @@ -2544,33 +2599,30 @@ "type": "tidelift" } ], - "time": "2022-06-06T19:15:01+00:00" + "time": "2023-08-05T09:10:27+00:00" }, { "name": "symfony/cache-contracts", - "version": "v3.1.0", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "2eab7fa459af6d75c6463e63e633b667a9b761d3" + "reference": "ad945640ccc0ae6e208bcea7d7de4b39b569896b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/2eab7fa459af6d75c6463e63e633b667a9b761d3", - "reference": "2eab7fa459af6d75c6463e63e633b667a9b761d3", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/ad945640ccc0ae6e208bcea7d7de4b39b569896b", + "reference": "ad945640ccc0ae6e208bcea7d7de4b39b569896b", "shasum": "" }, "require": { "php": ">=8.1", "psr/cache": "^3.0" }, - "suggest": { - "symfony/cache-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.1-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -2607,7 +2659,80 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.1.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.3.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": "2023-05-23T14:45:45+00:00" + }, + { + "name": "symfony/clock", + "version": "v6.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "a74086d3db70d0f06ffd84480daa556248706e98" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/a74086d3db70d0f06ffd84480daa556248706e98", + "reference": "a74086d3db70d0f06ffd84480daa556248706e98", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/clock": "^1.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "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": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v6.3.4" }, "funding": [ { @@ -2623,41 +2748,39 @@ "type": "tidelift" } ], - "time": "2022-02-25T11:15:52+00:00" + "time": "2023-07-31T11:35:03+00:00" }, { "name": "symfony/config", - "version": "v6.1.0", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "ed8d12417bcacd2d969750feb1fe1aab1c11e613" + "reference": "b47ca238b03e7b0d7880ffd1cf06e8d637ca1467" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/ed8d12417bcacd2d969750feb1fe1aab1c11e613", - "reference": "ed8d12417bcacd2d969750feb1fe1aab1c11e613", + "url": "https://api.github.com/repos/symfony/config/zipball/b47ca238b03e7b0d7880ffd1cf06e8d637ca1467", + "reference": "b47ca238b03e7b0d7880ffd1cf06e8d637ca1467", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/filesystem": "^5.4|^6.0", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/finder": "<5.4" + "symfony/finder": "<5.4", + "symfony/service-contracts": "<2.5" }, "require-dev": { "symfony/event-dispatcher": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", "symfony/messenger": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", + "symfony/service-contracts": "^2.5|^3", "symfony/yaml": "^5.4|^6.0" }, - "suggest": { - "symfony/yaml": "To use the yaml reference dumper" - }, "type": "library", "autoload": { "psr-4": { @@ -2684,7 +2807,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/v6.1.0" + "source": "https://github.com/symfony/config/tree/v6.3.2" }, "funding": [ { @@ -2700,27 +2823,27 @@ "type": "tidelift" } ], - "time": "2022-05-17T12:56:32+00:00" + "time": "2023-07-19T20:22:16+00:00" }, { "name": "symfony/console", - "version": "v6.1.1", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "6187424023fbffcd757789aeb517c9161b1eabee" + "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/6187424023fbffcd757789aeb517c9161b1eabee", - "reference": "6187424023fbffcd757789aeb517c9161b1eabee", + "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6", + "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^1.1|^2|^3", + "symfony/service-contracts": "^2.5|^3", "symfony/string": "^5.4|^6.0" }, "conflict": { @@ -2742,12 +2865,6 @@ "symfony/process": "^5.4|^6.0", "symfony/var-dumper": "^5.4|^6.0" }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, "type": "library", "autoload": { "psr-4": { @@ -2775,12 +2892,12 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.1.1" + "source": "https://github.com/symfony/console/tree/v6.3.4" }, "funding": [ { @@ -2796,33 +2913,34 @@ "type": "tidelift" } ], - "time": "2022-06-08T14:02:09+00:00" + "time": "2023-08-16T10:10:12+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.1.0", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "fc1fcd2b153f585934e80055bb3254913def2a6e" + "reference": "68a5a9570806a087982f383f6109c5e925892a49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/fc1fcd2b153f585934e80055bb3254913def2a6e", - "reference": "fc1fcd2b153f585934e80055bb3254913def2a6e", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/68a5a9570806a087982f383f6109c5e925892a49", + "reference": "68a5a9570806a087982f383f6109c5e925892a49", "shasum": "" }, "require": { "php": ">=8.1", "psr/container": "^1.1|^2.0", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/service-contracts": "^1.1.6|^2.0|^3.0" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/service-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.2.10" }, "conflict": { "ext-psr": "<1.1|>=2", "symfony/config": "<6.1", "symfony/finder": "<5.4", - "symfony/proxy-manager-bridge": "<5.4", + "symfony/proxy-manager-bridge": "<6.3", "symfony/yaml": "<5.4" }, "provide": { @@ -2834,13 +2952,6 @@ "symfony/expression-language": "^5.4|^6.0", "symfony/yaml": "^5.4|^6.0" }, - "suggest": { - "symfony/config": "", - "symfony/expression-language": "For using expressions in service container configuration", - "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", - "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", - "symfony/yaml": "" - }, "type": "library", "autoload": { "psr-4": { @@ -2867,7 +2978,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/v6.1.0" + "source": "https://github.com/symfony/dependency-injection/tree/v6.3.4" }, "funding": [ { @@ -2883,20 +2994,20 @@ "type": "tidelift" } ], - "time": "2022-05-27T06:40:20+00:00" + "time": "2023-08-16T17:55:17+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.1.0", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918" + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", - "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", "shasum": "" }, "require": { @@ -2905,7 +3016,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.1-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -2934,7 +3045,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" }, "funding": [ { @@ -2950,27 +3061,28 @@ "type": "tidelift" } ], - "time": "2022-02-25T11:15:52+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/dotenv", - "version": "v6.1.0", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "568c11bcedf419e7e61f663912c3547b54de51df" + "reference": "ceadb434fe2a6763a03d2d110441745834f3dd1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/568c11bcedf419e7e61f663912c3547b54de51df", - "reference": "568c11bcedf419e7e61f663912c3547b54de51df", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/ceadb434fe2a6763a03d2d110441745834f3dd1e", + "reference": "ceadb434fe2a6763a03d2d110441745834f3dd1e", "shasum": "" }, "require": { "php": ">=8.1" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<5.4", + "symfony/process": "<5.4" }, "require-dev": { "symfony/console": "^5.4|^6.0", @@ -3007,7 +3119,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v6.1.0" + "source": "https://github.com/symfony/dotenv/tree/v6.3.0" }, "funding": [ { @@ -3023,20 +3135,20 @@ "type": "tidelift" } ], - "time": "2022-04-01T07:15:35+00:00" + "time": "2023-04-21T14:41:17+00:00" }, { "name": "symfony/error-handler", - "version": "v6.1.0", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "d02c662651e5de760bb7d5e94437113309e8f8a0" + "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/d02c662651e5de760bb7d5e94437113309e8f8a0", - "reference": "d02c662651e5de760bb7d5e94437113309e8f8a0", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/85fd65ed295c4078367c784e8a5a6cee30348b7a", + "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a", "shasum": "" }, "require": { @@ -3044,8 +3156,11 @@ "psr/log": "^1|^2|^3", "symfony/var-dumper": "^5.4|^6.0" }, + "conflict": { + "symfony/deprecation-contracts": "<2.5" + }, "require-dev": { - "symfony/deprecation-contracts": "^2.1|^3", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-kernel": "^5.4|^6.0", "symfony/serializer": "^5.4|^6.0" }, @@ -3078,7 +3193,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/v6.1.0" + "source": "https://github.com/symfony/error-handler/tree/v6.3.2" }, "funding": [ { @@ -3094,28 +3209,29 @@ "type": "tidelift" } ], - "time": "2022-05-23T10:32:57+00:00" + "time": "2023-07-16T17:05:46+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.1.0", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347" + "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a0449a7ad7daa0f7c0acd508259f80544ab5a347", - "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", + "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/event-dispatcher-contracts": "^2|^3" + "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4" + "symfony/dependency-injection": "<5.4", + "symfony/service-contracts": "<2.5" }, "provide": { "psr/event-dispatcher-implementation": "1.0", @@ -3128,13 +3244,9 @@ "symfony/error-handler": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/http-foundation": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", + "symfony/service-contracts": "^2.5|^3", "symfony/stopwatch": "^5.4|^6.0" }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, "type": "library", "autoload": { "psr-4": { @@ -3161,7 +3273,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/v6.1.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2" }, "funding": [ { @@ -3177,33 +3289,30 @@ "type": "tidelift" } ], - "time": "2022-05-05T16:51:07+00:00" + "time": "2023-07-06T06:56:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.1.0", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "02ff5eea2f453731cfbc6bc215e456b781480448" + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/02ff5eea2f453731cfbc6bc215e456b781480448", - "reference": "02ff5eea2f453731cfbc6bc215e456b781480448", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", "shasum": "" }, "require": { "php": ">=8.1", "psr/event-dispatcher": "^1" }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.1-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -3240,7 +3349,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.1.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" }, "funding": [ { @@ -3256,20 +3365,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T11:15:52+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/filesystem", - "version": "v6.1.0", + "version": "v6.3.1", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "3132d2f43ca799c2aa099f9738d98228c56baa5d" + "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/3132d2f43ca799c2aa099f9738d98228c56baa5d", - "reference": "3132d2f43ca799c2aa099f9738d98228c56baa5d", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", + "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", "shasum": "" }, "require": { @@ -3303,7 +3412,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.1.0" + "source": "https://github.com/symfony/filesystem/tree/v6.3.1" }, "funding": [ { @@ -3319,20 +3428,20 @@ "type": "tidelift" } ], - "time": "2022-05-21T13:34:40+00:00" + "time": "2023-06-01T08:30:39+00:00" }, { "name": "symfony/finder", - "version": "v6.1.0", + "version": "v6.3.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "45b8beb69d6eb3b05a65689ebfd4222326773f8f" + "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/45b8beb69d6eb3b05a65689ebfd4222326773f8f", - "reference": "45b8beb69d6eb3b05a65689ebfd4222326773f8f", + "url": "https://api.github.com/repos/symfony/finder/zipball/9915db259f67d21eefee768c1abcf1cc61b1fc9e", + "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e", "shasum": "" }, "require": { @@ -3367,7 +3476,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.1.0" + "source": "https://github.com/symfony/finder/tree/v6.3.3" }, "funding": [ { @@ -3383,20 +3492,20 @@ "type": "tidelift" } ], - "time": "2022-04-15T08:08:08+00:00" + "time": "2023-07-31T08:31:44+00:00" }, { "name": "symfony/framework-bundle", - "version": "v6.1.1", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "260d97823252318eb3b525dd8c0bee2cc5dbfd7f" + "reference": "f822f54ff05cd88878910b4559f66c12176d952c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/260d97823252318eb3b525dd8c0bee2cc5dbfd7f", - "reference": "260d97823252318eb3b525dd8c0bee2cc5dbfd7f", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/f822f54ff05cd88878910b4559f66c12176d952c", + "reference": "f822f54ff05cd88878910b4559f66c12176d952c", "shasum": "" }, "require": { @@ -3405,14 +3514,14 @@ "php": ">=8.1", "symfony/cache": "^5.4|^6.0", "symfony/config": "^6.1", - "symfony/dependency-injection": "^6.1", - "symfony/deprecation-contracts": "^2.1|^3", + "symfony/dependency-injection": "^6.3.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/error-handler": "^6.1", "symfony/event-dispatcher": "^5.4|^6.0", "symfony/filesystem": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/http-kernel": "^6.1", + "symfony/http-foundation": "^6.3", + "symfony/http-kernel": "^6.3", "symfony/polyfill-mbstring": "~1.0", "symfony/routing": "^5.4|^6.0" }, @@ -3421,77 +3530,70 @@ "doctrine/persistence": "<1.3", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "phpunit/phpunit": "<5.4.3", "symfony/asset": "<5.4", + "symfony/clock": "<6.3", "symfony/console": "<5.4", - "symfony/dom-crawler": "<5.4", + "symfony/dom-crawler": "<6.3", "symfony/dotenv": "<5.4", "symfony/form": "<5.4", - "symfony/http-client": "<5.4", + "symfony/http-client": "<6.3", "symfony/lock": "<5.4", "symfony/mailer": "<5.4", - "symfony/messenger": "<5.4", - "symfony/mime": "<5.4", + "symfony/messenger": "<6.3", + "symfony/mime": "<6.2", "symfony/property-access": "<5.4", "symfony/property-info": "<5.4", "symfony/security-core": "<5.4", "symfony/security-csrf": "<5.4", - "symfony/serializer": "<6.1", + "symfony/serializer": "<6.3", "symfony/stopwatch": "<5.4", - "symfony/translation": "<5.4", + "symfony/translation": "<6.2.8", "symfony/twig-bridge": "<5.4", "symfony/twig-bundle": "<5.4", - "symfony/validator": "<5.4", + "symfony/validator": "<6.3", "symfony/web-profiler-bundle": "<5.4", "symfony/workflow": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.13.1", + "doctrine/annotations": "^1.13.1|^2", "doctrine/persistence": "^1.3|^2|^3", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "symfony/asset": "^5.4|^6.0", + "symfony/asset-mapper": "^6.3", "symfony/browser-kit": "^5.4|^6.0", + "symfony/clock": "^6.2", "symfony/console": "^5.4.9|^6.0.9", "symfony/css-selector": "^5.4|^6.0", - "symfony/dom-crawler": "^5.4|^6.0", + "symfony/dom-crawler": "^6.3", "symfony/dotenv": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/form": "^5.4|^6.0", "symfony/html-sanitizer": "^6.1", - "symfony/http-client": "^5.4|^6.0", + "symfony/http-client": "^6.3", "symfony/lock": "^5.4|^6.0", "symfony/mailer": "^5.4|^6.0", - "symfony/messenger": "^6.1", - "symfony/mime": "^5.4|^6.0", + "symfony/messenger": "^6.3", + "symfony/mime": "^6.2", "symfony/notifier": "^5.4|^6.0", "symfony/polyfill-intl-icu": "~1.0", "symfony/process": "^5.4|^6.0", "symfony/property-info": "^5.4|^6.0", "symfony/rate-limiter": "^5.4|^6.0", + "symfony/scheduler": "^6.3", "symfony/security-bundle": "^5.4|^6.0", "symfony/semaphore": "^5.4|^6.0", - "symfony/serializer": "^6.1", + "symfony/serializer": "^6.3", "symfony/stopwatch": "^5.4|^6.0", "symfony/string": "^5.4|^6.0", - "symfony/translation": "^5.4|^6.0", + "symfony/translation": "^6.2.8", "symfony/twig-bundle": "^5.4|^6.0", "symfony/uid": "^5.4|^6.0", - "symfony/validator": "^5.4|^6.0", + "symfony/validator": "^6.3", "symfony/web-link": "^5.4|^6.0", "symfony/workflow": "^5.4|^6.0", "symfony/yaml": "^5.4|^6.0", "twig/twig": "^2.10|^3.0" }, - "suggest": { - "ext-apcu": "For best performance of the system caches", - "symfony/console": "For using the console commands", - "symfony/form": "For using forms", - "symfony/property-info": "For using the property_info service", - "symfony/serializer": "For using the serializer service", - "symfony/validator": "For using validation", - "symfony/web-link": "For using web links, features such as preloading, prefetching or prerendering", - "symfony/yaml": "For using the debug:config and lint:yaml commands" - }, "type": "symfony-bundle", "autoload": { "psr-4": { @@ -3518,7 +3620,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.1.1" + "source": "https://github.com/symfony/framework-bundle/tree/v6.3.4" }, "funding": [ { @@ -3534,35 +3636,40 @@ "type": "tidelift" } ], - "time": "2022-06-09T10:53:06+00:00" + "time": "2023-08-16T18:04:38+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.1.1", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "a58dc88d56e04e57993d96c1407a17407610e1df" + "reference": "cac1556fdfdf6719668181974104e6fcfa60e844" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/a58dc88d56e04e57993d96c1407a17407610e1df", - "reference": "a58dc88d56e04e57993d96c1407a17407610e1df", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/cac1556fdfdf6719668181974104e6fcfa60e844", + "reference": "cac1556fdfdf6719668181974104e6fcfa60e844", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.1" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "symfony/cache": "<6.2" }, "require-dev": { - "predis/predis": "~1.0", + "doctrine/dbal": "^2.13.1|^3.0", + "predis/predis": "^1.1|^2.0", "symfony/cache": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", - "symfony/mime": "^5.4|^6.0" - }, - "suggest": { - "symfony/mime": "To use the file extension guesser" + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^5.4|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" }, "type": "library", "autoload": { @@ -3590,7 +3697,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.1.1" + "source": "https://github.com/symfony/http-foundation/tree/v6.3.4" }, "funding": [ { @@ -3606,28 +3713,29 @@ "type": "tidelift" } ], - "time": "2022-05-31T14:28:03+00:00" + "time": "2023-08-22T08:20:46+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.1.1", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "86c4d6f6c5b6cd012df41e3b950c924b3ffdc019" + "reference": "36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/86c4d6f6c5b6cd012df41e3b950c924b3ffdc019", - "reference": "86c4d6f6c5b6cd012df41e3b950c924b3ffdc019", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb", + "reference": "36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/error-handler": "^6.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.3", "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-foundation": "^6.3.4", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -3635,15 +3743,18 @@ "symfony/cache": "<5.4", "symfony/config": "<6.1", "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.1", + "symfony/dependency-injection": "<6.3.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": "<5.4", + "symfony/var-dumper": "<6.3", "twig/twig": "<2.13" }, "provide": { @@ -3652,28 +3763,27 @@ "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", "symfony/browser-kit": "^5.4|^6.0", + "symfony/clock": "^6.2", "symfony/config": "^6.1", "symfony/console": "^5.4|^6.0", "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^6.1", + "symfony/dependency-injection": "^6.3.4", "symfony/dom-crawler": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", - "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/http-client-contracts": "^2.5|^3", "symfony/process": "^5.4|^6.0", + "symfony/property-access": "^5.4.5|^6.0.5", "symfony/routing": "^5.4|^6.0", + "symfony/serializer": "^6.3", "symfony/stopwatch": "^5.4|^6.0", "symfony/translation": "^5.4|^6.0", - "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/translation-contracts": "^2.5|^3", "symfony/uid": "^5.4|^6.0", + "symfony/validator": "^6.3", + "symfony/var-exporter": "^6.2", "twig/twig": "^2.13|^3.0.4" }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "" - }, "type": "library", "autoload": { "psr-4": { @@ -3700,7 +3810,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.1.1" + "source": "https://github.com/symfony/http-kernel/tree/v6.3.4" }, "funding": [ { @@ -3716,29 +3826,30 @@ "type": "tidelift" } ], - "time": "2022-06-09T17:31:33+00:00" + "time": "2023-08-26T13:54:49+00:00" }, { "name": "symfony/messenger", - "version": "v6.1.0", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/messenger.git", - "reference": "e4e204ce4f2e90b54320c9043a0898d925dcd118" + "reference": "bf460982736a4b99d11a3a90005ef438c3780df7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/messenger/zipball/e4e204ce4f2e90b54320c9043a0898d925dcd118", - "reference": "e4e204ce4f2e90b54320c9043a0898d925dcd118", + "url": "https://api.github.com/repos/symfony/messenger/zipball/bf460982736a4b99d11a3a90005ef438c3780df7", + "reference": "bf460982736a4b99d11a3a90005ef438c3780df7", "shasum": "" }, "require": { "php": ">=8.1", - "psr/log": "^1|^2|^3" + "psr/log": "^1|^2|^3", + "symfony/clock": "^6.3" }, "conflict": { "symfony/event-dispatcher": "<5.4", - "symfony/event-dispatcher-contracts": "<2", + "symfony/event-dispatcher-contracts": "<2.5", "symfony/framework-bundle": "<5.4", "symfony/http-kernel": "<5.4", "symfony/serializer": "<5.4" @@ -3747,19 +3858,18 @@ "psr/cache": "^1.0|^2.0|^3.0", "symfony/console": "^5.4|^6.0", "symfony/dependency-injection": "^5.4|^6.0", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/event-dispatcher": "^5.4|^6.0", "symfony/http-kernel": "^5.4|^6.0", "symfony/process": "^5.4|^6.0", "symfony/property-access": "^5.4|^6.0", + "symfony/rate-limiter": "^5.4|^6.0", "symfony/routing": "^5.4|^6.0", "symfony/serializer": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", + "symfony/service-contracts": "^2.5|^3", "symfony/stopwatch": "^5.4|^6.0", "symfony/validator": "^5.4|^6.0" }, - "suggest": { - "enqueue/messenger-adapter": "For using the php-enqueue library as a transport." - }, "type": "library", "autoload": { "psr-4": { @@ -3786,7 +3896,7 @@ "description": "Helps applications send and receive messages to/from other applications or via message queues", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/messenger/tree/v6.1.0" + "source": "https://github.com/symfony/messenger/tree/v6.3.4" }, "funding": [ { @@ -3802,20 +3912,20 @@ "type": "tidelift" } ], - "time": "2022-05-11T12:12:29+00:00" + "time": "2023-08-14T14:06:04+00:00" }, { "name": "symfony/polyfill-apcu", - "version": "v1.26.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-apcu.git", - "reference": "43273a33c46f9d5a08dac76859f63d6814242e81" + "reference": "c6c2c0f5f4cb0b100c5dfea807ef5cd27bbe9899" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/43273a33c46f9d5a08dac76859f63d6814242e81", - "reference": "43273a33c46f9d5a08dac76859f63d6814242e81", + "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/c6c2c0f5f4cb0b100c5dfea807ef5cd27bbe9899", + "reference": "c6c2c0f5f4cb0b100c5dfea807ef5cd27bbe9899", "shasum": "" }, "require": { @@ -3824,7 +3934,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3863,7 +3973,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-apcu/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-apcu/tree/v1.28.0" }, "funding": [ { @@ -3879,20 +3989,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.26.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", "shasum": "" }, "require": { @@ -3907,7 +4017,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3945,7 +4055,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" }, "funding": [ { @@ -3961,20 +4071,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.26.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "433d05519ce6990bf3530fba6957499d327395c2" + "reference": "875e90aeea2777b6f135677f618529449334a612" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", - "reference": "433d05519ce6990bf3530fba6957499d327395c2", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", + "reference": "875e90aeea2777b6f135677f618529449334a612", "shasum": "" }, "require": { @@ -3986,7 +4096,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4026,7 +4136,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" }, "funding": [ { @@ -4042,20 +4152,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.26.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8" + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8", - "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", "shasum": "" }, "require": { @@ -4069,7 +4179,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4113,7 +4223,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" }, "funding": [ { @@ -4129,20 +4239,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2023-01-26T09:30:37+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.26.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd" + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", "shasum": "" }, "require": { @@ -4154,7 +4264,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4197,7 +4307,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" }, "funding": [ { @@ -4213,20 +4323,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.26.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + "reference": "42292d99c55abe617799667f454222c54c60e229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", + "reference": "42292d99c55abe617799667f454222c54c60e229", "shasum": "" }, "require": { @@ -4241,7 +4351,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4280,7 +4390,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" }, "funding": [ { @@ -4296,20 +4406,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2023-07-28T09:04:16+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.26.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", - "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", "shasum": "" }, "require": { @@ -4318,7 +4428,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4356,7 +4466,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0" }, "funding": [ { @@ -4372,20 +4482,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.26.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", "shasum": "" }, "require": { @@ -4394,7 +4504,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4439,7 +4549,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" }, "funding": [ { @@ -4455,29 +4565,30 @@ "type": "tidelift" } ], - "time": "2022-05-10T07:21:04+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { - "name": "symfony/polyfill-php81", - "version": "v1.26.0", + "name": "symfony/polyfill-php83", + "version": "v1.28.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", + "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.1", + "symfony/polyfill-php80": "^1.14" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4489,7 +4600,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" + "Symfony\\Polyfill\\Php83\\": "" }, "classmap": [ "Resources/stubs" @@ -4509,7 +4620,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -4518,7 +4629,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0" }, "funding": [ { @@ -4534,46 +4645,41 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2023-08-16T06:22:46+00:00" }, { "name": "symfony/routing", - "version": "v6.1.1", + "version": "v6.3.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "8f068b792e515b25e26855ac8dc7fe800399f3e5" + "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/8f068b792e515b25e26855ac8dc7fe800399f3e5", - "reference": "8f068b792e515b25e26855ac8dc7fe800399f3e5", + "url": "https://api.github.com/repos/symfony/routing/zipball/e7243039ab663822ff134fbc46099b5fdfa16f6a", + "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "doctrine/annotations": "<1.12", - "symfony/config": "<5.4", + "symfony/config": "<6.2", "symfony/dependency-injection": "<5.4", "symfony/yaml": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.12", + "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", + "symfony/config": "^6.2", "symfony/dependency-injection": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/http-foundation": "^5.4|^6.0", "symfony/yaml": "^5.4|^6.0" }, - "suggest": { - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" - }, "type": "library", "autoload": { "psr-4": { @@ -4606,7 +4712,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.1.1" + "source": "https://github.com/symfony/routing/tree/v6.3.3" }, "funding": [ { @@ -4622,37 +4728,33 @@ "type": "tidelift" } ], - "time": "2022-06-08T12:21:15+00:00" + "time": "2023-07-31T07:08:24+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.1", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c" + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c", - "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1|^3" + "php": ">=8.1", + "psr/container": "^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" }, - "suggest": { - "symfony/service-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -4662,7 +4764,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4689,7 +4794,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" }, "funding": [ { @@ -4705,20 +4810,20 @@ "type": "tidelift" } ], - "time": "2022-03-13T20:07:29+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/string", - "version": "v6.1.0", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "d3edc75baf9f1d4f94879764dda2e1ac33499529" + "reference": "53d1a83225002635bca3482fcbf963001313fb68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/d3edc75baf9f1d4f94879764dda2e1ac33499529", - "reference": "d3edc75baf9f1d4f94879764dda2e1ac33499529", + "url": "https://api.github.com/repos/symfony/string/zipball/53d1a83225002635bca3482fcbf963001313fb68", + "reference": "53d1a83225002635bca3482fcbf963001313fb68", "shasum": "" }, "require": { @@ -4729,12 +4834,13 @@ "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": "<2.0" + "symfony/translation-contracts": "<2.5" }, "require-dev": { "symfony/error-handler": "^5.4|^6.0", "symfony/http-client": "^5.4|^6.0", - "symfony/translation-contracts": "^2.0|^3.0", + "symfony/intl": "^6.2", + "symfony/translation-contracts": "^2.5|^3.0", "symfony/var-exporter": "^5.4|^6.0" }, "type": "library", @@ -4774,7 +4880,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.1.0" + "source": "https://github.com/symfony/string/tree/v6.3.2" }, "funding": [ { @@ -4790,32 +4896,29 @@ "type": "tidelift" } ], - "time": "2022-04-22T08:18:23+00:00" + "time": "2023-07-05T08:41:27+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.1.0", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "bfddd2a1faa271b782b791c361cc16e2dd49dfaa" + "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/bfddd2a1faa271b782b791c361cc16e2dd49dfaa", - "reference": "bfddd2a1faa271b782b791c361cc16e2dd49dfaa", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/02c24deb352fb0d79db5486c0c79905a85e37e86", + "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86", "shasum": "" }, "require": { "php": ">=8.1" }, - "suggest": { - "symfony/translation-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.1-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -4855,7 +4958,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.1.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.3.0" }, "funding": [ { @@ -4871,52 +4974,55 @@ "type": "tidelift" } ], - "time": "2022-04-22T07:30:54+00:00" + "time": "2023-05-30T17:17:10+00:00" }, { "name": "symfony/twig-bridge", - "version": "v6.1.0", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "53ce2d7811500c0f0f94af700307ff5b1e305d3c" + "reference": "6f8435db76a2d79917489a19a82679276c1b4e32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/53ce2d7811500c0f0f94af700307ff5b1e305d3c", - "reference": "53ce2d7811500c0f0f94af700307ff5b1e305d3c", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/6f8435db76a2d79917489a19a82679276c1b4e32", + "reference": "6f8435db76a2d79917489a19a82679276c1b4e32", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/translation-contracts": "^2.5|^3", "twig/twig": "^2.13|^3.0.4" }, "conflict": { "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/console": "<5.4", - "symfony/form": "<6.1", + "symfony/form": "<6.3", "symfony/http-foundation": "<5.4", - "symfony/http-kernel": "<5.4", + "symfony/http-kernel": "<6.2", + "symfony/mime": "<6.2", "symfony/translation": "<5.4", "symfony/workflow": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.12", - "egulias/email-validator": "^2.1.10|^3", + "doctrine/annotations": "^1.12|^2", + "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", + "symfony/asset-mapper": "^6.3", "symfony/console": "^5.4|^6.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", - "symfony/form": "^6.1", + "symfony/form": "^6.3", "symfony/html-sanitizer": "^6.1", "symfony/http-foundation": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", + "symfony/http-kernel": "^6.2", "symfony/intl": "^5.4|^6.0", - "symfony/mime": "^5.4|^6.0", + "symfony/mime": "^6.2", "symfony/polyfill-intl-icu": "~1.0", "symfony/property-info": "^5.4|^6.0", "symfony/routing": "^5.4|^6.0", @@ -4924,9 +5030,9 @@ "symfony/security-core": "^5.4|^6.0", "symfony/security-csrf": "^5.4|^6.0", "symfony/security-http": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0", + "symfony/serializer": "^6.2", "symfony/stopwatch": "^5.4|^6.0", - "symfony/translation": "^5.4|^6.0", + "symfony/translation": "^6.1", "symfony/web-link": "^5.4|^6.0", "symfony/workflow": "^5.4|^6.0", "symfony/yaml": "^5.4|^6.0", @@ -4934,23 +5040,6 @@ "twig/inky-extra": "^2.12|^3", "twig/markdown-extra": "^2.12|^3" }, - "suggest": { - "symfony/asset": "For using the AssetExtension", - "symfony/expression-language": "For using the ExpressionExtension", - "symfony/finder": "", - "symfony/form": "For using the FormExtension", - "symfony/html-sanitizer": "For using the HtmlSanitizerExtension", - "symfony/http-kernel": "For using the HttpKernelExtension", - "symfony/routing": "For using the RoutingExtension", - "symfony/security-core": "For using the SecurityExtension", - "symfony/security-csrf": "For using the CsrfExtension", - "symfony/security-http": "For using the LogoutUrlExtension", - "symfony/stopwatch": "For using the StopwatchExtension", - "symfony/translation": "For using the TranslationExtension", - "symfony/var-dumper": "For using the DumpExtension", - "symfony/web-link": "For using the WebLinkExtension", - "symfony/yaml": "For using the YamlExtension" - }, "type": "symfony-bridge", "autoload": { "psr-4": { @@ -4977,7 +5066,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v6.1.0" + "source": "https://github.com/symfony/twig-bridge/tree/v6.3.2" }, "funding": [ { @@ -4993,31 +5082,30 @@ "type": "tidelift" } ], - "time": "2022-05-21T13:34:40+00:00" + "time": "2023-07-20T16:42:33+00:00" }, { "name": "symfony/twig-bundle", - "version": "v6.1.1", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "a2abab10068525a7f5a879e40e411d369d688545" + "reference": "d0cd4d1675c0582d27c2e8bb0dc27c0303d8e3ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/a2abab10068525a7f5a879e40e411d369d688545", - "reference": "a2abab10068525a7f5a879e40e411d369d688545", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/d0cd4d1675c0582d27c2e8bb0dc27c0303d8e3ea", + "reference": "d0cd4d1675c0582d27c2e8bb0dc27c0303d8e3ea", "shasum": "" }, "require": { "composer-runtime-api": ">=2.1", "php": ">=8.1", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", + "symfony/config": "^6.1", + "symfony/dependency-injection": "^6.1", "symfony/http-foundation": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/twig-bridge": "^5.4|^6.0", + "symfony/http-kernel": "^6.2", + "symfony/twig-bridge": "^6.3", "twig/twig": "^2.13|^3.0.4" }, "conflict": { @@ -5025,7 +5113,7 @@ "symfony/translation": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.10.4", + "doctrine/annotations": "^1.10.4|^2", "symfony/asset": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", @@ -5063,7 +5151,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.1.1" + "source": "https://github.com/symfony/twig-bundle/tree/v6.3.0" }, "funding": [ { @@ -5079,33 +5167,33 @@ "type": "tidelift" } ], - "time": "2022-05-27T16:55:36+00:00" + "time": "2023-05-06T09:53:41+00:00" }, { "name": "symfony/validator", - "version": "v6.1.1", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "b2ae30b952165080e810c3a118b230184cb97db0" + "reference": "0c8435154920b9bbe93bece675234c244cadf73b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/b2ae30b952165080e810c3a118b230184cb97db0", - "reference": "b2ae30b952165080e810c3a118b230184cb97db0", + "url": "https://api.github.com/repos/symfony/validator/zipball/0c8435154920b9bbe93bece675234c244cadf73b", + "reference": "0c8435154920b9bbe93bece675234c244cadf73b", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^1.1|^2|^3" + "symfony/polyfill-php83": "^1.27", + "symfony/translation-contracts": "^2.5|^3" }, "conflict": { "doctrine/annotations": "<1.13", "doctrine/lexer": "<1.1", - "phpunit/phpunit": "<5.4.3", "symfony/dependency-injection": "<5.4", "symfony/expression-language": "<5.4", "symfony/http-kernel": "<5.4", @@ -5115,8 +5203,8 @@ "symfony/yaml": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.13", - "egulias/email-validator": "^2.1.10|^3", + "doctrine/annotations": "^1.13|^2", + "egulias/email-validator": "^2.1.10|^3|^4", "symfony/cache": "^5.4|^6.0", "symfony/config": "^5.4|^6.0", "symfony/console": "^5.4|^6.0", @@ -5133,18 +5221,6 @@ "symfony/translation": "^5.4|^6.0", "symfony/yaml": "^5.4|^6.0" }, - "suggest": { - "egulias/email-validator": "Strict (RFC compliant) email validation", - "psr/cache-implementation": "For using the mapping cache.", - "symfony/config": "", - "symfony/expression-language": "For using the Expression validator and the ExpressionLanguageSyntax constraints", - "symfony/http-foundation": "", - "symfony/intl": "", - "symfony/property-access": "For accessing properties within comparison constraints", - "symfony/property-info": "To automatically add NotNull and Type constraints", - "symfony/translation": "For translating validation errors.", - "symfony/yaml": "" - }, "type": "library", "autoload": { "psr-4": { @@ -5171,7 +5247,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.1.1" + "source": "https://github.com/symfony/validator/tree/v6.3.4" }, "funding": [ { @@ -5187,42 +5263,38 @@ "type": "tidelift" } ], - "time": "2022-06-09T12:51:38+00:00" + "time": "2023-08-17T15:49:05+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.1.0", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "98587d939cb783aa04e828e8fa857edaca24c212" + "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/98587d939cb783aa04e828e8fa857edaca24c212", - "reference": "98587d939cb783aa04e828e8fa857edaca24c212", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2027be14f8ae8eae999ceadebcda5b4909b81d45", + "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45", "shasum": "" }, "require": { "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "phpunit/phpunit": "<5.4.3", "symfony/console": "<5.4" }, "require-dev": { "ext-iconv": "*", "symfony/console": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", "symfony/process": "^5.4|^6.0", "symfony/uid": "^5.4|^6.0", "twig/twig": "^2.13|^3.0.4" }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, "bin": [ "Resources/bin/var-dump-server" ], @@ -5259,7 +5331,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.1.0" + "source": "https://github.com/symfony/var-dumper/tree/v6.3.4" }, "funding": [ { @@ -5275,20 +5347,20 @@ "type": "tidelift" } ], - "time": "2022-05-21T13:34:40+00:00" + "time": "2023-08-24T14:51:05+00:00" }, { "name": "symfony/var-exporter", - "version": "v6.1.1", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "ce1452317b1210ddfe18d143fa8a09c18f034b89" + "reference": "df1f8aac5751871b83d30bf3e2c355770f8f0691" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/ce1452317b1210ddfe18d143fa8a09c18f034b89", - "reference": "ce1452317b1210ddfe18d143fa8a09c18f034b89", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/df1f8aac5751871b83d30bf3e2c355770f8f0691", + "reference": "df1f8aac5751871b83d30bf3e2c355770f8f0691", "shasum": "" }, "require": { @@ -5328,10 +5400,12 @@ "export", "hydrate", "instantiate", + "lazy-loading", + "proxy", "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.1.1" + "source": "https://github.com/symfony/var-exporter/tree/v6.3.4" }, "funding": [ { @@ -5347,24 +5421,25 @@ "type": "tidelift" } ], - "time": "2022-05-27T12:58:07+00:00" + "time": "2023-08-16T18:14:47+00:00" }, { "name": "symfony/yaml", - "version": "v6.1.0", + "version": "v6.3.3", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "84ce4f9d2d68f306f971a39d949d8f4b5550dba2" + "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/84ce4f9d2d68f306f971a39d949d8f4b5550dba2", - "reference": "84ce4f9d2d68f306f971a39d949d8f4b5550dba2", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e23292e8c07c85b971b44c1c4b87af52133e2add", + "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add", "shasum": "" }, "require": { "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -5373,9 +5448,6 @@ "require-dev": { "symfony/console": "^5.4|^6.0" }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, "bin": [ "Resources/bin/yaml-lint" ], @@ -5405,7 +5477,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.1.0" + "source": "https://github.com/symfony/yaml/tree/v6.3.3" }, "funding": [ { @@ -5421,20 +5493,20 @@ "type": "tidelift" } ], - "time": "2022-04-15T14:25:02+00:00" + "time": "2023-07-31T07:08:24+00:00" }, { "name": "twig/twig", - "version": "v3.4.1", + "version": "v3.7.1", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "e939eae92386b69b49cfa4599dd9bead6bf4a342" + "reference": "a0ce373a0ca3bf6c64b9e3e2124aca502ba39554" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/e939eae92386b69b49cfa4599dd9bead6bf4a342", - "reference": "e939eae92386b69b49cfa4599dd9bead6bf4a342", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/a0ce373a0ca3bf6c64b9e3e2124aca502ba39554", + "reference": "a0ce373a0ca3bf6c64b9e3e2124aca502ba39554", "shasum": "" }, "require": { @@ -5443,15 +5515,10 @@ "symfony/polyfill-mbstring": "^1.3" }, "require-dev": { - "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" + "psr/container": "^1.0|^2.0", + "symfony/phpunit-bridge": "^5.4.9|^6.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Twig\\": "src/" @@ -5485,7 +5552,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.4.1" + "source": "https://github.com/twigphp/Twig/tree/v3.7.1" }, "funding": [ { @@ -5497,7 +5564,7 @@ "type": "tidelift" } ], - "time": "2022-05-17T05:48:52+00:00" + "time": "2023-08-28T11:09:02+00:00" } ], "packages-dev": [ @@ -5669,16 +5736,16 @@ }, { "name": "behat/behat", - "version": "v3.10.0", + "version": "v3.13.0", "source": { "type": "git", "url": "https://github.com/Behat/Behat.git", - "reference": "a55661154079cf881ef643b303bfaf67bae3a09f" + "reference": "9dd7cdb309e464ddeab095cd1a5151c2dccba4ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Behat/zipball/a55661154079cf881ef643b303bfaf67bae3a09f", - "reference": "a55661154079cf881ef643b303bfaf67bae3a09f", + "url": "https://api.github.com/repos/Behat/Behat/zipball/9dd7cdb309e464ddeab095cd1a5151c2dccba4ab", + "reference": "9dd7cdb309e464ddeab095cd1a5151c2dccba4ab", "shasum": "" }, "require": { @@ -5686,7 +5753,7 @@ "behat/transliterator": "^1.2", "ext-mbstring": "*", "php": "^7.2 || ^8.0", - "psr/container": "^1.0", + "psr/container": "^1.0 || ^2.0", "symfony/config": "^4.4 || ^5.0 || ^6.0", "symfony/console": "^4.4 || ^5.0 || ^6.0", "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0", @@ -5695,8 +5762,8 @@ "symfony/yaml": "^4.4 || ^5.0 || ^6.0" }, "require-dev": { - "container-interop/container-interop": "^1.2", "herrera-io/box": "~1.6.1", + "phpspec/prophecy": "^1.15", "phpunit/phpunit": "^8.5 || ^9.0", "symfony/process": "^4.4 || ^5.0 || ^6.0", "vimeo/psalm": "^4.8" @@ -5750,9 +5817,9 @@ ], "support": { "issues": "https://github.com/Behat/Behat/issues", - "source": "https://github.com/Behat/Behat/tree/v3.10.0" + "source": "https://github.com/Behat/Behat/tree/v3.13.0" }, - "time": "2021-11-02T20:09:40+00:00" + "time": "2023-04-18T15:40:53+00:00" }, { "name": "behat/gherkin", @@ -5995,91 +6062,18 @@ }, "time": "2022-03-30T09:27:43+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.0.0", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd" + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd", - "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd", + "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", "shasum": "" }, "require": { @@ -6121,7 +6115,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.0.0" + "source": "https://github.com/composer/pcre/tree/3.1.0" }, "funding": [ { @@ -6137,20 +6131,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T20:21:48+00:00" + "time": "2022-11-17T09:50:14+00:00" }, { "name": "composer/semver", - "version": "3.3.2", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", "shasum": "" }, "require": { @@ -6200,9 +6194,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/3.3.2" + "source": "https://github.com/composer/semver/tree/3.4.0" }, "funding": [ { @@ -6218,7 +6212,7 @@ "type": "tidelift" } ], - "time": "2022-04-01T19:23:25+00:00" + "time": "2023-08-31T09:50:34+00:00" }, { "name": "composer/xdebug-handler", @@ -6323,94 +6317,22 @@ }, "time": "2019-12-04T15:06:13+00:00" }, - { - "name": "doctrine/annotations", - "version": "1.13.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08", - "shasum": "" - }, - "require": { - "doctrine/lexer": "1.*", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^0.12.20", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2" - }, - "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.13.2" - }, - "time": "2021-08-05T19:00:23+00:00" - }, { "name": "fakerphp/faker", - "version": "v1.19.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75" + "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/d7f08a622b3346766325488aa32ddc93ccdecc75", - "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", + "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0", + "php": "^7.4 || ^8.0", "psr/container": "^1.0 || ^2.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" }, @@ -6421,7 +6343,8 @@ "bamarni/composer-bin-plugin": "^1.4.1", "doctrine/persistence": "^1.3 || ^2.0", "ext-intl": "*", - "symfony/phpunit-bridge": "^4.4 || ^5.2" + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" }, "suggest": { "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", @@ -6433,7 +6356,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "v1.19-dev" + "dev-main": "v1.21-dev" } }, "autoload": { @@ -6458,9 +6381,9 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.19.0" + "source": "https://github.com/FakerPHP/Faker/tree/v1.23.0" }, - "time": "2022-02-02T17:38:57+00:00" + "time": "2023-06-12T08:44:38+00:00" }, { "name": "felixfbecker/advanced-json-rpc", @@ -6563,6 +6486,67 @@ }, "time": "2022-03-02T22:36:06+00:00" }, + { + "name": "fidry/cpu-core-counter", + "version": "0.5.1", + "source": { + "type": "git", + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "b58e5a3933e541dc286cc91fc4f3898bbc6f1623" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/b58e5a3933e541dc286cc91fc4f3898bbc6f1623", + "reference": "b58e5a3933e541dc286cc91fc4f3898bbc6f1623", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "fidry/makefile": "^0.2.0", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^1.9.2", + "phpstan/phpstan-deprecation-rules": "^1.0.0", + "phpstan/phpstan-phpunit": "^1.2.2", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpunit/phpunit": "^9.5.26 || ^8.5.31", + "theofidry/php-cs-fixer-config": "^1.0", + "webmozarts/strict-phpunit": "^7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Fidry\\CpuCoreCounter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" + } + ], + "description": "Tiny utility to get the number of CPU cores.", + "keywords": [ + "CPU", + "core" + ], + "support": { + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/0.5.1" + }, + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2022-12-24T12:35:10+00:00" + }, { "name": "friends-of-behat/mink-extension", "version": "v2.6.1", @@ -6699,51 +6683,51 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.8.0", + "version": "v3.30.0", "source": { "type": "git", - "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3" + "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", + "reference": "95c64693b2f149966a2bc05a7a4981b0343ea52f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3", - "reference": "cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/95c64693b2f149966a2bc05a7a4981b0343ea52f", + "reference": "95c64693b2f149966a2bc05a7a4981b0343ea52f", "shasum": "" }, "require": { - "composer/semver": "^3.2", + "composer/semver": "^3.3", "composer/xdebug-handler": "^3.0.3", - "doctrine/annotations": "^1.13", "ext-json": "*", "ext-tokenizer": "*", "php": "^7.4 || ^8.0", - "php-cs-fixer/diff": "^2.0", + "sebastian/diff": "^4.0 || ^5.0", "symfony/console": "^5.4 || ^6.0", "symfony/event-dispatcher": "^5.4 || ^6.0", "symfony/filesystem": "^5.4 || ^6.0", "symfony/finder": "^5.4 || ^6.0", "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.23", - "symfony/polyfill-php80": "^1.25", - "symfony/polyfill-php81": "^1.25", + "symfony/polyfill-mbstring": "^1.27", + "symfony/polyfill-php80": "^1.27", + "symfony/polyfill-php81": "^1.27", "symfony/process": "^5.4 || ^6.0", "symfony/stopwatch": "^5.4 || ^6.0" }, "require-dev": { + "facile-it/paraunit": "^1.3 || ^2.0", "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^1.5", - "mikey179/vfsstream": "^1.6.10", - "php-coveralls/php-coveralls": "^2.5.2", + "keradus/cli-executor": "^2.0", + "mikey179/vfsstream": "^1.6.11", + "php-coveralls/php-coveralls": "^2.5.3", "php-cs-fixer/accessible-object": "^1.1", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.15", + "phpspec/prophecy": "^1.16", "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.5", - "phpunitgoodpractices/traits": "^1.9.1", - "symfony/phpunit-bridge": "^6.0", + "phpunitgoodpractices/polyfill": "^1.6", + "phpunitgoodpractices/traits": "^1.9.2", + "symfony/phpunit-bridge": "^6.2.3", "symfony/yaml": "^5.4 || ^6.0" }, "suggest": { @@ -6774,9 +6758,15 @@ } ], "description": "A tool to automatically fix PHP code style", + "keywords": [ + "Static code analysis", + "fixer", + "standards", + "static analysis" + ], "support": { - "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.8.0" + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.30.0" }, "funding": [ { @@ -6784,7 +6774,7 @@ "type": "github" } ], - "time": "2022-03-18T17:20:59+00:00" + "time": "2023-09-26T22:10:43+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -6839,26 +6829,24 @@ }, { "name": "masterminds/html5", - "version": "2.7.5", + "version": "2.8.1", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "f640ac1bdddff06ea333a920c95bbad8872429ab" + "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f640ac1bdddff06ea333a920c95bbad8872429ab", - "reference": "f640ac1bdddff06ea333a920c95bbad8872429ab", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f47dcf3c70c584de14f21143c55d9939631bc6cf", + "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf", "shasum": "" }, "require": { - "ext-ctype": "*", "ext-dom": "*", - "ext-libxml": "*", "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7" + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8" }, "type": "library", "extra": { @@ -6902,44 +6890,46 @@ ], "support": { "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.7.5" + "source": "https://github.com/Masterminds/html5-php/tree/2.8.1" }, - "time": "2021-07-01T14:25:37+00:00" + "time": "2023-05-10T11:58:31+00:00" }, { "name": "mockery/mockery", - "version": "1.5.0", + "version": "1.6.6", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac" + "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac", - "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac", + "url": "https://api.github.com/repos/mockery/mockery/zipball/b8e0bb7d8c604046539c1115994632c74dcb361e", + "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e", "shasum": "" }, "require": { "hamcrest/hamcrest-php": "^2.0.1", "lib-pcre": ">=7.0", - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "conflict": { "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.3" + "phpunit/phpunit": "^8.5 || ^9.6.10", + "psalm/plugin-phpunit": "^0.18.4", + "symplify/easy-coding-standard": "^11.5.0", + "vimeo/psalm": "^4.30" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, "autoload": { - "psr-0": { - "Mockery": "library/" + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" } }, "notification-url": "https://packagist.org/downloads/", @@ -6950,12 +6940,20 @@ { "name": "Pádraic Brady", "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" + "homepage": "https://github.com/padraic", + "role": "Author" }, { "name": "Dave Marshall", "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "http://davedevelopment.co.uk" + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" } ], "description": "Mockery is a simple yet flexible PHP mock object framework", @@ -6973,23 +6971,26 @@ "testing" ], "support": { + "docs": "https://docs.mockery.io/", "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/1.5.0" + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" }, - "time": "2022-01-20T13:18:17+00:00" + "time": "2023-08-09T00:03:52+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.11.0", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { @@ -7027,7 +7028,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { @@ -7035,20 +7036,20 @@ "type": "tidelift" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { "name": "netresearch/jsonmapper", - "version": "v4.0.0", + "version": "v4.2.0", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d" + "reference": "f60565f8c0566a31acf06884cdaa591867ecc956" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", - "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/f60565f8c0566a31acf06884cdaa591867ecc956", + "reference": "f60565f8c0566a31acf06884cdaa591867ecc956", "shasum": "" }, "require": { @@ -7084,22 +7085,22 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.0.0" + "source": "https://github.com/cweiske/jsonmapper/tree/v4.2.0" }, - "time": "2020-12-01T19:48:11+00:00" + "time": "2023-04-09T17:37:40+00:00" }, { "name": "nikic/php-parser", - "version": "v4.14.0", + "version": "v4.17.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" + "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", "shasum": "" }, "require": { @@ -7140,62 +7141,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" }, - "time": "2022-05-31T20:59:12+00:00" - }, - { - "name": "openlss/lib-array2xml", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/nullivex/lib-array2xml.git", - "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nullivex/lib-array2xml/zipball/a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", - "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "type": "library", - "autoload": { - "psr-0": { - "LSS": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Bryan Tong", - "email": "bryan@nullivex.com", - "homepage": "https://www.nullivex.com" - }, - { - "name": "Tony Butler", - "email": "spudz76@gmail.com", - "homepage": "https://www.nullivex.com" - } - ], - "description": "Array2XML conversion library credit to lalit.org", - "homepage": "https://www.nullivex.com", - "keywords": [ - "array", - "array conversion", - "xml", - "xml conversion" - ], - "support": { - "issues": "https://github.com/nullivex/lib-array2xml/issues", - "source": "https://github.com/nullivex/lib-array2xml/tree/master" - }, - "time": "2019-03-29T20:06:56+00:00" + "time": "2023-08-13T19:53:39+00:00" }, { "name": "phar-io/manifest", @@ -7308,58 +7256,6 @@ }, "time": "2022-02-21T01:04:05+00:00" }, - { - "name": "php-cs-fixer/diff", - "version": "v2.0.2", - "source": { - "type": "git", - "url": "https://github.com/PHP-CS-Fixer/diff.git", - "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3", - "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", - "symfony/process": "^3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "sebastian/diff v3 backport support for PHP 5.6+", - "homepage": "https://github.com/PHP-CS-Fixer", - "keywords": [ - "diff" - ], - "support": { - "issues": "https://github.com/PHP-CS-Fixer/diff/issues", - "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2" - }, - "time": "2020-10-14T08:32:19+00:00" - }, { "name": "phpdocumentor/reflection-common", "version": "2.2.0", @@ -7472,25 +7368,33 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.1", + "version": "1.7.3", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "77a32518733312af16a44300404e945338981de3" + "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", - "reference": "77a32518733312af16a44300404e945338981de3", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", + "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "doctrine/deprecations": "^1.0", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.13" }, "require-dev": { "ext-tokenizer": "*", - "psalm/phar": "^4.8" + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" }, "type": "library", "extra": { @@ -7513,99 +7417,141 @@ "email": "me@mikevanriel.com" } ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.3" + }, + "time": "2023-08-12T11:01:26+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "1.24.2", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "bcad8d995980440892759db0c32acae7c8e79442" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bcad8d995980440892759db0c32acae7c8e79442", + "reference": "bcad8d995980440892759db0c32acae7c8e79442", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^4.15", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.2" }, - "time": "2022-03-15T21:29:03+00:00" + "time": "2023-09-26T12:28:12+00:00" }, { - "name": "phpspec/prophecy", - "version": "v1.15.0", + "name": "phpstan/phpstan", + "version": "1.10.35", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" + "url": "https://github.com/phpstan/phpstan.git", + "reference": "e730e5facb75ffe09dfb229795e8c01a459f26c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e730e5facb75ffe09dfb229795e8c01a459f26c3", + "reference": "e730e5facb75ffe09dfb229795e8c01a459f26c3", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" + "php": "^7.2|^8.0" }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" + "conflict": { + "phpstan/phpstan-shim": "*" }, + "bin": [ + "phpstan", + "phpstan.phar" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } + "files": [ + "bootstrap.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "url": "https://github.com/ondrejmirtes", + "type": "github" }, { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" + "url": "https://github.com/phpstan", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" } ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" - }, - "time": "2021-12-08T12:19:24+00:00" + "time": "2023-09-19T15:27:56+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.15", + "version": "9.2.29", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6a3a87ac2bbe33b25042753df8195ba4aa534c76", + "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", + "nikic/php-parser": "^4.15", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -7620,8 +7566,8 @@ "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { @@ -7654,7 +7600,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.29" }, "funding": [ { @@ -7662,7 +7609,7 @@ "type": "github" } ], - "time": "2022-03-07T09:28:20+00:00" + "time": "2023-09-19T04:57:46+00:00" }, { "name": "phpunit/php-file-iterator", @@ -7907,20 +7854,20 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.20", + "version": "9.6.13", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" + "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", - "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f3d767f7f9e191eab4189abe41ab37797e30b1be", + "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", + "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -7931,31 +7878,26 @@ "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.13", + "phpunit/php-code-coverage": "^9.2.28", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", "phpunit/php-timer": "^5.0.2", "sebastian/cli-parser": "^1.0.1", "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", + "sebastian/comparator": "^4.0.8", "sebastian/diff": "^4.0.3", "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", + "sebastian/exporter": "^4.0.5", "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.0", + "sebastian/type": "^3.2", "sebastian/version": "^3.0.2" }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "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" }, "bin": [ "phpunit" @@ -7963,7 +7905,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-master": "9.6-dev" } }, "autoload": { @@ -7994,7 +7936,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.13" }, "funding": [ { @@ -8004,9 +7947,69 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2023-09-19T05:39:22+00:00" + }, + { + "name": "rector/rector", + "version": "0.18.4", + "source": { + "type": "git", + "url": "https://github.com/rectorphp/rector.git", + "reference": "d99a91176b7eb7f2b6d509a6486b3661c6dfd370" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/d99a91176b7eb7f2b6d509a6486b3661c6dfd370", + "reference": "d99a91176b7eb7f2b6d509a6486b3661c6dfd370", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "phpstan/phpstan": "^1.10.31" + }, + "conflict": { + "rector/rector-doctrine": "*", + "rector/rector-downgrade-php": "*", + "rector/rector-phpunit": "*", + "rector/rector-symfony": "*" + }, + "bin": [ + "bin/rector" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Instant Upgrade and Automated Refactoring of any PHP code", + "keywords": [ + "automation", + "dev", + "migration", + "refactoring" + ], + "support": { + "issues": "https://github.com/rectorphp/rector/issues", + "source": "https://github.com/rectorphp/rector/tree/0.18.4" + }, + "funding": [ + { + "url": "https://github.com/tomasvotruba", + "type": "github" } ], - "time": "2022-04-01T12:37:26+00:00" + "time": "2023-09-25T17:07:54+00:00" }, { "name": "roave/security-advisories", @@ -8014,20 +8017,23 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "bf362097fbfe4580b99b696dd8208b24ffd112b2" + "reference": "7818a0d2a1d8c7eb6dcd2d0bcdc7f1e3e3caafe3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/bf362097fbfe4580b99b696dd8208b24ffd112b2", - "reference": "bf362097fbfe4580b99b696dd8208b24ffd112b2", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/7818a0d2a1d8c7eb6dcd2d0bcdc7f1e3e3caafe3", + "reference": "7818a0d2a1d8c7eb6dcd2d0bcdc7f1e3e3caafe3", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", - "admidio/admidio": "<4.1.9", + "admidio/admidio": "<4.2.11", "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", + "aheinze/cockpit": "<2.2", + "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", "akaunting/akaunting": "<2.1.13", - "alextselegidis/easyappointments": "<=1.4.3", + "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", + "alextselegidis/easyappointments": "<1.5", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", "amphp/artax": "<1.0.6|>=2,<2.0.6", @@ -8035,17 +8041,34 @@ "amphp/http-client": ">=4,<4.4", "anchorcms/anchor-cms": "<=0.12.7", "andreapollastri/cipi": "<=3.1.15", - "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6", - "appwrite/server-ce": "<0.11.1|>=0.12,<0.12.2", + "andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<1.0.2|>=2,<2.2.5", + "apache-solr-for-typo3/solr": "<2.8.3", + "apereo/phpcas": "<1.6", + "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6|>=2.6,<2.7.10|>=3,<3.0.12|>=3.1,<3.1.3", + "appwrite/server-ce": "<=1.2.1", + "arc/web": "<3", "area17/twill": "<1.2.5|>=2,<2.5.3", - "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99", + "artesaos/seotools": "<0.17.2", + "asymmetricrypt/asymmetricrypt": "<9.9.99", + "athlon1600/php-proxy": "<=5.1", + "athlon1600/php-proxy-app": "<=3", + "austintoddj/canvas": "<=3.4.2", + "automad/automad": "<1.8", + "awesome-support/awesome-support": "<=6.0.7", "aws/aws-sdk-php": ">=3,<3.2.1", + "azuracast/azuracast": "<0.18.3", + "backdrop/backdrop": "<1.24.2", + "backpack/crud": "<3.4.9", + "badaso/core": "<2.7", "bagisto/bagisto": "<0.1.5", "barrelstrength/sprout-base-email": "<1.2.7", "barrelstrength/sprout-forms": "<3.9", "barryvdh/laravel-translation-manager": "<0.6.2", - "baserproject/basercms": "<4.5.4", - "billz/raspap-webgui": "<=2.6.6", + "barzahlen/barzahlen-php": "<2.0.1", + "baserproject/basercms": "<4.7.5", + "bassjobsen/bootstrap-3-typeahead": ">4.0.2", + "bigfork/silverstripe-form-capture": ">=3,<3.1.1", + "billz/raspap-webgui": "<=2.9.2", "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3", "bmarshall511/wordpress_zero_spam": "<5.2.13", "bolt/bolt": "<3.7.2", @@ -8053,38 +8076,53 @@ "bottelet/flarepoint": "<2.2.1", "brightlocal/phpwhois": "<=4.2.5", "brotkrueml/codehighlight": "<2.7", + "brotkrueml/schema": "<1.13.1|>=2,<2.5.1", + "brotkrueml/typo3-matomo-integration": "<1.3.2", "buddypress/buddypress": "<7.2.1", - "bugsnag/bugsnag-laravel": ">=2,<2.0.2", + "bugsnag/bugsnag-laravel": "<2.0.2", "bytefury/crater": "<6.0.2", "cachethq/cachet": "<2.5.1", - "cakephp/cakephp": "<3.10.3|>=4,<4.0.6", + "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", + "cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", "cardgate/magento2": "<2.0.33", + "cardgate/woocommerce": "<=3.1.15", "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", "cartalyst/sentry": "<=2.1.6", "catfan/medoo": "<1.7.5", - "centreon/centreon": "<20.10.7", + "cecil/cecil": "<7.47.1", + "centreon/centreon": "<22.10.0.0-beta1", "cesnet/simplesamlphp-module-proxystatistics": "<3.1", + "chriskacerguis/codeigniter-restserver": "<=2.7.1", + "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", + "cockpit-hq/cockpit": "<=2.6.3", "codeception/codeception": "<3.1.3|>=4,<4.1.22", - "codeigniter/framework": "<=3.0.6", - "codeigniter4/framework": "<4.1.9", + "codeigniter/framework": "<3.1.9", + "codeigniter4/framework": "<4.3.5", + "codeigniter4/shield": "<1.0.0.0-beta4", "codiad/codiad": "<=2.8.4", - "composer/composer": "<1.10.26|>=2-alpha.1,<2.2.12|>=2.3,<2.3.5", - "concrete5/concrete5": "<9", - "concrete5/core": "<8.5.7", + "composer/composer": "<1.10.26|>=2,<2.2.12|>=2.3,<2.3.5", + "concrete5/concrete5": "<9.2", + "concrete5/core": "<8.5.8|>=9,<9.1", "contao-components/mediaelement": ">=2.14.2,<2.21.1", - "contao/contao": ">=4,<4.4.56|>=4.5,<4.9.18|>=4.10,<4.11.7|>=4.13,<4.13.3", + "contao/contao": ">=4,<4.4.56|>=4.5,<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4", "contao/core": ">=2,<3.5.39", - "contao/core-bundle": "<4.9.18|>=4.10,<4.11.7|>=4.13,<4.13.3|= 4.10.0", + "contao/core-bundle": "<4.9.42|>=4.10,<4.13.28|>=5,<5.1.10", "contao/listing-bundle": ">=4,<4.4.8", "contao/managed-edition": "<=1.5", - "craftcms/cms": "<3.7.36", - "croogo/croogo": "<3.0.7", - "cuyz/valinor": ">=0.5,<0.7", + "cosenary/instagram": "<=2.3", + "craftcms/cms": "<=4.4.14", + "croogo/croogo": "<4", + "cuyz/valinor": "<0.12", "czproject/git-php": "<4.0.3", "darylldoyle/safe-svg": "<1.9.10", "datadog/dd-trace": ">=0.30,<0.30.2", + "datatables/datatables": "<1.10.10", "david-garcia/phpwhois": "<=4.3.1", + "dbrisinajumi/d2files": "<1", + "dcat/laravel-admin": "<=2.1.3.0-beta", + "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3", "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1", + "desperado/xml-bundle": "<=0.1.7", "directmailteam/direct-mail": "<5.2.4", "doctrine/annotations": ">=1,<1.2.7", "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", @@ -8095,260 +8133,362 @@ "doctrine/mongodb-odm": ">=1,<1.0.2", "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", - "dolibarr/dolibarr": "= 12.0.5|<16|>= 3.3.beta1, < 13.0.2", - "dompdf/dompdf": "<1.2.1", - "drupal/core": ">=7,<7.88|>=8,<9.2.13|>=9.3,<9.3.6", - "drupal/drupal": ">=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", + "dolibarr/dolibarr": "<17.0.1", + "dompdf/dompdf": "<2.0.2|==2.0.2", + "drupal/core": "<9.4.14|>=9.5,<9.5.8|>=10,<10.0.8", + "drupal/drupal": ">=6,<6.38|>=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", "dweeves/magmi": "<=0.7.24", "ecodev/newsletter": "<=4", "ectouch/ectouch": "<=2.7.2", + "elefant/cms": "<2.0.7", "elgg/elgg": "<3.3.24|>=4,<4.0.5", + "encore/laravel-admin": "<=1.8.19", "endroid/qr-code-bundle": "<3.4.2", "enshrined/svg-sanitize": "<0.15", "erusev/parsedown": "<1.7.2", "ether/logs": "<3.0.4", - "ezsystems/demobundle": ">=5.4,<5.4.6.1", + "exceedone/exment": "<4.4.3|>=5,<5.0.3", + "exceedone/laravel-admin": "<2.2.3|==3", + "ezsystems/demobundle": ">=5.4,<5.4.6.1-dev", "ezsystems/ez-support-tools": ">=2.2,<2.2.3", - "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1", - "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1|>=5.4,<5.4.11.1|>=2017.12,<2017.12.0.1", + "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1-dev", + "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1-dev|>=5.4,<5.4.11.1-dev|>=2017.12,<2017.12.0.1-dev", "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24", - "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.27", + "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26", "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", - "ezsystems/ezplatform-kernel": "<=1.2.5|>=1.3,<1.3.19", + "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", + "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.26", "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", - "ezsystems/ezplatform-richtext": ">=2.3,<=2.3.7", + "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1-dev", "ezsystems/ezplatform-user": ">=1,<1.0.1", - "ezsystems/ezpublish-kernel": "<=6.13.8.1|>=7,<7.5.29", - "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.3.5.1", + "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.30", + "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.03.5.1", "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", - "ezsystems/repository-forms": ">=2.3,<2.3.2.1", + "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15", "ezyang/htmlpurifier": "<4.1.1", "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", - "facturascripts/facturascripts": "<=2022.8", + "facturascripts/facturascripts": "<=2022.08", "feehi/cms": "<=2.1.1", - "feehi/feehicms": "<=0.1.3", + "feehi/feehicms": "<=2.1.1", "fenom/fenom": "<=2.12.1", "filegator/filegator": "<7.8", - "firebase/php-jwt": "<2", - "flarum/core": ">=1,<=1.0.1", - "flarum/sticky": ">=0.1-beta.14,<=0.1-beta.15", - "flarum/tags": "<=0.1-beta.13", + "firebase/php-jwt": "<6", + "fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2", + "fixpunkt/fp-newsletter": "<1.1.1|>=2,<2.1.2|>=2.2,<3.2.6", + "flarum/core": "<1.8", + "flarum/framework": "<1.8", + "flarum/mentions": "<1.6.3", + "flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15", + "flarum/tags": "<=0.1.0.0-beta13", "fluidtypo3/vhs": "<5.1.1", + "fof/byobu": ">=0.3.0.0-beta2,<1.1.7", "fof/upload": "<1.2.3", "fooman/tcpdf": "<6.2.22", "forkcms/forkcms": "<5.11.1", "fossar/tcpdf-parser": "<6.2.22", - "francoisjacquet/rosariosis": "<9", + "francoisjacquet/rosariosis": "<11", + "frappant/frp-form-answers": "<3.1.2|>=4,<4.0.2", "friendsofsymfony/oauth2-php": "<1.3", "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", - "froala/wysiwyg-editor": "<3.2.7", - "froxlor/froxlor": "<=0.10.22", + "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", + "froala/wysiwyg-editor": "<3.2.7|>=4.0.1,<=4.1.1", + "froxlor/froxlor": "<2.1", "fuel/core": "<1.8.1", + "funadmin/funadmin": "<=3.2|>=3.3.2,<=3.3.3", "gaoming13/wechat-php-sdk": "<=1.10.2", "genix/cms": "<=1.1.11", - "getgrav/grav": "<1.7.33", - "getkirby/cms": "<3.5.8", + "getgrav/grav": "<=1.7.42.1", + "getkirby/cms": "<3.5.8.3-dev|>=3.6,<3.6.6.3-dev|>=3.7,<3.7.5.2-dev|>=3.8,<3.8.4.1-dev|>=3.9,<3.9.6", + "getkirby/kirby": "<=2.5.12", "getkirby/panel": "<2.5.14", + "getkirby/starterkit": "<=3.7.0.2", "gilacms/gila": "<=1.11.4", + "gleez/cms": "<=1.2|==2", "globalpayments/php-sdk": "<2", + "gogentooss/samlbase": "<1.2.7", "google/protobuf": "<3.15", "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", - "gree/jose": "<=2.2", + "gree/jose": "<2.2.1", "gregwar/rst": "<1.0.3", - "grumpydictator/firefly-iii": "<5.6.5", - "guzzlehttp/guzzle": "<6.5.7|>=7,<7.4.4", - "guzzlehttp/psr7": "<1.8.4|>=2,<2.1.1", - "helloxz/imgurl": "= 2.31|<=2.31", + "grumpydictator/firefly-iii": "<6", + "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", + "guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5", + "haffner/jh_captcha": "<=2.1.3|>=3,<=3.0.2", + "harvesthq/chosen": "<1.8.7", + "helloxz/imgurl": "<=2.31", + "hhxsv5/laravel-s": "<3.7.36", "hillelcoren/invoice-ninja": "<5.3.35", + "himiklab/yii2-jqgrid-widget": "<1.0.8", "hjue/justwriting": "<=1", "hov/jobfair": "<1.0.13|>=2,<2.0.2", + "httpsoft/http-message": "<1.0.12", "hyn/multi-tenant": ">=5.6,<5.7.2", - "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4", + "ibexa/admin-ui": ">=4.2,<4.2.3", + "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3", + "ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3", "ibexa/post-install": "<=1.0.4", + "ibexa/user": ">=4,<4.4.3", "icecoder/icecoder": "<=8.1", + "idno/known": "<=1.3.1", "illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10", "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<=4.1.99999|>=4.2,<=4.2.99999|>=5,<=5.0.99999|>=5.1,<=5.1.99999|>=5.2,<=5.2.99999|>=5.3,<=5.3.99999|>=5.4,<=5.4.99999|>=5.5,<=5.5.49|>=5.6,<=5.6.99999|>=5.7,<=5.7.99999|>=5.8,<=5.8.99999|>=6,<6.18.31|>=7,<7.22.4", "illuminate/database": "<6.20.26|>=7,<7.30.5|>=8,<8.40", "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", - "impresscms/impresscms": "<=1.4.3", - "in2code/femanager": "<5.5.1|>=6,<6.3.1", - "intelliants/subrion": "<=4.2.1", + "impresscms/impresscms": "<=1.4.5", + "in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.1", + "in2code/ipandlanguageredirect": "<5.1.2", + "in2code/lux": "<17.6.1|>=18,<24.0.2", + "innologi/typo3-appointments": "<2.0.6", + "intelliants/subrion": "<4.2.2", + "islandora/islandora": ">=2,<2.4.1", "ivankristianto/phpwhois": "<=4.3", "jackalope/jackalope-doctrine-dbal": "<1.7.4", "james-heinrich/getid3": "<1.9.21", + "james-heinrich/phpthumb": "<1.7.12", + "jasig/phpcas": "<1.3.3", + "jcbrand/converse.js": "<3.3.3", + "joomla/application": "<1.0.13", "joomla/archive": "<1.1.12|>=2,<2.0.1", "joomla/filesystem": "<1.6.2|>=2,<2.0.1", "joomla/filter": "<1.4.4|>=2,<2.0.1", + "joomla/framework": ">=2.5.4,<=3.8.12", "joomla/input": ">=2,<2.0.2", + "joomla/joomla-cms": "<3.9.12", "joomla/session": "<1.3.1", + "joyqi/hyper-down": "<=2.4.27", "jsdecena/laracom": "<2.0.9", "jsmitty12/phpwhois": "<5.1", "kazist/phpwhois": "<=4.2.6", + "kelvinmo/simplexrd": "<3.1.1", "kevinpapst/kimai2": "<1.16.7", - "kitodo/presentation": "<3.1.2", + "khodakhah/nodcms": "<=3", + "kimai/kimai": "<1.1", + "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", "klaviyo/magento2-extension": ">=1,<3", + "knplabs/knp-snappy": "<=1.4.2", + "kohana/core": "<3.3.3", + "krayin/laravel-crm": "<1.2.2", "kreait/firebase-php": ">=3.2,<3.8.1", "la-haute-societe/tcpdf": "<6.2.22", + "laminas/laminas-diactoros": "<2.18.1|==2.19|==2.20|==2.21|==2.22|==2.23|>=2.24,<2.24.2|>=2.25,<2.25.2", "laminas/laminas-form": "<2.17.1|>=3,<3.0.2|>=3.1,<3.1.1", "laminas/laminas-http": "<2.14.2", "laravel/fortify": "<1.11.1", - "laravel/framework": "<6.20.42|>=7,<7.30.6|>=8,<8.75", - "laravel/laravel": "<=9.1.8", + "laravel/framework": "<6.20.44|>=7,<7.30.6|>=8,<8.75", "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", "latte/latte": "<2.10.8", - "lavalite/cms": "<=5.8", + "lavalite/cms": "<=9", "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", "league/commonmark": "<0.18.3", "league/flysystem": "<1.1.4|>=2,<2.1.1", + "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", - "librenms/librenms": "<22.4", + "librenms/librenms": "<2017.08.18", + "liftkit/database": "<2.13.2", "limesurvey/limesurvey": "<3.27.19", "livehelperchat/livehelperchat": "<=3.91", "livewire/livewire": ">2.2.4,<2.2.6", "lms/routes": "<2.1.1", "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", "luyadev/yii-helpers": "<1.2.1", - "magento/community-edition": ">=2,<2.2.10|>=2.3,<2.3.3", - "magento/magento1ce": "<1.9.4.3", - "magento/magento1ee": ">=1,<1.14.4.3", - "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2-p.2", + "magento/community-edition": "<=2.4", + "magento/magento1ce": "<1.9.4.3-dev", + "magento/magento1ee": ">=1,<1.14.4.3-dev", + "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2.0-patch2", + "maikuolan/phpmussel": ">=1,<1.6", + "mantisbt/mantisbt": "<=2.25.5", "marcwillmann/turn": "<0.3.3", "matyhtf/framework": "<3.0.6", - "mautic/core": "<4.3|= 2.13.1", + "mautic/core": "<4.3", "mediawiki/core": ">=1.27,<1.27.6|>=1.29,<1.29.3|>=1.30,<1.30.2|>=1.31,<1.31.9|>=1.32,<1.32.6|>=1.32.99,<1.33.3|>=1.33.99,<1.34.3|>=1.34.99,<1.35", - "microweber/microweber": "<1.3", + "mediawiki/matomo": "<2.4.3", + "melisplatform/melis-asset-manager": "<5.0.1", + "melisplatform/melis-cms": "<5.0.1", + "melisplatform/melis-front": "<5.0.1", + "mezzio/mezzio-swoole": "<3.7|>=4,<4.3", + "mgallegos/laravel-jqgrid": "<=1.3", + "microweber/microweber": "<=1.3.4", "miniorange/miniorange-saml": "<1.4.3", "mittwald/typo3_forum": "<1.2.1", - "modx/revolution": "<= 2.8.3-pl|<2.8", + "mobiledetect/mobiledetectlib": "<2.8.32", + "modx/revolution": "<=2.8.3.0-patch", "mojo42/jirafeau": "<4.4", + "mongodb/mongodb": ">=1,<1.9.2", "monolog/monolog": ">=1.8,<1.12", - "moodle/moodle": "<4.0.1", + "moodle/moodle": "<4.2.0.0-RC2-dev|==4.2", + "movim/moxl": ">=0.8,<=0.10", + "mpdf/mpdf": "<=7.1.7", "mustache/mustache": ">=2,<2.14.1", "namshi/jose": "<2.2", "neoan3-apps/template": "<1.1.1", - "neorazorx/facturascripts": "<2022.4", + "neorazorx/facturascripts": "<2022.04", "neos/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", "neos/form": ">=1.2,<4.3.3|>=5,<5.0.9|>=5.1,<5.1.3", "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.9.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2", + "neos/neos-ui": "<=8.3.3", "neos/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", "netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15", "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", - "nilsteampassnet/teampass": "<=2.1.27.36", + "nilsteampassnet/teampass": "<3.0.10", + "notrinos/notrinos-erp": "<=0.7", "noumo/easyii": "<=0.9", - "nukeviet/nukeviet": "<4.3.4", + "nukeviet/nukeviet": "<4.5.02", + "nyholm/psr7": "<1.6.1", "nystudio107/craft-seomatic": "<3.4.12", "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", "october/backend": "<1.1.2", - "october/cms": "= 1.1.1|= 1.0.471|= 1.0.469|>=1.0.319,<1.0.469", - "october/october": ">=1.0.319,<1.0.466|>=2.1,<2.1.12", + "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", + "october/october": "<=3.4.4", "october/rain": "<1.0.472|>=1.1,<1.1.2", - "october/system": "<1.0.475|>=1.1,<1.1.11|>=2,<2.1.27", + "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.0.66", "onelogin/php-saml": "<2.10.4", "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", "open-web-analytics/open-web-analytics": "<1.7.4", - "opencart/opencart": "<=3.0.3.2", + "opencart/opencart": "<=3.0.3.7", "openid/php-openid": "<2.3", - "openmage/magento-lts": "<19.4.15|>=20,<20.0.13", - "orchid/platform": ">=9,<9.4.4", + "openmage/magento-lts": "<=19.5|>=20,<=20.1", + "opensource-workshop/connect-cms": "<1.7.2|>=2,<2.3.2", + "orchid/platform": ">=9,<9.4.4|>=14.0.0.0-alpha4,<14.5", + "oro/commerce": ">=4.1,<5.0.6", "oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7", "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<4.2.8", + "oxid-esales/oxideshop-ce": "<4.5", + "packbackbooks/lti-1-3-php-library": "<5", "padraic/humbug_get_contents": "<1.1.2", - "pagarme/pagarme-php": ">=0,<3", + "pagarme/pagarme-php": "<3", "pagekit/pagekit": "<=1.0.18", "paragonie/random_compat": "<2", "passbolt/passbolt_api": "<2.11", "paypal/merchant-sdk-php": "<3.12", "pear/archive_tar": "<1.4.14", "pear/crypt_gpg": "<1.6.7", + "pear/pear": "<=1.10.1", "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", "personnummer/personnummer": "<3.0.2", "phanan/koel": "<5.1.4", + "php-mod/curl": "<2.3.2", + "phpbb/phpbb": "<3.2.10|>=3.3,<3.3.1", "phpfastcache/phpfastcache": "<6.1.5|>=7,<7.1.2|>=8,<8.0.7", "phpmailer/phpmailer": "<6.5", "phpmussel/phpmussel": ">=1,<1.6", - "phpmyadmin/phpmyadmin": "<5.1.3", + "phpmyadmin/phpmyadmin": "<5.2.1", + "phpmyfaq/phpmyfaq": "<=3.1.7", "phpoffice/phpexcel": "<1.8", "phpoffice/phpspreadsheet": "<1.16", - "phpseclib/phpseclib": "<2.0.31|>=3,<3.0.7", - "phpservermon/phpservermon": "<=3.5.2", + "phpseclib/phpseclib": "<2.0.31|>=3,<3.0.19", + "phpservermon/phpservermon": "<3.6", + "phpsysinfo/phpsysinfo": "<3.2.5", "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5,<5.6.3", "phpwhois/phpwhois": "<=4.2.5", "phpxmlrpc/extras": "<0.6.1", + "phpxmlrpc/phpxmlrpc": "<4.9.2", + "pi/pi": "<=2.5", + "pimcore/admin-ui-classic-bundle": "<1.1.2", + "pimcore/customer-management-framework-bundle": "<3.4.2", "pimcore/data-hub": "<1.2.4", - "pimcore/pimcore": "<10.4", + "pimcore/perspective-editor": "<1.5.1", + "pimcore/pimcore": "<10.6.8", + "pixelfed/pixelfed": "<=0.11.4", "pocketmine/bedrock-protocol": "<8.0.2", - "pocketmine/pocketmine-mp": ">= 4.0.0-BETA5, < 4.4.2|<4.2.10", + "pocketmine/pocketmine-mp": "<=4.23|>=5,<5.3.1", "pressbooks/pressbooks": "<5.18", "prestashop/autoupgrade": ">=4,<4.10.1", - "prestashop/contactform": ">1.0.1,<4.3", + "prestashop/blockwishlist": ">=2,<2.1.1", + "prestashop/contactform": ">=1.0.1,<4.3", "prestashop/gamification": "<2.3.2", - "prestashop/prestashop": ">=1.7,<=1.7.8.2", - "prestashop/productcomments": ">=4,<4.2.1", + "prestashop/prestashop": "<=8.1", + "prestashop/productcomments": "<5.0.2", "prestashop/ps_emailsubscription": "<2.6.1", "prestashop/ps_facetedsearch": "<3.4.1", "prestashop/ps_linklist": "<3.1", "privatebin/privatebin": "<1.4", - "propel/propel": ">=2-alpha.1,<=2-alpha.7", + "processwire/processwire": "<=3.0.200", + "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", "propel/propel1": ">=1,<=1.7.1", "pterodactyl/panel": "<1.7", + "ptheofan/yii2-statemachine": ">=2", "ptrofimov/beanstalk_console": "<1.7.14", "pusher/pusher-php-server": "<2.2.1", - "pwweb/laravel-core": "<=0.3.6-beta", + "pwweb/laravel-core": "<=0.3.6.0-beta", + "pyrocms/pyrocms": "<=3.9.1", "rainlab/debugbar-plugin": "<3.1", + "rainlab/user-plugin": "<=1.4.5", + "rankmath/seo-by-rank-math": "<=1.0.95", + "rap2hpoutre/laravel-log-viewer": "<0.13", + "react/http": ">=0.7,<1.9", + "really-simple-plugins/complianz-gdpr": "<6.4.2", "remdex/livehelperchat": "<3.99", "rmccue/requests": ">=1.6,<1.8", "robrichards/xmlseclibs": "<3.0.4", + "roots/soil": "<4.1", "rudloff/alltube": "<3.0.3", "s-cart/core": "<6.9", "s-cart/s-cart": "<6.9", "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", - "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9", - "scheb/two-factor-bundle": ">=0,<3.26|>=4,<4.11", + "sabre/dav": "<1.7.11|>=1.8,<1.8.9", + "scheb/two-factor-bundle": "<3.26|>=4,<4.11", "sensiolabs/connect": "<4.2.3", "serluck/phpwhois": "<=4.2.6", - "shopware/core": "<=6.4.9", - "shopware/platform": "<=6.4.9", + "sfroemken/url_redirect": "<=1.2.1", + "sheng/yiicms": "<=1.2", + "shopware/core": "<=6.4.20", + "shopware/platform": "<=6.4.20", "shopware/production": "<=6.3.5.2", - "shopware/shopware": "<5.7.9", + "shopware/shopware": "<=5.7.17", "shopware/storefront": "<=6.4.8.1", "shopxo/shopxo": "<2.2.6", "showdoc/showdoc": "<2.10.4", - "silverstripe/admin": ">=1,<1.8.1", - "silverstripe/assets": ">=1,<1.4.7|>=1.5,<1.5.2", - "silverstripe/cms": "<4.3.6|>=4.4,<4.4.4", + "silverstripe-australia/advancedreports": ">=1,<=2", + "silverstripe/admin": "<1.13.6", + "silverstripe/assets": ">=1,<1.11.1", + "silverstripe/cms": "<4.11.3", "silverstripe/comments": ">=1.3,<1.9.99|>=2,<2.9.99|>=3,<3.1.1", "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", - "silverstripe/framework": "<4.10.1", - "silverstripe/graphql": "<3.5.2|>=4-alpha.1,<4-alpha.2|= 4.0.0-alpha1", + "silverstripe/framework": "<4.13.14|>=5,<5.0.13", + "silverstripe/graphql": "<3.5.2|>=4.0.0.0-alpha1,<4.0.0.0-alpha2|>=4.1.1,<4.1.2|>=4.2.2,<4.2.3", + "silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1", + "silverstripe/recipe-cms": ">=4.5,<4.5.3", "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4", "silverstripe/silverstripe-omnipay": "<2.5.2|>=3,<3.0.2|>=3.1,<3.1.4|>=3.2,<3.2.1", - "silverstripe/subsites": ">=2,<2.1.1", + "silverstripe/subsites": ">=2,<2.6.1", "silverstripe/taxonomy": ">=1.3,<1.3.1|>=2,<2.0.1", "silverstripe/userforms": "<3", + "silverstripe/versioned-admin": ">=1,<1.11.1", "simple-updates/phpwhois": "<=1", - "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4", + "simplesamlphp/saml2": "<1.15.4|>=2,<2.3.8|>=3,<3.1.4", "simplesamlphp/simplesamlphp": "<1.18.6", "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", + "simplesamlphp/simplesamlphp-module-openid": "<1", + "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", "simplito/elliptic-php": "<1.0.6", + "sitegeist/fluid-components": "<3.5", + "sjbr/sr-freecap": "<2.4.6|>=2.5,<2.5.3", + "slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1", "slim/slim": "<2.6", - "smarty/smarty": "<3.1.45|>=4,<4.1.1", - "snipe/snipe-it": "<5.4.4|>= 6.0.0-RC-1, <= 6.0.0-RC-5", + "slub/slub-events": "<3.0.3", + "smarty/smarty": "<3.1.48|>=4,<4.3.1", + "snipe/snipe-it": "<=6.0.14", "socalnick/scn-social-auth": "<1.15.2", "socialiteproviders/steam": "<1.1", - "spipu/html2pdf": "<5.2.4", + "spatie/browsershot": "<3.57.4", + "spipu/html2pdf": "<5.2.8", + "spoon/library": "<1.4.1", "spoonity/tcpdf": "<6.2.22", "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", - "ssddanbrown/bookstack": "<22.2.3", - "statamic/cms": "<3.2.39|>=3.3,<3.3.2", - "stormpath/sdk": ">=0,<9.9.99", - "studio-42/elfinder": "<2.1.59", - "subrion/cms": "<=4.2.1", - "sulu/sulu": "= 2.4.0-RC1|<1.6.44|>=2,<2.2.18|>=2.3,<2.3.8", + "ssddanbrown/bookstack": "<22.02.3", + "statamic/cms": "<4.10", + "stormpath/sdk": "<9.9.99", + "studio-42/elfinder": "<2.1.62", + "subhh/libconnect": "<7.0.8|>=8,<8.1", + "sukohi/surpass": "<1", + "sulu/sulu": "<1.6.44|>=2,<2.2.18|>=2.3,<2.3.8|==2.4.0.0-RC1|>=2.5,<2.5.10", + "sumocoders/framework-user-bundle": "<1.4", + "swag/paypal": "<5.4.4", "swiftmailer/swiftmailer": ">=4,<5.4.5", "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", @@ -8358,15 +8498,16 @@ "sylius/sylius": "<1.9.10|>=1.10,<1.10.11|>=1.11,<1.11.2", "symbiote/silverstripe-multivaluefield": ">=3,<3.0.99", "symbiote/silverstripe-queuedjobs": ">=3,<3.0.2|>=3.1,<3.1.4|>=4,<4.0.7|>=4.1,<4.1.2|>=4.2,<4.2.4|>=4.3,<4.3.3|>=4.4,<4.4.3|>=4.5,<4.5.1|>=4.6,<4.6.4", + "symbiote/silverstripe-seed": "<6.0.3", "symbiote/silverstripe-versionedfiles": "<=2.0.3", - "symfont/process": ">=0,<4", + "symfont/process": ">=0", "symfony/cache": ">=3.1,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", "symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", - "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<=5.3.14|>=5.4.3,<=5.4.3|>=6.0.3,<=6.0.3|= 6.0.3|= 5.4.3|= 5.3.14", + "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<=5.3.14|>=5.4.3,<=5.4.3|>=6.0.3,<=6.0.3", "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", - "symfony/http-kernel": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.4.13|>=5,<5.1.5|>=5.2,<5.3.12", + "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", "symfony/maker-bundle": ">=1.27,<1.29.2|>=1.30,<1.31.1", "symfony/mime": ">=4.3,<4.3.8", @@ -8376,74 +8517,103 @@ "symfony/proxy-manager-bridge": ">=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", "symfony/routing": ">=2,<2.0.19", "symfony/security": ">=2,<2.7.51|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.8", - "symfony/security-bundle": ">=2,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11|>=5.3,<5.3.12", + "symfony/security-bundle": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9", "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2", "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", - "symfony/symfony": ">=2,<3.4.49|>=4,<4.4.35|>=5,<5.3.12|>=5.3.14,<=5.3.14|>=5.4.3,<=5.4.3|>=6.0.3,<=6.0.3", + "symfony/symfony": "<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", "symfony/translation": ">=2,<2.0.17", + "symfony/ux-autocomplete": "<2.11.2", "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", - "t3/dce": ">=2.2,<2.6.2", + "t3/dce": "<0.11.5|>=2.2,<2.6.2", "t3g/svg-sanitizer": "<1.0.3", "tastyigniter/tastyigniter": "<3.3", + "tcg/voyager": "<=1.4", "tecnickcom/tcpdf": "<6.2.22", "terminal42/contao-tablelookupwizard": "<3.3.5", "thelia/backoffice-default-template": ">=2.1,<2.1.2", - "thelia/thelia": ">=2.1-beta.1,<2.1.3", + "thelia/thelia": ">=2.1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", - "tinymce/tinymce": "<5.10", - "titon/framework": ">=0,<9.9.99", - "topthink/framework": "<6.0.12", - "topthink/think": "<=6.0.9", + "thinkcmf/thinkcmf": "<=5.1.7", + "thorsten/phpmyfaq": "<3.2.0.0-beta2", + "tikiwiki/tiki-manager": "<=17.1", + "tinymce/tinymce": "<5.10.7|>=6,<6.3.1", + "tinymighty/wiki-seo": "<1.2.2", + "titon/framework": "<9.9.99", + "tobiasbg/tablepress": "<=2.0.0.0-RC1", + "topthink/framework": "<6.0.14", + "topthink/think": "<=6.1.1", "topthink/thinkphp": "<=3.2.3", - "tribalsystems/zenario": "<9.2.55826", + "tpwd/ke_search": "<4.0.3|>=4.1,<4.6.6|>=5,<5.0.2", + "tribalsystems/zenario": "<=9.3.57595", "truckersmp/phpwhois": "<=4.3.1", - "twig/twig": "<1.38|>=2,<2.14.11|>=3,<3.3.8", - "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.38|>=9,<9.5.29|>=10,<10.4.19|>=11,<11.5", + "ttskch/pagination-service-provider": "<1", + "twig/twig": "<1.44.7|>=2,<2.15.3|>=3,<3.4.3", + "typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", "typo3/cms-backend": ">=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", - "typo3/cms-core": ">=6.2,<=6.2.56|>=7,<=7.6.52|>=8,<=8.7.41|>=9,<9.5.29|>=10,<10.4.19|>=11,<11.5", + "typo3/cms-core": "<8.7.51|>=9,<9.5.42|>=10,<10.4.39|>=11,<11.5.30|>=12,<12.4.4", + "typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1", "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", + "typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30", "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", + "typo3/html-sanitizer": ">=1,<1.5.1|>=2,<2.1.2", "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", "typo3/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", "ua-parser/uap-php": "<3.8", - "unisharp/laravel-filemanager": "<=2.3", + "uasoft-indonesia/badaso": "<=2.9.7", + "unisharp/laravel-filemanager": "<=2.5.1", "userfrosting/userfrosting": ">=0.3.1,<4.6.3", "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", + "uvdesk/community-skeleton": "<=1.1.1", "vanilla/safecurl": "<0.9.2", "verot/class.upload.php": "<=1.0.3|>=2,<=2.0.4", + "vova07/yii2-fileapi-widget": "<0.1.9", "vrana/adminer": "<4.8.1", + "waldhacker/hcaptcha": "<2.1.2", "wallabag/tcpdf": "<6.2.22", + "wallabag/wallabag": "<=2.6.2", "wanglelecc/laracms": "<=1.0.3", "web-auth/webauthn-framework": ">=3.3,<3.3.4", + "webbuilders-group/silverstripe-kapost-bridge": "<0.4", "webcoast/deferred-image-processing": "<1.0.2", + "webklex/laravel-imap": "<5.3", + "webklex/php-imap": "<5.3", + "webpa/webpa": "<3.1.2", + "wikibase/wikibase": "<=1.39.3", "wikimedia/parsoid": "<0.12.2", "willdurand/js-translation-bundle": "<2.1.1", + "wintercms/winter": "<1.2.3", + "woocommerce/woocommerce": "<6.6", "wp-cli/wp-cli": "<2.5", - "wp-graphql/wp-graphql": "<0.3.5", + "wp-graphql/wp-graphql": "<=1.14.5", "wpanel/wpanel4-cms": "<=4.3.1", - "wwbn/avideo": "<=11.6", + "wpcloud/wp-stateless": "<3.2", + "wwbn/avideo": "<=12.4", + "xataface/xataface": "<3", + "xpressengine/xpressengine": "<3.0.15", "yeswiki/yeswiki": "<4.1", - "yetiforce/yetiforce-crm": "<6.4", + "yetiforce/yetiforce-crm": "<=6.4", "yidashi/yii2cmf": "<=2", "yii2mod/yii2-cms": "<1.9.2", - "yiisoft/yii": ">=1.1.14,<1.1.15", + "yiisoft/yii": "<1.1.27", "yiisoft/yii2": "<2.0.38", "yiisoft/yii2-bootstrap": "<2.0.4", "yiisoft/yii2-dev": "<2.0.43", "yiisoft/yii2-elasticsearch": "<2.0.5", - "yiisoft/yii2-gii": "<2.0.4", + "yiisoft/yii2-gii": "<=2.2.4", "yiisoft/yii2-jui": "<2.0.4", "yiisoft/yii2-redis": "<2.0.8", + "yikesinc/yikes-inc-easy-mailchimp-extender": "<6.8.6", "yoast-seo-for-typo3/yoast_seo": "<7.2.3", "yourls/yourls": "<=1.8.2", + "zencart/zencart": "<=1.5.7.0-beta", "zendesk/zendesk_api_client_php": "<2.2.11", "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2", @@ -8464,8 +8634,17 @@ "zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6", "zendframework/zendframework": "<=3", "zendframework/zendframework1": "<1.12.20", - "zendframework/zendopenid": ">=2,<2.0.2", - "zendframework/zendxml": ">=1,<1.0.1", + "zendframework/zendopenid": "<2.0.2", + "zendframework/zendrest": "<2.0.2", + "zendframework/zendservice-amazon": "<2.0.3", + "zendframework/zendservice-api": "<1", + "zendframework/zendservice-audioscrobbler": "<2.0.2", + "zendframework/zendservice-nirvanix": "<2.0.2", + "zendframework/zendservice-slideshare": "<2.0.2", + "zendframework/zendservice-technorati": "<2.0.2", + "zendframework/zendservice-windowsazure": "<2.0.2", + "zendframework/zendxml": "<1.0.1", + "zenstruck/collection": "<0.2.1", "zetacomponents/mail": "<1.8.2", "zf-commons/zfc-user": "<1.2.2", "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", @@ -8490,6 +8669,9 @@ } ], "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", + "keywords": [ + "dev" + ], "support": { "issues": "https://github.com/Roave/SecurityAdvisories/issues", "source": "https://github.com/Roave/SecurityAdvisories/tree/latest" @@ -8504,7 +8686,7 @@ "type": "tidelift" } ], - "time": "2022-06-10T00:15:15+00:00" + "time": "2023-09-27T09:04:28+00:00" }, { "name": "sebastian/cli-parser", @@ -8675,16 +8857,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { @@ -8737,7 +8919,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -8745,7 +8927,7 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", @@ -8806,16 +8988,16 @@ }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", "shasum": "" }, "require": { @@ -8860,7 +9042,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" }, "funding": [ { @@ -8868,20 +9050,20 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2023-05-07T05:35:17+00:00" }, { "name": "sebastian/environment", - "version": "5.1.4", + "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { @@ -8923,7 +9105,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, "funding": [ { @@ -8931,20 +9113,20 @@ "type": "github" } ], - "time": "2022-04-03T09:37:03+00:00" + "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", "shasum": "" }, "require": { @@ -9000,7 +9182,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" }, "funding": [ { @@ -9008,20 +9190,20 @@ "type": "github" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2022-09-14T06:03:37+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.5", + "version": "5.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + "reference": "bde739e7565280bda77be70044ac1047bc007e34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34", + "reference": "bde739e7565280bda77be70044ac1047bc007e34", "shasum": "" }, "require": { @@ -9064,7 +9246,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6" }, "funding": [ { @@ -9072,7 +9254,7 @@ "type": "github" } ], - "time": "2022-02-14T08:28:10+00:00" + "time": "2023-08-02T09:26:13+00:00" }, { "name": "sebastian/lines-of-code", @@ -9245,16 +9427,16 @@ }, { "name": "sebastian/recursion-context", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", "shasum": "" }, "require": { @@ -9293,10 +9475,10 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" }, "funding": [ { @@ -9304,7 +9486,7 @@ "type": "github" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2023-02-03T06:07:39+00:00" }, { "name": "sebastian/resource-operations", @@ -9363,16 +9545,16 @@ }, { "name": "sebastian/type", - "version": "3.0.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", "shasum": "" }, "require": { @@ -9384,7 +9566,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -9407,7 +9589,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, "funding": [ { @@ -9415,7 +9597,7 @@ "type": "github" } ], - "time": "2022-03-15T09:54:48+00:00" + "time": "2023-02-03T06:13:03+00:00" }, { "name": "sebastian/version", @@ -9470,18 +9652,81 @@ ], "time": "2020-09-28T06:39:44+00:00" }, + { + "name": "spatie/array-to-xml", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/array-to-xml.git", + "reference": "f9ab39c808500c347d5a8b6b13310bd5221e39e7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/f9ab39c808500c347d5a8b6b13310bd5221e39e7", + "reference": "f9ab39c808500c347d5a8b6b13310bd5221e39e7", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": "^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.2", + "pestphp/pest": "^1.21", + "spatie/pest-plugin-snapshots": "^1.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\ArrayToXml\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://freek.dev", + "role": "Developer" + } + ], + "description": "Convert an array to xml", + "homepage": "https://github.com/spatie/array-to-xml", + "keywords": [ + "array", + "convert", + "xml" + ], + "support": { + "source": "https://github.com/spatie/array-to-xml/tree/3.2.0" + }, + "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2023-07-19T18:30:26+00:00" + }, { "name": "symfony/browser-kit", - "version": "v6.1.0", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "b839cef6e6526bd2090efe92c218d8c7479a51e0" + "reference": "ca4a988488f61ac18f8f845445eabdd36f89aa8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/b839cef6e6526bd2090efe92c218d8c7479a51e0", - "reference": "b839cef6e6526bd2090efe92c218d8c7479a51e0", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/ca4a988488f61ac18f8f845445eabdd36f89aa8d", + "reference": "ca4a988488f61ac18f8f845445eabdd36f89aa8d", "shasum": "" }, "require": { @@ -9494,9 +9739,6 @@ "symfony/mime": "^5.4|^6.0", "symfony/process": "^5.4|^6.0" }, - "suggest": { - "symfony/process": "" - }, "type": "library", "autoload": { "psr-4": { @@ -9523,7 +9765,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v6.1.0" + "source": "https://github.com/symfony/browser-kit/tree/v6.3.2" }, "funding": [ { @@ -9539,20 +9781,20 @@ "type": "tidelift" } ], - "time": "2022-05-06T20:04:05+00:00" + "time": "2023-07-06T06:56:43+00:00" }, { "name": "symfony/css-selector", - "version": "v6.1.0", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "05c40f02f621609404b8820ff8bc39acb46e19cf" + "reference": "883d961421ab1709877c10ac99451632a3d6fa57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/05c40f02f621609404b8820ff8bc39acb46e19cf", - "reference": "05c40f02f621609404b8820ff8bc39acb46e19cf", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/883d961421ab1709877c10ac99451632a3d6fa57", + "reference": "883d961421ab1709877c10ac99451632a3d6fa57", "shasum": "" }, "require": { @@ -9588,7 +9830,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.1.0" + "source": "https://github.com/symfony/css-selector/tree/v6.3.2" }, "funding": [ { @@ -9604,20 +9846,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T11:15:52+00:00" + "time": "2023-07-12T16:00:22+00:00" }, { "name": "symfony/dom-crawler", - "version": "v6.1.0", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "baacc99edd169bd8e06723f4c38150ef97feca0f" + "reference": "3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/baacc99edd169bd8e06723f4c38150ef97feca0f", - "reference": "baacc99edd169bd8e06723f4c38150ef97feca0f", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1", + "reference": "3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1", "shasum": "" }, "require": { @@ -9629,9 +9871,6 @@ "require-dev": { "symfony/css-selector": "^5.4|^6.0" }, - "suggest": { - "symfony/css-selector": "" - }, "type": "library", "autoload": { "psr-4": { @@ -9658,7 +9897,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v6.1.0" + "source": "https://github.com/symfony/dom-crawler/tree/v6.3.4" }, "funding": [ { @@ -9674,25 +9913,25 @@ "type": "tidelift" } ], - "time": "2022-05-04T14:48:14+00:00" + "time": "2023-08-01T07:43:40+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.1.0", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "a3016f5442e28386ded73c43a32a5b68586dd1c4" + "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a3016f5442e28386ded73c43a32a5b68586dd1c4", - "reference": "a3016f5442e28386ded73c43a32a5b68586dd1c4", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a10f19f5198d589d5c33333cffe98dc9820332dd", + "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3" + "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", "autoload": { @@ -9725,7 +9964,86 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.1.0" + "source": "https://github.com/symfony/options-resolver/tree/v6.3.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": "2023-05-12T14:21:09+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b", + "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/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.28.0" }, "funding": [ { @@ -9741,20 +10059,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T11:15:52+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/process", - "version": "v6.1.0", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "318718453c2be58266f1a9e74063d13cb8dd4165" + "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/318718453c2be58266f1a9e74063d13cb8dd4165", - "reference": "318718453c2be58266f1a9e74063d13cb8dd4165", + "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", + "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", "shasum": "" }, "require": { @@ -9786,7 +10104,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.1.0" + "source": "https://github.com/symfony/process/tree/v6.3.4" }, "funding": [ { @@ -9802,29 +10120,30 @@ "type": "tidelift" } ], - "time": "2022-05-11T12:12:29+00:00" + "time": "2023-08-07T10:39:22+00:00" }, { "name": "symfony/proxy-manager-bridge", - "version": "v6.1.0", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/symfony/proxy-manager-bridge.git", - "reference": "bcb3e7a28ee373bd64ecd2a2289a64c5860716af" + "reference": "7ba2ac62c88d7c3460d41f04ceba5fc3b9071a39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/bcb3e7a28ee373bd64ecd2a2289a64c5860716af", - "reference": "bcb3e7a28ee373bd64ecd2a2289a64c5860716af", + "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/7ba2ac62c88d7c3460d41f04ceba5fc3b9071a39", + "reference": "7ba2ac62c88d7c3460d41f04ceba5fc3b9071a39", "shasum": "" }, "require": { "friendsofphp/proxy-manager-lts": "^1.0.2", "php": ">=8.1", - "symfony/dependency-injection": "^5.4|^6.0" + "symfony/dependency-injection": "^6.3", + "symfony/deprecation-contracts": "^2.5|^3" }, "require-dev": { - "symfony/config": "^5.4|^6.0" + "symfony/config": "^6.1" }, "type": "symfony-bridge", "autoload": { @@ -9852,7 +10171,7 @@ "description": "Provides integration for ProxyManager with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/proxy-manager-bridge/tree/v6.1.0" + "source": "https://github.com/symfony/proxy-manager-bridge/tree/v6.3.0" }, "funding": [ { @@ -9868,25 +10187,25 @@ "type": "tidelift" } ], - "time": "2022-03-02T13:21:45+00:00" + "time": "2023-05-26T07:49:33+00:00" }, { "name": "symfony/stopwatch", - "version": "v6.1.0", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "77dedae82ce2a26e2e9b481855473fc3b3e4e54d" + "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/77dedae82ce2a26e2e9b481855473fc3b3e4e54d", - "reference": "77dedae82ce2a26e2e9b481855473fc3b3e4e54d", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", + "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/service-contracts": "^1|^2|^3" + "symfony/service-contracts": "^2.5|^3" }, "type": "library", "autoload": { @@ -9914,7 +10233,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.1.0" + "source": "https://github.com/symfony/stopwatch/tree/v6.3.0" }, "funding": [ { @@ -9930,32 +10249,35 @@ "type": "tidelift" } ], - "time": "2022-02-25T11:15:52+00:00" + "time": "2023-02-16T10:14:28+00:00" }, { "name": "symfony/translation", - "version": "v6.1.0", + "version": "v6.3.3", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "b254416631615bc6fe49b0a67f18658827288147" + "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/b254416631615bc6fe49b0a67f18658827288147", - "reference": "b254416631615bc6fe49b0a67f18658827288147", + "url": "https://api.github.com/repos/symfony/translation/zipball/3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd", + "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd", "shasum": "" }, "require": { "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.3|^3.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" }, @@ -9963,24 +10285,20 @@ "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { + "nikic/php-parser": "^4.13", "psr/log": "^1|^2|^3", "symfony/config": "^5.4|^6.0", "symfony/console": "^5.4|^6.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", - "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-client-contracts": "^2.5|^3.0", "symfony/http-kernel": "^5.4|^6.0", "symfony/intl": "^5.4|^6.0", "symfony/polyfill-intl-icu": "^1.21", "symfony/routing": "^5.4|^6.0", - "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/service-contracts": "^2.5|^3", "symfony/yaml": "^5.4|^6.0" }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" - }, "type": "library", "autoload": { "files": [ @@ -10010,7 +10328,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.1.0" + "source": "https://github.com/symfony/translation/tree/v6.3.3" }, "funding": [ { @@ -10026,7 +10344,7 @@ "type": "tidelift" } ], - "time": "2022-05-11T12:12:29+00:00" + "time": "2023-07-31T07:08:24+00:00" }, { "name": "theseer/tokenizer", @@ -10080,24 +10398,24 @@ }, { "name": "vimeo/psalm", - "version": "4.23.0", + "version": "5.15.0", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "f1fe6ff483bf325c803df9f510d09a03fd796f88" + "reference": "5c774aca4746caf3d239d9c8cadb9f882ca29352" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/f1fe6ff483bf325c803df9f510d09a03fd796f88", - "reference": "f1fe6ff483bf325c803df9f510d09a03fd796f88", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/5c774aca4746caf3d239d9c8cadb9f882ca29352", + "reference": "5c774aca4746caf3d239d9c8cadb9f882ca29352", "shasum": "" }, "require": { "amphp/amp": "^2.4.2", "amphp/byte-stream": "^1.5", - "composer/package-versions-deprecated": "^1.8.0", + "composer-runtime-api": "^2", "composer/semver": "^1.4 || ^2.0 || ^3.0", - "composer/xdebug-handler": "^1.1 || ^2.0 || ^3.0", + "composer/xdebug-handler": "^2.0 || ^3.0", "dnoegel/php-xdg-base-dir": "^0.1.1", "ext-ctype": "*", "ext-dom": "*", @@ -10106,34 +10424,38 @@ "ext-mbstring": "*", "ext-simplexml": "*", "ext-tokenizer": "*", - "felixfbecker/advanced-json-rpc": "^3.0.3", - "felixfbecker/language-server-protocol": "^1.5", + "felixfbecker/advanced-json-rpc": "^3.1", + "felixfbecker/language-server-protocol": "^1.5.2", + "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1", "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "nikic/php-parser": "^4.13", - "openlss/lib-array2xml": "^1.0", - "php": "^7.1|^8", - "sebastian/diff": "^3.0 || ^4.0", - "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0 || ^6.0", - "symfony/polyfill-php80": "^1.25", - "webmozart/path-util": "^2.3" + "nikic/php-parser": "^4.16", + "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", + "sebastian/diff": "^4.0 || ^5.0", + "spatie/array-to-xml": "^2.17.0 || ^3.0", + "symfony/console": "^4.1.6 || ^5.0 || ^6.0", + "symfony/filesystem": "^5.4 || ^6.0" + }, + "conflict": { + "nikic/php-parser": "4.17.0" }, "provide": { "psalm/psalm": "self.version" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "brianium/paratest": "^4.0||^6.0", + "amphp/phpunit-util": "^2.0", + "bamarni/composer-bin-plugin": "^1.4", + "brianium/paratest": "^6.9", "ext-curl": "*", + "mockery/mockery": "^1.5", + "nunomaduro/mock-final-classes": "^1.1", "php-parallel-lint/php-parallel-lint": "^1.2", - "phpdocumentor/reflection-docblock": "^5", - "phpmyadmin/sql-parser": "5.1.0||dev-master", - "phpspec/prophecy": ">=1.9.0", - "phpunit/phpunit": "^9.0", - "psalm/plugin-phpunit": "^0.16", - "slevomat/coding-standard": "^7.0", - "squizlabs/php_codesniffer": "^3.5", - "symfony/process": "^4.3 || ^5.0 || ^6.0", - "weirdan/prophecy-shim": "^1.0 || ^2.0" + "phpstan/phpdoc-parser": "^1.6", + "phpunit/phpunit": "^9.6", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18", + "slevomat/coding-standard": "^8.4", + "squizlabs/php_codesniffer": "^3.6", + "symfony/process": "^4.4 || ^5.0 || ^6.0" }, "suggest": { "ext-curl": "In order to send data to shepherd", @@ -10149,17 +10471,14 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev", + "dev-master": "5.x-dev", + "dev-4.x": "4.x-dev", "dev-3.x": "3.x-dev", "dev-2.x": "2.x-dev", "dev-1.x": "1.x-dev" } }, "autoload": { - "files": [ - "src/functions.php", - "src/spl_object_id.php" - ], "psr-4": { "Psalm\\": "src/Psalm/" } @@ -10177,13 +10496,14 @@ "keywords": [ "code", "inspection", - "php" + "php", + "static analysis" ], "support": { "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm/tree/4.23.0" + "source": "https://github.com/vimeo/psalm/tree/5.15.0" }, - "time": "2022-04-28T17:35:49+00:00" + "time": "2023-08-20T23:07:30+00:00" }, { "name": "webmozart/assert", @@ -10242,57 +10562,6 @@ "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, "time": "2022-06-03T18:03:27+00:00" - }, - { - "name": "webmozart/path-util", - "version": "2.3.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/path-util.git", - "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725", - "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "webmozart/assert": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\PathUtil\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", - "support": { - "issues": "https://github.com/webmozart/path-util/issues", - "source": "https://github.com/webmozart/path-util/tree/2.3.0" - }, - "abandoned": "symfony/filesystem", - "time": "2015-12-17T08:42:14+00:00" } ], "aliases": [], @@ -10303,7 +10572,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^8.1", + "php": "^8.2", "ext-amqp": "*", "ext-apcu": "*", "ext-json": "*", @@ -10313,5 +10582,5 @@ "platform-dev": { "ext-xdebug": "*" }, - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.6.0" } diff --git a/etc/infrastructure/php/extensions/rabbitmq.sh b/etc/infrastructure/php/extensions/rabbitmq.sh deleted file mode 100644 index 41fc6072f..000000000 --- a/etc/infrastructure/php/extensions/rabbitmq.sh +++ /dev/null @@ -1,6 +0,0 @@ -git clone --depth 1 --branch v1.11.0beta https://github.com/php-amqp/php-amqp.git -cd php-amqp -phpize -./configure -make -make install diff --git a/etc/infrastructure/php/extensions/xdebug.sh b/etc/infrastructure/php/extensions/xdebug.sh deleted file mode 100644 index 99dca7162..000000000 --- a/etc/infrastructure/php/extensions/xdebug.sh +++ /dev/null @@ -1,7 +0,0 @@ -git clone --depth 1 --branch 3.0.4 https://github.com/xdebug/xdebug.git -cd xdebug -git checkout 592ab9fa10cfa132623489511e92ef69fb91744c -phpize -./configure -make -make install diff --git a/psalm.xml b/psalm.xml index 383336980..5eea39ada 100644 --- a/psalm.xml +++ b/psalm.xml @@ -1,10 +1,12 @@ diff --git a/rector.php b/rector.php new file mode 100644 index 000000000..3ae4afdf7 --- /dev/null +++ b/rector.php @@ -0,0 +1,18 @@ +paths([ + __DIR__ . '/apps', + __DIR__ . '/src', + __DIR__ . '/tests', + ]); + + $rectorConfig->sets([ + LevelSetList::UP_TO_PHP_82 + ]); +}; diff --git a/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php b/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php index eced14cb2..999cebd2d 100644 --- a/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php +++ b/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php @@ -11,9 +11,9 @@ use CodelyTv\Analytics\DomainEvents\Domain\AnalyticsDomainEventName; use CodelyTv\Analytics\DomainEvents\Domain\DomainEventsRepository; -final class DomainEventStorer +final readonly class DomainEventStorer { - public function __construct(private readonly DomainEventsRepository $repository) + public function __construct(private DomainEventsRepository $repository) { } diff --git a/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php b/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php index 0fc8c2806..11d0dd65e 100644 --- a/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php +++ b/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php @@ -11,9 +11,9 @@ use CodelyTv\Shared\Domain\Bus\Event\DomainEvent; use CodelyTv\Shared\Domain\Bus\Event\DomainEventSubscriber; -final class StoreDomainEventOnOccurred implements DomainEventSubscriber +final readonly class StoreDomainEventOnOccurred implements DomainEventSubscriber { - public function __construct(private readonly DomainEventStorer $storer) + public function __construct(private DomainEventStorer $storer) { } diff --git a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php index 8c7447ef1..9eead61b2 100644 --- a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php +++ b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php @@ -4,13 +4,13 @@ namespace CodelyTv\Analytics\DomainEvents\Domain; -final class AnalyticsDomainEvent +final readonly class AnalyticsDomainEvent { public function __construct( - private readonly AnalyticsDomainEventId $id, - private readonly AnalyticsDomainEventAggregateId $aggregateId, - private readonly AnalyticsDomainEventName $name, - private readonly AnalyticsDomainEventBody $body + private AnalyticsDomainEventId $id, + private AnalyticsDomainEventAggregateId $aggregateId, + private AnalyticsDomainEventName $name, + private AnalyticsDomainEventBody $body ) { } } diff --git a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php index 744dfa75b..492035244 100644 --- a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php +++ b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php @@ -4,9 +4,9 @@ namespace CodelyTv\Analytics\DomainEvents\Domain; -final class AnalyticsDomainEventBody +final readonly class AnalyticsDomainEventBody { - public function __construct(private readonly array $value) + public function __construct(private array $value) { } diff --git a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php index aef9a81b3..05d917398 100644 --- a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php +++ b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php @@ -6,9 +6,9 @@ use CodelyTv\Shared\Domain\Bus\Command\Command; -final class AuthenticateUserCommand implements Command +final readonly class AuthenticateUserCommand implements Command { - public function __construct(private readonly string $username, private readonly string $password) + public function __construct(private string $username, private string $password) { } diff --git a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php index 7c7641853..8244e15ee 100644 --- a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php +++ b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php @@ -8,9 +8,9 @@ use CodelyTv\Backoffice\Auth\Domain\AuthUsername; use CodelyTv\Shared\Domain\Bus\Command\CommandHandler; -final class AuthenticateUserCommandHandler implements CommandHandler +final readonly class AuthenticateUserCommandHandler implements CommandHandler { - public function __construct(private readonly UserAuthenticator $authenticator) + public function __construct(private UserAuthenticator $authenticator) { } diff --git a/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php b/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php index d86d65576..ed5291d5b 100644 --- a/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php +++ b/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php @@ -11,9 +11,9 @@ use CodelyTv\Backoffice\Auth\Domain\InvalidAuthCredentials; use CodelyTv\Backoffice\Auth\Domain\InvalidAuthUsername; -final class UserAuthenticator +final readonly class UserAuthenticator { - public function __construct(private readonly AuthRepository $repository) + public function __construct(private AuthRepository $repository) { } diff --git a/src/Backoffice/Auth/Domain/AuthUser.php b/src/Backoffice/Auth/Domain/AuthUser.php index 1e951c905..1599ab64e 100644 --- a/src/Backoffice/Auth/Domain/AuthUser.php +++ b/src/Backoffice/Auth/Domain/AuthUser.php @@ -4,9 +4,9 @@ namespace CodelyTv\Backoffice\Auth\Domain; -final class AuthUser +final readonly class AuthUser { - public function __construct(private readonly AuthUsername $username, private readonly AuthPassword $password) + public function __construct(private AuthUsername $username, private AuthPassword $password) { } diff --git a/src/Backoffice/Auth/Infrastructure/Persistence/InMemoryAuthRepository.php b/src/Backoffice/Auth/Infrastructure/Persistence/InMemoryAuthRepository.php index d1645e452..c40aabb1f 100644 --- a/src/Backoffice/Auth/Infrastructure/Persistence/InMemoryAuthRepository.php +++ b/src/Backoffice/Auth/Infrastructure/Persistence/InMemoryAuthRepository.php @@ -8,6 +8,7 @@ use CodelyTv\Backoffice\Auth\Domain\AuthRepository; use CodelyTv\Backoffice\Auth\Domain\AuthUser; use CodelyTv\Backoffice\Auth\Domain\AuthUsername; + use function Lambdish\Phunctional\get; final class InMemoryAuthRepository implements AuthRepository diff --git a/src/Backoffice/Courses/Application/BackofficeCourseResponse.php b/src/Backoffice/Courses/Application/BackofficeCourseResponse.php index 7c8440ba6..4cdbc27e2 100644 --- a/src/Backoffice/Courses/Application/BackofficeCourseResponse.php +++ b/src/Backoffice/Courses/Application/BackofficeCourseResponse.php @@ -4,9 +4,9 @@ namespace CodelyTv\Backoffice\Courses\Application; -final class BackofficeCourseResponse +final readonly class BackofficeCourseResponse { - public function __construct(private readonly string $id, private readonly string $name, private readonly string $duration) + public function __construct(private string $id, private string $name, private string $duration) { } diff --git a/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php b/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php index 9fb967455..73b6f37fc 100644 --- a/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php +++ b/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php @@ -7,9 +7,9 @@ use CodelyTv\Backoffice\Courses\Domain\BackofficeCourse; use CodelyTv\Backoffice\Courses\Domain\BackofficeCourseRepository; -final class BackofficeCourseCreator +final readonly class BackofficeCourseCreator { - public function __construct(private readonly BackofficeCourseRepository $repository) + public function __construct(private BackofficeCourseRepository $repository) { } diff --git a/src/Backoffice/Courses/Application/Create/CreateBackofficeCourseOnCourseCreated.php b/src/Backoffice/Courses/Application/Create/CreateBackofficeCourseOnCourseCreated.php index a7ca626ce..ae37cd7db 100644 --- a/src/Backoffice/Courses/Application/Create/CreateBackofficeCourseOnCourseCreated.php +++ b/src/Backoffice/Courses/Application/Create/CreateBackofficeCourseOnCourseCreated.php @@ -7,9 +7,9 @@ use CodelyTv\Mooc\Courses\Domain\CourseCreatedDomainEvent; use CodelyTv\Shared\Domain\Bus\Event\DomainEventSubscriber; -final class CreateBackofficeCourseOnCourseCreated implements DomainEventSubscriber +final readonly class CreateBackofficeCourseOnCourseCreated implements DomainEventSubscriber { - public function __construct(private readonly BackofficeCourseCreator $creator) + public function __construct(private BackofficeCourseCreator $creator) { } diff --git a/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php b/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php index 0045c8e4c..77990a16f 100644 --- a/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php +++ b/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php @@ -8,11 +8,12 @@ use CodelyTv\Backoffice\Courses\Application\BackofficeCoursesResponse; use CodelyTv\Backoffice\Courses\Domain\BackofficeCourse; use CodelyTv\Backoffice\Courses\Domain\BackofficeCourseRepository; + use function Lambdish\Phunctional\map; -final class AllBackofficeCoursesSearcher +final readonly class AllBackofficeCoursesSearcher { - public function __construct(private readonly BackofficeCourseRepository $repository) + public function __construct(private BackofficeCourseRepository $repository) { } diff --git a/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQueryHandler.php b/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQueryHandler.php index dde35f54f..d76086033 100644 --- a/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQueryHandler.php +++ b/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQueryHandler.php @@ -7,9 +7,9 @@ use CodelyTv\Backoffice\Courses\Application\BackofficeCoursesResponse; use CodelyTv\Shared\Domain\Bus\Query\QueryHandler; -final class SearchAllBackofficeCoursesQueryHandler implements QueryHandler +final readonly class SearchAllBackofficeCoursesQueryHandler implements QueryHandler { - public function __construct(private readonly AllBackofficeCoursesSearcher $searcher) + public function __construct(private AllBackofficeCoursesSearcher $searcher) { } diff --git a/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php b/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php index 74cdc7372..22894e646 100644 --- a/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php +++ b/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php @@ -11,11 +11,12 @@ use CodelyTv\Shared\Domain\Criteria\Criteria; use CodelyTv\Shared\Domain\Criteria\Filters; use CodelyTv\Shared\Domain\Criteria\Order; + use function Lambdish\Phunctional\map; -final class BackofficeCoursesByCriteriaSearcher +final readonly class BackofficeCoursesByCriteriaSearcher { - public function __construct(private readonly BackofficeCourseRepository $repository) + public function __construct(private BackofficeCourseRepository $repository) { } diff --git a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQuery.php b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQuery.php index f35fb7089..10772edd5 100644 --- a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQuery.php +++ b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQuery.php @@ -6,14 +6,14 @@ use CodelyTv\Shared\Domain\Bus\Query\Query; -final class SearchBackofficeCoursesByCriteriaQuery implements Query +final readonly class SearchBackofficeCoursesByCriteriaQuery implements Query { public function __construct( - private readonly array $filters, - private readonly ?string $orderBy, - private readonly ?string $order, - private readonly ?int $limit, - private readonly ?int $offset + private array $filters, + private ?string $orderBy, + private ?string $order, + private ?int $limit, + private ?int $offset ) { } diff --git a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php index a3cfe6f71..2ceb62d9a 100644 --- a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php +++ b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php @@ -9,9 +9,9 @@ use CodelyTv\Shared\Domain\Criteria\Filters; use CodelyTv\Shared\Domain\Criteria\Order; -final class SearchBackofficeCoursesByCriteriaQueryHandler implements QueryHandler +final readonly class SearchBackofficeCoursesByCriteriaQueryHandler implements QueryHandler { - public function __construct(private readonly BackofficeCoursesByCriteriaSearcher $searcher) + public function __construct(private BackofficeCoursesByCriteriaSearcher $searcher) { } diff --git a/src/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepository.php b/src/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepository.php index 5bd3abbec..7ffe2b7ea 100644 --- a/src/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepository.php +++ b/src/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepository.php @@ -8,6 +8,7 @@ use CodelyTv\Backoffice\Courses\Domain\BackofficeCourseRepository; use CodelyTv\Shared\Domain\Criteria\Criteria; use CodelyTv\Shared\Infrastructure\Persistence\Elasticsearch\ElasticsearchRepository; + use function Lambdish\Phunctional\map; final class ElasticsearchBackofficeCourseRepository extends ElasticsearchRepository implements BackofficeCourseRepository diff --git a/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php b/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php index 5a2062beb..1e9333096 100644 --- a/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php +++ b/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php @@ -7,6 +7,7 @@ use CodelyTv\Backoffice\Courses\Domain\BackofficeCourse; use CodelyTv\Backoffice\Courses\Domain\BackofficeCourseRepository; use CodelyTv\Shared\Domain\Criteria\Criteria; + use function Lambdish\Phunctional\get; final class InMemoryCacheBackofficeCourseRepository implements BackofficeCourseRepository diff --git a/src/Mooc/Courses/Application/Create/CourseCreator.php b/src/Mooc/Courses/Application/Create/CourseCreator.php index b85373945..ab03911f6 100644 --- a/src/Mooc/Courses/Application/Create/CourseCreator.php +++ b/src/Mooc/Courses/Application/Create/CourseCreator.php @@ -11,9 +11,9 @@ use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; use CodelyTv\Shared\Domain\Bus\Event\EventBus; -final class CourseCreator +final readonly class CourseCreator { - public function __construct(private readonly CourseRepository $repository, private readonly EventBus $bus) + public function __construct(private CourseRepository $repository, private EventBus $bus) { } diff --git a/src/Mooc/Courses/Application/Create/CreateCourseCommand.php b/src/Mooc/Courses/Application/Create/CreateCourseCommand.php index 970c9cdaf..4a25411e9 100644 --- a/src/Mooc/Courses/Application/Create/CreateCourseCommand.php +++ b/src/Mooc/Courses/Application/Create/CreateCourseCommand.php @@ -6,9 +6,9 @@ use CodelyTv\Shared\Domain\Bus\Command\Command; -final class CreateCourseCommand implements Command +final readonly class CreateCourseCommand implements Command { - public function __construct(private readonly string $id, private readonly string $name, private readonly string $duration) + public function __construct(private string $id, private string $name, private string $duration) { } diff --git a/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php b/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php index 49b2eaf66..75560f9cb 100644 --- a/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php +++ b/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php @@ -9,9 +9,9 @@ use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; use CodelyTv\Shared\Domain\Bus\Command\CommandHandler; -final class CreateCourseCommandHandler implements CommandHandler +final readonly class CreateCourseCommandHandler implements CommandHandler { - public function __construct(private readonly CourseCreator $creator) + public function __construct(private CourseCreator $creator) { } diff --git a/src/Mooc/Courses/Application/Find/CourseFinder.php b/src/Mooc/Courses/Application/Find/CourseFinder.php index b307b9d37..ab49e64b2 100644 --- a/src/Mooc/Courses/Application/Find/CourseFinder.php +++ b/src/Mooc/Courses/Application/Find/CourseFinder.php @@ -9,9 +9,9 @@ use CodelyTv\Mooc\Courses\Domain\CourseRepository; use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; -final class CourseFinder +final readonly class CourseFinder { - public function __construct(private readonly CourseRepository $repository) + public function __construct(private CourseRepository $repository) { } diff --git a/src/Mooc/Courses/Application/Update/CourseRenamer.php b/src/Mooc/Courses/Application/Update/CourseRenamer.php index e1916c4f4..7beff5deb 100644 --- a/src/Mooc/Courses/Application/Update/CourseRenamer.php +++ b/src/Mooc/Courses/Application/Update/CourseRenamer.php @@ -10,11 +10,11 @@ use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; use CodelyTv\Shared\Domain\Bus\Event\EventBus; -final class CourseRenamer +final readonly class CourseRenamer { - private readonly CourseFinder $finder; + private CourseFinder $finder; - public function __construct(private readonly CourseRepository $repository, private readonly EventBus $bus) + public function __construct(private CourseRepository $repository, private EventBus $bus) { $this->finder = new CourseFinder($repository); } diff --git a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php index a0e5c2996..1121c2123 100644 --- a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php +++ b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php @@ -7,9 +7,9 @@ use CodelyTv\Mooc\CoursesCounter\Domain\CoursesCounterNotExist; use CodelyTv\Mooc\CoursesCounter\Domain\CoursesCounterRepository; -final class CoursesCounterFinder +final readonly class CoursesCounterFinder { - public function __construct(private readonly CoursesCounterRepository $repository) + public function __construct(private CoursesCounterRepository $repository) { } diff --git a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php index b0373e28e..5ecba9378 100644 --- a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php +++ b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php @@ -6,9 +6,9 @@ use CodelyTv\Shared\Domain\Bus\Query\Response; -final class CoursesCounterResponse implements Response +final readonly class CoursesCounterResponse implements Response { - public function __construct(private readonly int $total) + public function __construct(private int $total) { } diff --git a/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php b/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php index b7808f602..e9a919188 100644 --- a/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php +++ b/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php @@ -6,9 +6,9 @@ use CodelyTv\Shared\Domain\Bus\Query\QueryHandler; -final class FindCoursesCounterQueryHandler implements QueryHandler +final readonly class FindCoursesCounterQueryHandler implements QueryHandler { - public function __construct(private readonly CoursesCounterFinder $finder) + public function __construct(private CoursesCounterFinder $finder) { } diff --git a/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php b/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php index 0da54ad77..e5fe2e035 100644 --- a/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php +++ b/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php @@ -11,12 +11,12 @@ use CodelyTv\Shared\Domain\Bus\Event\EventBus; use CodelyTv\Shared\Domain\UuidGenerator; -final class CoursesCounterIncrementer +final readonly class CoursesCounterIncrementer { public function __construct( - private readonly CoursesCounterRepository $repository, - private readonly UuidGenerator $uuidGenerator, - private readonly EventBus $bus + private CoursesCounterRepository $repository, + private UuidGenerator $uuidGenerator, + private EventBus $bus ) { } diff --git a/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php b/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php index 8e1a83e6f..dc3d6c39c 100644 --- a/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php +++ b/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php @@ -7,11 +7,12 @@ use CodelyTv\Mooc\Courses\Domain\CourseCreatedDomainEvent; use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; use CodelyTv\Shared\Domain\Bus\Event\DomainEventSubscriber; + use function Lambdish\Phunctional\apply; -final class IncrementCoursesCounterOnCourseCreated implements DomainEventSubscriber +final readonly class IncrementCoursesCounterOnCourseCreated implements DomainEventSubscriber { - public function __construct(private readonly CoursesCounterIncrementer $incrementer) + public function __construct(private CoursesCounterIncrementer $incrementer) { } diff --git a/src/Mooc/CoursesCounter/Domain/CoursesCounter.php b/src/Mooc/CoursesCounter/Domain/CoursesCounter.php index fc73ba58b..fef3ca6d0 100644 --- a/src/Mooc/CoursesCounter/Domain/CoursesCounter.php +++ b/src/Mooc/CoursesCounter/Domain/CoursesCounter.php @@ -6,6 +6,7 @@ use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; use CodelyTv\Shared\Domain\Aggregate\AggregateRoot; + use function Lambdish\Phunctional\search; final class CoursesCounter extends AggregateRoot diff --git a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php index 40bc8611f..934a9986a 100644 --- a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php +++ b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php @@ -8,6 +8,7 @@ use CodelyTv\Shared\Infrastructure\Doctrine\Dbal\DoctrineCustomType; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\JsonType; + use function Lambdish\Phunctional\map; final class CourseIdsType extends JsonType implements DoctrineCustomType diff --git a/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php b/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php index 436a867d5..d69612db5 100644 --- a/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php +++ b/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php @@ -5,6 +5,7 @@ namespace CodelyTv\Mooc\Shared\Infrastructure\Doctrine; use CodelyTv\Shared\Domain\Utils; + use function Lambdish\Phunctional\filter; use function Lambdish\Phunctional\map; use function Lambdish\Phunctional\reduce; diff --git a/src/Mooc/Videos/Application/Create/CreateVideoCommand.php b/src/Mooc/Videos/Application/Create/CreateVideoCommand.php index 636298100..b6c1ae53a 100644 --- a/src/Mooc/Videos/Application/Create/CreateVideoCommand.php +++ b/src/Mooc/Videos/Application/Create/CreateVideoCommand.php @@ -6,14 +6,14 @@ use CodelyTv\Shared\Domain\Bus\Command\Command; -final class CreateVideoCommand implements Command +final readonly class CreateVideoCommand implements Command { public function __construct( - private readonly string $id, - private readonly string $type, - private readonly string $title, - private readonly string $url, - private readonly string $courseId + private string $id, + private string $type, + private string $title, + private string $url, + private string $courseId ) { } diff --git a/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php b/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php index e6b8b0d89..6b2ee2d6b 100644 --- a/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php +++ b/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php @@ -11,9 +11,9 @@ use CodelyTv\Mooc\Videos\Domain\VideoType; use CodelyTv\Shared\Domain\Bus\Command\CommandHandler; -final class CreateVideoCommandHandler implements CommandHandler +final readonly class CreateVideoCommandHandler implements CommandHandler { - public function __construct(private readonly VideoCreator $creator) + public function __construct(private VideoCreator $creator) { } diff --git a/src/Mooc/Videos/Application/Create/VideoCreator.php b/src/Mooc/Videos/Application/Create/VideoCreator.php index 91180306b..35920496f 100644 --- a/src/Mooc/Videos/Application/Create/VideoCreator.php +++ b/src/Mooc/Videos/Application/Create/VideoCreator.php @@ -13,9 +13,9 @@ use CodelyTv\Mooc\Videos\Domain\VideoType; use CodelyTv\Shared\Domain\Bus\Event\EventBus; -final class VideoCreator +final readonly class VideoCreator { - public function __construct(private readonly VideoRepository $repository, private readonly EventBus $bus) + public function __construct(private VideoRepository $repository, private EventBus $bus) { } diff --git a/src/Mooc/Videos/Application/Find/FindVideoQuery.php b/src/Mooc/Videos/Application/Find/FindVideoQuery.php index eadef0af1..f8f3902ab 100644 --- a/src/Mooc/Videos/Application/Find/FindVideoQuery.php +++ b/src/Mooc/Videos/Application/Find/FindVideoQuery.php @@ -6,9 +6,9 @@ use CodelyTv\Shared\Domain\Bus\Query\Query; -final class FindVideoQuery implements Query +final readonly class FindVideoQuery implements Query { - public function __construct(private readonly string $id) + public function __construct(private string $id) { } diff --git a/src/Mooc/Videos/Application/Find/FindVideoQueryHandler.php b/src/Mooc/Videos/Application/Find/FindVideoQueryHandler.php index 4491614e5..ef04073f4 100644 --- a/src/Mooc/Videos/Application/Find/FindVideoQueryHandler.php +++ b/src/Mooc/Videos/Application/Find/FindVideoQueryHandler.php @@ -6,6 +6,7 @@ use CodelyTv\Mooc\Videos\Domain\VideoId; use CodelyTv\Shared\Domain\Bus\Query\QueryHandler; + use function Lambdish\Phunctional\apply; use function Lambdish\Phunctional\pipe; diff --git a/src/Mooc/Videos/Application/Find/VideoResponse.php b/src/Mooc/Videos/Application/Find/VideoResponse.php index 6bd5fd336..008af9702 100644 --- a/src/Mooc/Videos/Application/Find/VideoResponse.php +++ b/src/Mooc/Videos/Application/Find/VideoResponse.php @@ -6,14 +6,14 @@ use CodelyTv\Shared\Domain\Bus\Query\Response; -final class VideoResponse implements Response +final readonly class VideoResponse implements Response { public function __construct( - private readonly string $id, - private readonly string $type, - private readonly string $title, - private readonly string $url, - private readonly string $courseId + private string $id, + private string $type, + private string $title, + private string $url, + private string $courseId ) { } } diff --git a/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php b/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php index 822916230..11c51b7c4 100644 --- a/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php +++ b/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php @@ -6,9 +6,9 @@ use CodelyTv\Shared\Domain\Bus\Command\Command; -final class TrimVideoCommand implements Command +final readonly class TrimVideoCommand implements Command { - public function __construct(private readonly string $videoId, private readonly int $keepFromSecond, private readonly int $keepToSecond) + public function __construct(private string $videoId, private int $keepFromSecond, private int $keepToSecond) { } diff --git a/src/Mooc/Videos/Application/Trim/TrimVideoCommandHandler.php b/src/Mooc/Videos/Application/Trim/TrimVideoCommandHandler.php index 4f52d05fc..9511e2a51 100644 --- a/src/Mooc/Videos/Application/Trim/TrimVideoCommandHandler.php +++ b/src/Mooc/Videos/Application/Trim/TrimVideoCommandHandler.php @@ -7,9 +7,9 @@ use CodelyTv\Mooc\Videos\Domain\VideoId; use CodelyTv\Shared\Domain\SecondsInterval; -final class TrimVideoCommandHandler +final readonly class TrimVideoCommandHandler { - public function __construct(private readonly VideoTrimmer $trimmer) + public function __construct(private VideoTrimmer $trimmer) { } diff --git a/src/Mooc/Videos/Application/Update/VideoTitleUpdater.php b/src/Mooc/Videos/Application/Update/VideoTitleUpdater.php index cea6b77aa..3670cb513 100644 --- a/src/Mooc/Videos/Application/Update/VideoTitleUpdater.php +++ b/src/Mooc/Videos/Application/Update/VideoTitleUpdater.php @@ -9,11 +9,11 @@ use CodelyTv\Mooc\Videos\Domain\VideoRepository; use CodelyTv\Mooc\Videos\Domain\VideoTitle; -final class VideoTitleUpdater +final readonly class VideoTitleUpdater { - private readonly VideoFinder $finder; + private VideoFinder $finder; - public function __construct(private readonly VideoRepository $repository) + public function __construct(private VideoRepository $repository) { $this->finder = new VideoFinder($repository); } diff --git a/src/Mooc/Videos/Domain/VideoFinder.php b/src/Mooc/Videos/Domain/VideoFinder.php index ba7a22f00..79494d770 100644 --- a/src/Mooc/Videos/Domain/VideoFinder.php +++ b/src/Mooc/Videos/Domain/VideoFinder.php @@ -4,9 +4,9 @@ namespace CodelyTv\Mooc\Videos\Domain; -final class VideoFinder +final readonly class VideoFinder { - public function __construct(private readonly VideoRepository $repository) + public function __construct(private VideoRepository $repository) { } diff --git a/src/Shared/Domain/Collection.php b/src/Shared/Domain/Collection.php index 137e6c234..6c60749a9 100644 --- a/src/Shared/Domain/Collection.php +++ b/src/Shared/Domain/Collection.php @@ -7,7 +7,9 @@ use ArrayIterator; use Countable; use IteratorAggregate; +use Traversable; +/** @template-implements IteratorAggregate*/ abstract class Collection implements Countable, IteratorAggregate { public function __construct(private readonly array $items) @@ -17,7 +19,7 @@ public function __construct(private readonly array $items) abstract protected function type(): string; - public function getIterator(): ArrayIterator + public function getIterator(): Traversable { return new ArrayIterator($this->items()); } diff --git a/src/Shared/Domain/Criteria/Criteria.php b/src/Shared/Domain/Criteria/Criteria.php index 1c762ed23..3496f3fd1 100644 --- a/src/Shared/Domain/Criteria/Criteria.php +++ b/src/Shared/Domain/Criteria/Criteria.php @@ -4,13 +4,13 @@ namespace CodelyTv\Shared\Domain\Criteria; -final class Criteria +final readonly class Criteria { public function __construct( - private readonly Filters $filters, - private readonly Order $order, - private readonly ?int $offset, - private readonly ?int $limit + private Filters $filters, + private Order $order, + private ?int $offset, + private ?int $limit ) { } diff --git a/src/Shared/Domain/Criteria/Filter.php b/src/Shared/Domain/Criteria/Filter.php index 5a8cbf3bf..cd7c95423 100644 --- a/src/Shared/Domain/Criteria/Filter.php +++ b/src/Shared/Domain/Criteria/Filter.php @@ -4,12 +4,12 @@ namespace CodelyTv\Shared\Domain\Criteria; -final class Filter +final readonly class Filter { public function __construct( - private readonly FilterField $field, - private readonly FilterOperator $operator, - private readonly FilterValue $value + private FilterField $field, + private FilterOperator $operator, + private FilterValue $value ) { } diff --git a/src/Shared/Domain/Criteria/Filters.php b/src/Shared/Domain/Criteria/Filters.php index b55a5e0f2..56a6312d8 100644 --- a/src/Shared/Domain/Criteria/Filters.php +++ b/src/Shared/Domain/Criteria/Filters.php @@ -5,6 +5,7 @@ namespace CodelyTv\Shared\Domain\Criteria; use CodelyTv\Shared\Domain\Collection; + use function Lambdish\Phunctional\reduce; final class Filters extends Collection diff --git a/src/Shared/Domain/Criteria/Order.php b/src/Shared/Domain/Criteria/Order.php index 643a65268..388d09370 100644 --- a/src/Shared/Domain/Criteria/Order.php +++ b/src/Shared/Domain/Criteria/Order.php @@ -4,9 +4,9 @@ namespace CodelyTv\Shared\Domain\Criteria; -final class Order +final readonly class Order { - public function __construct(private readonly OrderBy $orderBy, private readonly OrderType $orderType) + public function __construct(private OrderBy $orderBy, private OrderType $orderType) { } diff --git a/src/Shared/Domain/SecondsInterval.php b/src/Shared/Domain/SecondsInterval.php index 55df80a10..975097271 100644 --- a/src/Shared/Domain/SecondsInterval.php +++ b/src/Shared/Domain/SecondsInterval.php @@ -6,9 +6,9 @@ use DomainException; -final class SecondsInterval +final readonly class SecondsInterval { - public function __construct(private readonly Second $from, private readonly Second $to) + public function __construct(private Second $from, private Second $to) { $this->ensureIntervalEndsAfterStart($from, $to); } diff --git a/src/Shared/Domain/Utils.php b/src/Shared/Domain/Utils.php index e0eb706f8..01a3e3fa7 100644 --- a/src/Shared/Domain/Utils.php +++ b/src/Shared/Domain/Utils.php @@ -8,6 +8,7 @@ use DateTimeInterface; use ReflectionClass; use RuntimeException; + use function Lambdish\Phunctional\filter; final class Utils diff --git a/src/Shared/Domain/ValueObject/Enum.php b/src/Shared/Domain/ValueObject/Enum.php index 1d7eed987..e1f9af9ba 100644 --- a/src/Shared/Domain/ValueObject/Enum.php +++ b/src/Shared/Domain/ValueObject/Enum.php @@ -7,6 +7,7 @@ use CodelyTv\Shared\Domain\Utils; use ReflectionClass; use Stringable; + use function in_array; use function Lambdish\Phunctional\reindex; diff --git a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php index eb5cb6efe..f74cb1f79 100644 --- a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php +++ b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php @@ -9,6 +9,7 @@ use ReflectionClass; use ReflectionMethod; use ReflectionNamedType; + use function Lambdish\Phunctional\map; use function Lambdish\Phunctional\reduce; use function Lambdish\Phunctional\reindex; diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php b/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php index cb2e77213..7bb31aa46 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php @@ -8,9 +8,9 @@ use CodelyTv\Shared\Domain\Utils; use RuntimeException; -final class DomainEventJsonDeserializer +final readonly class DomainEventJsonDeserializer { - public function __construct(private readonly DomainEventMapping $mapping) + public function __construct(private DomainEventMapping $mapping) { } diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php b/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php index 956d864bc..b2d8d8057 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php @@ -6,6 +6,7 @@ use CodelyTv\Shared\Domain\Bus\Event\DomainEventSubscriber; use RuntimeException; + use function Lambdish\Phunctional\reduce; use function Lambdish\Phunctional\reindex; diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php b/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php index f456bc573..381e1f139 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php @@ -9,6 +9,7 @@ use CodelyTv\Shared\Infrastructure\Bus\Event\RabbitMq\RabbitMqQueueNameFormatter; use RuntimeException; use Traversable; + use function Lambdish\Phunctional\search; final class DomainEventSubscriberLocator diff --git a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php index 85b3481cc..d52951593 100644 --- a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php +++ b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php @@ -11,14 +11,15 @@ use Doctrine\DBAL\FetchMode; use Doctrine\ORM\EntityManager; use RuntimeException; + use function Lambdish\Phunctional\each; use function Lambdish\Phunctional\map; -final class MySqlDoctrineDomainEventsConsumer +final readonly class MySqlDoctrineDomainEventsConsumer { - private readonly Connection $connection; + private Connection $connection; - public function __construct(EntityManager $entityManager, private readonly DomainEventMapping $eventMapping) + public function __construct(EntityManager $entityManager, private DomainEventMapping $eventMapping) { $this->connection = $entityManager->getConnection(); } @@ -63,6 +64,6 @@ private function formatDate($stringDate): string private function idExtractor(): callable { - return static fn (array $event): string => "'${event['id']}'"; + return static fn (array $event): string => "'{$event['id']}'"; } } diff --git a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php index 77c8e451c..280d0e88f 100644 --- a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php @@ -9,6 +9,7 @@ use CodelyTv\Shared\Domain\Utils; use Doctrine\DBAL\Connection; use Doctrine\ORM\EntityManager; + use function Lambdish\Phunctional\each; final class MySqlDoctrineEventBus implements EventBus diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConfigurer.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConfigurer.php index b16eca437..a46f22200 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConfigurer.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConfigurer.php @@ -6,11 +6,12 @@ use AMQPQueue; use CodelyTv\Shared\Domain\Bus\Event\DomainEventSubscriber; + use function Lambdish\Phunctional\each; -final class RabbitMqConfigurer +final readonly class RabbitMqConfigurer { - public function __construct(private readonly RabbitMqConnection $connection) + public function __construct(private RabbitMqConnection $connection) { } diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php index 8c007002b..bdd5b09ea 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php @@ -9,16 +9,17 @@ use AMQPQueueException; use CodelyTv\Shared\Infrastructure\Bus\Event\DomainEventJsonDeserializer; use Throwable; + use function Lambdish\Phunctional\assoc; use function Lambdish\Phunctional\get; -final class RabbitMqDomainEventsConsumer +final readonly class RabbitMqDomainEventsConsumer { public function __construct( - private readonly RabbitMqConnection $connection, - private readonly DomainEventJsonDeserializer $deserializer, - private readonly string $exchangeName, - private readonly int $maxRetries + private RabbitMqConnection $connection, + private DomainEventJsonDeserializer $deserializer, + private string $exchangeName, + private int $maxRetries ) { } diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php index 2440afda0..f9f92da4b 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php @@ -9,14 +9,15 @@ use CodelyTv\Shared\Domain\Bus\Event\EventBus; use CodelyTv\Shared\Infrastructure\Bus\Event\DomainEventJsonSerializer; use CodelyTv\Shared\Infrastructure\Bus\Event\MySql\MySqlDoctrineEventBus; + use function Lambdish\Phunctional\each; -final class RabbitMqEventBus implements EventBus +final readonly class RabbitMqEventBus implements EventBus { public function __construct( - private readonly RabbitMqConnection $connection, - private readonly string $exchangeName, - private readonly MySqlDoctrineEventBus $failoverPublisher + private RabbitMqConnection $connection, + private string $exchangeName, + private MySqlDoctrineEventBus $failoverPublisher ) { } diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqQueueNameFormatter.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqQueueNameFormatter.php index 15bf09e9a..e53ac7bb1 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqQueueNameFormatter.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqQueueNameFormatter.php @@ -6,6 +6,7 @@ use CodelyTv\Shared\Domain\Bus\Event\DomainEventSubscriber; use CodelyTv\Shared\Domain\Utils; + use function Lambdish\Phunctional\last; use function Lambdish\Phunctional\map; diff --git a/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php b/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php index b9e0bb1ab..68ff4f25e 100644 --- a/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php @@ -7,14 +7,15 @@ use CodelyTv\Shared\Domain\Bus\Event\DomainEvent; use CodelyTv\Shared\Domain\Bus\Event\EventBus; use CodelyTv\Shared\Infrastructure\Monitoring\PrometheusMonitor; + use function Lambdish\Phunctional\each; -final class WithPrometheusMonitoringEventBus implements EventBus +final readonly class WithPrometheusMonitoringEventBus implements EventBus { public function __construct( - private readonly PrometheusMonitor $monitor, - private readonly string $appName, - private readonly EventBus $bus + private PrometheusMonitor $monitor, + private string $appName, + private EventBus $bus ) { } diff --git a/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php b/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php index e00526007..a00220d6a 100644 --- a/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php +++ b/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php @@ -7,6 +7,7 @@ use CodelyTv\Shared\Domain\Utils; use CodelyTv\Tests\Shared\Infrastructure\Doctrine\MySqlDatabaseCleaner; use Doctrine\ORM\EntityManager; + use function Lambdish\Phunctional\apply; use function Lambdish\Phunctional\each; diff --git a/src/Shared/Infrastructure/Doctrine/Dbal/DbalCustomTypesRegistrar.php b/src/Shared/Infrastructure/Doctrine/Dbal/DbalCustomTypesRegistrar.php index b671836cb..70c77eeb9 100644 --- a/src/Shared/Infrastructure/Doctrine/Dbal/DbalCustomTypesRegistrar.php +++ b/src/Shared/Infrastructure/Doctrine/Dbal/DbalCustomTypesRegistrar.php @@ -5,6 +5,7 @@ namespace CodelyTv\Shared\Infrastructure\Doctrine\Dbal; use Doctrine\DBAL\Types\Type; + use function Lambdish\Phunctional\each; final class DbalCustomTypesRegistrar diff --git a/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php b/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php index f5a0cfcde..5bc719ff0 100644 --- a/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php +++ b/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php @@ -13,6 +13,7 @@ use Doctrine\ORM\Mapping\Driver\SimplifiedXmlDriver; use Doctrine\ORM\ORMSetup; use RuntimeException; + use function Lambdish\Phunctional\dissoc; final class DoctrineEntityManagerFactory diff --git a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php index 1ead42d3e..b5e52eff3 100644 --- a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php +++ b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php @@ -6,9 +6,9 @@ use Elasticsearch\Client; -final class ElasticsearchClient +final readonly class ElasticsearchClient { - public function __construct(private readonly Client $client, private readonly string $indexPrefix) + public function __construct(private Client $client, private string $indexPrefix) { } diff --git a/src/Shared/Infrastructure/Logger/MonologLogger.php b/src/Shared/Infrastructure/Logger/MonologLogger.php index 9dc205e6f..1bf01d5bd 100644 --- a/src/Shared/Infrastructure/Logger/MonologLogger.php +++ b/src/Shared/Infrastructure/Logger/MonologLogger.php @@ -6,9 +6,9 @@ use CodelyTv\Shared\Domain\Logger; -final class MonologLogger implements Logger +final readonly class MonologLogger implements Logger { - public function __construct(private readonly \Monolog\Logger $logger) + public function __construct(private \Monolog\Logger $logger) { } diff --git a/src/Shared/Infrastructure/Monitoring/PrometheusMonitor.php b/src/Shared/Infrastructure/Monitoring/PrometheusMonitor.php index 31e2a6adb..f504d288d 100644 --- a/src/Shared/Infrastructure/Monitoring/PrometheusMonitor.php +++ b/src/Shared/Infrastructure/Monitoring/PrometheusMonitor.php @@ -7,9 +7,9 @@ use Prometheus\CollectorRegistry; use Prometheus\Storage\APC; -final class PrometheusMonitor +final readonly class PrometheusMonitor { - private readonly CollectorRegistry $registry; + private CollectorRegistry $registry; public function __construct() { diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php index 40767ac0c..382a1ee34 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php @@ -12,12 +12,12 @@ use Doctrine\Common\Collections\Expr\Comparison; use Doctrine\Common\Collections\Expr\CompositeExpression; -final class DoctrineCriteriaConverter +final readonly class DoctrineCriteriaConverter { public function __construct( - private readonly Criteria $criteria, - private readonly array $criteriaToDoctrineFields = [], - private readonly array $hydrators = [] + private Criteria $criteria, + private array $criteriaToDoctrineFields = [], + private array $hydrators = [] ) { } diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php b/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php index d9fd8b3ab..2fd2598a7 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php @@ -9,6 +9,7 @@ use CodelyTv\Shared\Infrastructure\Doctrine\Dbal\DoctrineCustomType; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\StringType; + use function Lambdish\Phunctional\last; abstract class UuidType extends StringType implements DoctrineCustomType diff --git a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchCriteriaConverter.php b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchCriteriaConverter.php index bd8a5373b..18aa91e71 100644 --- a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchCriteriaConverter.php +++ b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchCriteriaConverter.php @@ -5,6 +5,7 @@ namespace CodelyTv\Shared\Infrastructure\Persistence\Elasticsearch; use CodelyTv\Shared\Domain\Criteria\Criteria; + use function Lambdish\Phunctional\reduce; final class ElasticsearchCriteriaConverter diff --git a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php index 1949acdbe..698eb4a9a 100644 --- a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php +++ b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php @@ -7,6 +7,7 @@ use CodelyTv\Shared\Domain\Criteria\Criteria; use CodelyTv\Shared\Infrastructure\Elasticsearch\ElasticsearchClient; use Elasticsearch\Common\Exceptions\Missing404Exception; + use function Lambdish\Phunctional\get_in; use function Lambdish\Phunctional\map; diff --git a/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php b/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php index a365d8c35..71ef755e2 100644 --- a/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php +++ b/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php @@ -26,7 +26,7 @@ public function onKernelRequest(RequestEvent $event): void $jsonDataLowerCase[preg_replace_callback( '/_(.)/', static fn ($matches) => strtoupper($matches[1]), - $key + (string) $key )] = $value; } $request->request->replace($jsonDataLowerCase); diff --git a/src/Shared/Infrastructure/Symfony/ApiController.php b/src/Shared/Infrastructure/Symfony/ApiController.php index ce5a18c76..50fcdd989 100644 --- a/src/Shared/Infrastructure/Symfony/ApiController.php +++ b/src/Shared/Infrastructure/Symfony/ApiController.php @@ -9,6 +9,7 @@ use CodelyTv\Shared\Domain\Bus\Query\Query; use CodelyTv\Shared\Domain\Bus\Query\QueryBus; use CodelyTv\Shared\Domain\Bus\Query\Response; + use function Lambdish\Phunctional\each; abstract class ApiController diff --git a/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php b/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php index 256d1e71a..8f88d26c4 100644 --- a/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php +++ b/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php @@ -10,9 +10,9 @@ use Symfony\Component\HttpKernel\Event\ExceptionEvent; use Throwable; -final class ApiExceptionListener +final readonly class ApiExceptionListener { - public function __construct(private readonly ApiExceptionsHttpStatusCodeMapping $exceptionHandler) + public function __construct(private ApiExceptionsHttpStatusCodeMapping $exceptionHandler) { } diff --git a/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php b/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php index 31a8b0586..573bf5633 100644 --- a/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php +++ b/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php @@ -7,6 +7,7 @@ use InvalidArgumentException; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; + use function Lambdish\Phunctional\get; final class ApiExceptionsHttpStatusCodeMapping diff --git a/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php b/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php index 6b4a74093..f77d01aa7 100644 --- a/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php +++ b/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php @@ -12,9 +12,9 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Event\RequestEvent; -final class BasicHttpAuthMiddleware +final readonly class BasicHttpAuthMiddleware { - public function __construct(private readonly CommandBus $bus) + public function __construct(private CommandBus $bus) { } diff --git a/tests/Backoffice/Auth/AuthModuleUnitTestCase.php b/tests/Backoffice/Auth/AuthModuleUnitTestCase.php index 547d8e93c..a5402858a 100644 --- a/tests/Backoffice/Auth/AuthModuleUnitTestCase.php +++ b/tests/Backoffice/Auth/AuthModuleUnitTestCase.php @@ -12,7 +12,7 @@ abstract class AuthModuleUnitTestCase extends UnitTestCase { - private AuthRepository|MockInterface|null $repository; + private AuthRepository|MockInterface|null $repository = null; protected function shouldSearch(AuthUsername $username, AuthUser $authUser = null): void { @@ -25,6 +25,6 @@ protected function shouldSearch(AuthUsername $username, AuthUser $authUser = nul protected function repository(): AuthRepository|MockInterface { - return $this->repository = $this->repository ?? $this->mock(AuthRepository::class); + return $this->repository ??= $this->mock(AuthRepository::class); } } diff --git a/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeEnvironmentArranger.php b/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeEnvironmentArranger.php index c042ffc2e..a9210551b 100644 --- a/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeEnvironmentArranger.php +++ b/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeEnvironmentArranger.php @@ -9,9 +9,10 @@ use CodelyTv\Tests\Shared\Infrastructure\Doctrine\MySqlDatabaseCleaner; use CodelyTv\Tests\Shared\Infrastructure\Elastic\ElasticDatabaseCleaner; use Doctrine\ORM\EntityManager; + use function Lambdish\Phunctional\apply; -final class BackofficeEnvironmentArranger implements EnvironmentArranger +final readonly class BackofficeEnvironmentArranger implements EnvironmentArranger { public function __construct(private ElasticsearchClient $elasticsearchClient, private EntityManager $entityManager) { diff --git a/tests/Mooc/Courses/CoursesModuleUnitTestCase.php b/tests/Mooc/Courses/CoursesModuleUnitTestCase.php index 99aec4245..3de440cdf 100644 --- a/tests/Mooc/Courses/CoursesModuleUnitTestCase.php +++ b/tests/Mooc/Courses/CoursesModuleUnitTestCase.php @@ -12,7 +12,7 @@ abstract class CoursesModuleUnitTestCase extends UnitTestCase { - private CourseRepository|MockInterface|null $repository; + private CourseRepository|MockInterface|null $repository = null; protected function shouldSave(Course $course): void { @@ -34,6 +34,6 @@ protected function shouldSearch(CourseId $id, ?Course $course): void protected function repository(): CourseRepository|MockInterface { - return $this->repository = $this->repository ?? $this->mock(CourseRepository::class); + return $this->repository ??= $this->mock(CourseRepository::class); } } diff --git a/tests/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php b/tests/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php index d990439dd..366cb59c9 100644 --- a/tests/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php +++ b/tests/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php @@ -11,7 +11,7 @@ abstract class CoursesCounterModuleUnitTestCase extends UnitTestCase { - private CoursesCounterRepository|MockInterface|null $repository; + private CoursesCounterRepository|MockInterface|null $repository = null; protected function shouldSave(CoursesCounter $course): void { @@ -32,6 +32,6 @@ protected function shouldSearch(?CoursesCounter $counter): void protected function repository(): CoursesCounterRepository|MockInterface { - return $this->repository = $this->repository ?? $this->mock(CoursesCounterRepository::class); + return $this->repository ??= $this->mock(CoursesCounterRepository::class); } } diff --git a/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php b/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php index c6be3379d..4f44bbf9d 100644 --- a/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php +++ b/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php @@ -7,9 +7,10 @@ use CodelyTv\Tests\Shared\Infrastructure\Arranger\EnvironmentArranger; use CodelyTv\Tests\Shared\Infrastructure\Doctrine\MySqlDatabaseCleaner; use Doctrine\ORM\EntityManager; + use function Lambdish\Phunctional\apply; -final class MoocEnvironmentArranger implements EnvironmentArranger +final readonly class MoocEnvironmentArranger implements EnvironmentArranger { public function __construct(private EntityManager $entityManager) { diff --git a/tests/Shared/Domain/DuplicatorMother.php b/tests/Shared/Domain/DuplicatorMother.php index 2f23565ab..fc4260079 100644 --- a/tests/Shared/Domain/DuplicatorMother.php +++ b/tests/Shared/Domain/DuplicatorMother.php @@ -6,6 +6,7 @@ use ReflectionObject; use ReflectionProperty; + use function Lambdish\Phunctional\each; final class DuplicatorMother diff --git a/tests/Shared/Domain/IntegerMother.php b/tests/Shared/Domain/IntegerMother.php index ac6259f3b..b164ea31c 100644 --- a/tests/Shared/Domain/IntegerMother.php +++ b/tests/Shared/Domain/IntegerMother.php @@ -11,7 +11,7 @@ public static function create(): int return self::between(1); } - public static function between(int $min, $max = PHP_INT_MAX): int + public static function between(int $min, int $max = PHP_INT_MAX): int { return MotherCreator::random()->numberBetween($min, $max); } diff --git a/tests/Shared/Domain/MotherCreator.php b/tests/Shared/Domain/MotherCreator.php index 41eab9050..30a98bce7 100644 --- a/tests/Shared/Domain/MotherCreator.php +++ b/tests/Shared/Domain/MotherCreator.php @@ -9,10 +9,10 @@ final class MotherCreator { - private static ?Generator $faker; + private static ?Generator $faker = null; public static function random(): Generator { - return self::$faker = self::$faker ?? Factory::create(); + return self::$faker ??= Factory::create(); } } diff --git a/tests/Shared/Domain/RandomElementPicker.php b/tests/Shared/Domain/RandomElementPicker.php index baf41ecc8..2663ac72f 100644 --- a/tests/Shared/Domain/RandomElementPicker.php +++ b/tests/Shared/Domain/RandomElementPicker.php @@ -6,7 +6,7 @@ final class RandomElementPicker { - public static function from(...$elements): mixed + public static function from(mixed ...$elements): mixed { return MotherCreator::random()->randomElement($elements); } diff --git a/tests/Shared/Infrastructure/Behat/ApiContext.php b/tests/Shared/Infrastructure/Behat/ApiContext.php index 272d31ef7..b1c76c1ec 100644 --- a/tests/Shared/Infrastructure/Behat/ApiContext.php +++ b/tests/Shared/Infrastructure/Behat/ApiContext.php @@ -13,10 +13,10 @@ final class ApiContext extends RawMinkContext { - private MinkHelper $sessionHelper; - private MinkSessionRequestHelper $request; + private readonly MinkHelper $sessionHelper; + private readonly MinkSessionRequestHelper $request; - public function __construct(private Session $minkSession) + public function __construct(private readonly Session $minkSession) { $this->sessionHelper = new MinkHelper($this->minkSession); $this->request = new MinkSessionRequestHelper(new MinkHelper($minkSession)); @@ -101,6 +101,6 @@ public function theResponseStatusCodeShouldBe($expectedResponseCode): void private function sanitizeOutput(string $output): false|string { - return json_encode(json_decode(trim($output), true)); + return json_encode(json_decode(trim($output), true, 512, JSON_THROW_ON_ERROR), JSON_THROW_ON_ERROR); } } diff --git a/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php b/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php index 2d70452cb..710b1d5c3 100644 --- a/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php +++ b/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php @@ -10,7 +10,7 @@ use CodelyTv\Shared\Infrastructure\Bus\Event\InMemory\InMemorySymfonyEventBus; use CodelyTv\Shared\Infrastructure\Doctrine\DatabaseConnections; -final class ApplicationFeatureContext implements Context +final readonly class ApplicationFeatureContext implements Context { public function __construct( private DatabaseConnections $connections, diff --git a/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php b/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php index 3586816a1..a394baaec 100644 --- a/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php @@ -41,7 +41,7 @@ public function it_should_raise_an_exception_dispatching_a_non_registered_comman private function commandHandler(): object { return new class () { - public function __invoke(FakeCommand $command): void + public function __invoke(FakeCommand $command): never { throw new RuntimeException('This works fine!'); } diff --git a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php index 0934f42bc..f9e921a8b 100644 --- a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php @@ -22,12 +22,12 @@ final class RabbitMqEventBusTest extends InfrastructureTestCase { private $connection; - private $exchangeName; - private $configurer; - private $publisher; - private $consumer; - private $fakeSubscriber; - private $consumerHasBeenExecuted; + private string $exchangeName; + private RabbitMqConfigurer $configurer; + private RabbitMqEventBus $publisher; + private RabbitMqDomainEventsConsumer $consumer; + private TestAllWorksOnRabbitMqEventsPublished $fakeSubscriber; + private bool $consumerHasBeenExecuted; protected function setUp(): void { @@ -145,7 +145,7 @@ private function assertConsumer(DomainEvent ...$expectedDomainEvents): callable private function failingConsumer(): callable { - return static function (DomainEvent $domainEvent): void { + return static function (DomainEvent $domainEvent): never { throw new RuntimeException('To test'); }; } diff --git a/tests/Shared/Infrastructure/Bus/Query/FakeResponse.php b/tests/Shared/Infrastructure/Bus/Query/FakeResponse.php index 36b437b5e..2ba0b4cee 100644 --- a/tests/Shared/Infrastructure/Bus/Query/FakeResponse.php +++ b/tests/Shared/Infrastructure/Bus/Query/FakeResponse.php @@ -6,7 +6,7 @@ use CodelyTv\Shared\Domain\Bus\Query\Response; -final class FakeResponse implements Response +final readonly class FakeResponse implements Response { public function __construct(private int $number) { diff --git a/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php b/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php index 48fd55d26..d25b907f8 100644 --- a/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php @@ -41,7 +41,7 @@ public function it_should_raise_an_exception_dispatching_a_non_registered_query( private function queryHandler(): object { return new class () { - public function __invoke(FakeQuery $query): void + public function __invoke(FakeQuery $query): never { throw new RuntimeException('This works fine!'); } diff --git a/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php b/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php index 19058ab66..a8b6b0688 100644 --- a/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php +++ b/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php @@ -6,6 +6,7 @@ use Doctrine\DBAL\Connection; use Doctrine\ORM\EntityManagerInterface; + use function Lambdish\Phunctional\first; use function Lambdish\Phunctional\map; diff --git a/tests/Shared/Infrastructure/Elastic/ElasticDatabaseCleaner.php b/tests/Shared/Infrastructure/Elastic/ElasticDatabaseCleaner.php index 651ede7f6..4dc86b3c3 100644 --- a/tests/Shared/Infrastructure/Elastic/ElasticDatabaseCleaner.php +++ b/tests/Shared/Infrastructure/Elastic/ElasticDatabaseCleaner.php @@ -5,6 +5,7 @@ namespace CodelyTv\Tests\Shared\Infrastructure\Elastic; use CodelyTv\Shared\Infrastructure\Elasticsearch\ElasticsearchClient; + use function Lambdish\Phunctional\each; final class ElasticDatabaseCleaner diff --git a/tests/Shared/Infrastructure/Mink/MinkHelper.php b/tests/Shared/Infrastructure/Mink/MinkHelper.php index 81d4407c5..a820db5e2 100644 --- a/tests/Shared/Infrastructure/Mink/MinkHelper.php +++ b/tests/Shared/Infrastructure/Mink/MinkHelper.php @@ -9,7 +9,7 @@ use Symfony\Component\BrowserKit\AbstractBrowser; use Symfony\Component\DomCrawler\Crawler; -final class MinkHelper +final readonly class MinkHelper { public function __construct(private Session $session) { diff --git a/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php b/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php index 9cc8525c6..b1760fce0 100644 --- a/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php +++ b/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php @@ -7,9 +7,9 @@ use Behat\Gherkin\Node\PyStringNode; use Symfony\Component\DomCrawler\Crawler; -final class MinkSessionRequestHelper +final readonly class MinkSessionRequestHelper { - public function __construct(private $sessionHelper) + public function __construct(private MinkHelper $sessionHelper) { } diff --git a/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php b/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php index 056fe1e26..73a59cc64 100644 --- a/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php +++ b/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php @@ -7,9 +7,9 @@ use CodelyTv\Tests\Shared\Infrastructure\PhpUnit\Constraint\CodelyTvConstraintIsSimilar; use Mockery\Matcher\MatcherAbstract; -final class CodelyTvMatcherIsSimilar extends MatcherAbstract +final class CodelyTvMatcherIsSimilar extends MatcherAbstract implements \Stringable { - private CodelyTvConstraintIsSimilar $constraint; + private readonly CodelyTvConstraintIsSimilar $constraint; public function __construct($value, $delta = 0.0) { diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php index afa3a6f18..78f9dd3d9 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php @@ -8,6 +8,7 @@ use CodelyTv\Tests\Shared\Domain\TestUtils; use SebastianBergmann\Comparator\Comparator; use SebastianBergmann\Comparator\ComparisonFailure; + use function Lambdish\Phunctional\all; use function Lambdish\Phunctional\any; use function Lambdish\Phunctional\instance_of; @@ -38,7 +39,7 @@ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = f private function contains(array $expectedArray, array $actualArray): bool { - $exists = fn (AggregateRoot $expected) => any( + $exists = fn (AggregateRoot $expected): bool => any( fn (AggregateRoot $actual) => TestUtils::isSimilar($expected, $actual), $actualArray ); diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php index b7dd6773f..f1975a01d 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php @@ -8,6 +8,7 @@ use CodelyTv\Tests\Shared\Domain\TestUtils; use SebastianBergmann\Comparator\Comparator; use SebastianBergmann\Comparator\ComparisonFailure; + use function Lambdish\Phunctional\all; use function Lambdish\Phunctional\any; use function Lambdish\Phunctional\instance_of; @@ -38,7 +39,7 @@ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = f private function contains(array $expectedArray, array $actualArray): bool { - $exists = static fn (DomainEvent $expected) => any( + $exists = static fn (DomainEvent $expected): bool => any( static fn (DomainEvent $actual) => TestUtils::isSimilar($expected, $actual), $actualArray ); diff --git a/tests/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php b/tests/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php index 7a19a089c..5ee3ce2ed 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php +++ b/tests/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php @@ -14,13 +14,14 @@ use PHPUnit\Framework\ExpectationFailedException; use SebastianBergmann\Comparator\ComparisonFailure; use SebastianBergmann\Comparator\Factory; + use function is_string; use function sprintf; // Based on \PHPUnit\Framework\Constraint\IsEqual final class CodelyTvConstraintIsSimilar extends Constraint { - public function __construct(private $value, private float $delta = 0.0) + public function __construct(private $value, private readonly float $delta = 0.0) { } diff --git a/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php b/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php index f16af1891..757c4fda2 100644 --- a/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php +++ b/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php @@ -22,7 +22,7 @@ protected function setUp(): void parent::setUp(); } - protected function assertSimilar($expected, $actual): void + protected function assertSimilar(mixed $expected, mixed $actual): void { TestUtils::assertSimilar($expected, $actual); } diff --git a/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php b/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php index ce26b3a80..919441ae7 100644 --- a/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php +++ b/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php @@ -18,8 +18,8 @@ abstract class UnitTestCase extends MockeryTestCase { - private EventBus|MockInterface|null $eventBus; - private UuidGenerator|MockInterface|null $uuidGenerator; + private EventBus|MockInterface|null $eventBus = null; + private UuidGenerator|MockInterface|null $uuidGenerator = null; protected function mock(string $className): MockInterface { @@ -44,7 +44,7 @@ protected function shouldNotPublishDomainEvent(): void protected function eventBus(): EventBus|MockInterface { - return $this->eventBus = $this->eventBus ?? $this->mock(EventBus::class); + return $this->eventBus ??= $this->mock(EventBus::class); } protected function shouldGenerateUuid(string $uuid): void @@ -58,7 +58,7 @@ protected function shouldGenerateUuid(string $uuid): void protected function uuidGenerator(): UuidGenerator|MockInterface { - return $this->uuidGenerator = $this->uuidGenerator ?? $this->mock(UuidGenerator::class); + return $this->uuidGenerator ??= $this->mock(UuidGenerator::class); } protected function notify(DomainEvent $event, callable $subscriber): void From b2aa09486f5a01464831e66442754f2d378cfc1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Wed, 27 Sep 2023 14:17:19 +0200 Subject: [PATCH 12/40] chore: use pecl instead of pickle (#352) --- Dockerfile | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2487c2e17..e5dd7520c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,27 +1,19 @@ FROM php:8.2-fpm-alpine WORKDIR /app -RUN wget https://github.com/FriendsOfPHP/pickle/releases/download/v0.7.11/pickle.phar \ - && mv pickle.phar /usr/local/bin/pickle \ - && chmod +x /usr/local/bin/pickle - RUN apk --update upgrade \ - && apk add --no-cache autoconf automake make gcc g++ bash icu-dev libzip-dev rabbitmq-c rabbitmq-c-dev linux-headers \ - && docker-php-ext-install -j$(nproc) \ + && apk add --no-cache autoconf automake make gcc g++ bash icu-dev libzip-dev rabbitmq-c rabbitmq-c-dev linux-headers + +RUN pecl install apcu-5.1.22 && pecl install amqp-2.1.0 && pecl install xdebug-3.2.2 + +RUN docker-php-ext-install -j$(nproc) \ bcmath \ opcache \ intl \ zip \ pdo_mysql -RUN pickle install apcu@5.1.22 -RUN pickle install amqp@2.1.0 -RUN pickle install xdebug@3.2.2 - -RUN docker-php-ext-enable \ - amqp \ - apcu \ - opcache +RUN docker-php-ext-enable amqp apcu opcache RUN curl -sS https://get.symfony.com/cli/installer | bash -s - --install-dir /usr/local/bin From 966edc24cc421a60ab39368013093ac72c589a6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Wed, 27 Sep 2023 19:43:18 +0200 Subject: [PATCH 13/40] feat: add easy code standard (#353) * feat: add easy code standard * style: apply easy code standard * style: add new php cs fixer rules * style: apply new php cs fixer rules * style: apply new php cs fixer rules --- .php-cs-fixer.dist.php | 23 - Makefile | 2 +- apps/backoffice/backend/config/bundles.php | 4 +- apps/backoffice/backend/public/index.php | 6 +- .../backend/src/BackofficeBackendKernel.php | 2 +- .../Courses/CoursesGetController.php | 18 +- .../Controller/Metrics/MetricsController.php | 6 +- apps/backoffice/frontend/config/bundles.php | 6 +- apps/backoffice/frontend/public/index.php | 6 +- .../frontend/src/BackofficeFrontendKernel.php | 2 +- .../Courses/CoursesGetWebController.php | 8 +- .../Courses/CoursesPostWebController.php | 4 +- .../Controller/Home/HomeGetWebController.php | 2 +- .../Controller/Metrics/MetricsController.php | 6 +- apps/bootstrap.php | 10 +- apps/mooc/backend/config/bundles.php | 4 +- apps/mooc/backend/public/index.php | 6 +- .../ConsumeRabbitMqDomainEventsCommand.php | 2 +- ...SupervisorRabbitMqConsumerFilesCommand.php | 14 +- .../HealthCheck/HealthCheckGetController.php | 6 +- .../Controller/Metrics/MetricsController.php | 6 +- apps/mooc/backend/src/MoocBackendKernel.php | 2 +- composer.json | 3 +- composer.lock | 424 +++--------------- ecs.php | 137 ++++++ .../Application/Store/DomainEventStorer.php | 4 +- .../Store/StoreDomainEventOnOccurred.php | 10 +- .../Domain/AnalyticsDomainEvent.php | 3 +- .../AnalyticsDomainEventAggregateId.php | 4 +- .../Domain/AnalyticsDomainEventBody.php | 4 +- .../Domain/AnalyticsDomainEventId.php | 4 +- .../Domain/AnalyticsDomainEventName.php | 4 +- .../Authenticate/AuthenticateUserCommand.php | 4 +- .../AuthenticateUserCommandHandler.php | 4 +- .../Authenticate/UserAuthenticator.php | 6 +- src/Backoffice/Auth/Domain/AuthPassword.php | 2 +- src/Backoffice/Auth/Domain/AuthUser.php | 4 +- src/Backoffice/Auth/Domain/AuthUsername.php | 4 +- .../Persistence/InMemoryAuthRepository.php | 2 +- .../Application/BackofficeCourseResponse.php | 4 +- .../Create/BackofficeCourseCreator.php | 4 +- .../CreateBackofficeCourseOnCourseCreated.php | 4 +- .../AllBackofficeCoursesSearcher.php | 4 +- .../SearchAllBackofficeCoursesQuery.php | 4 +- ...SearchAllBackofficeCoursesQueryHandler.php | 4 +- .../BackofficeCoursesByCriteriaSearcher.php | 4 +- ...SearchBackofficeCoursesByCriteriaQuery.php | 3 +- ...ackofficeCoursesByCriteriaQueryHandler.php | 6 +- .../Courses/Domain/BackofficeCourse.php | 10 +- ...nMemoryCacheBackofficeCourseRepository.php | 8 +- .../Application/Create/CourseCreator.php | 4 +- .../Create/CreateCourseCommand.php | 4 +- .../Create/CreateCourseCommandHandler.php | 8 +- .../Courses/Application/Find/CourseFinder.php | 6 +- .../Application/Update/CourseRenamer.php | 2 +- src/Mooc/Courses/Domain/Course.php | 4 +- .../Domain/CourseCreatedDomainEvent.php | 2 +- src/Mooc/Courses/Domain/CourseDuration.php | 4 +- src/Mooc/Courses/Domain/CourseName.php | 4 +- .../Application/Find/CoursesCounterFinder.php | 6 +- .../Find/CoursesCounterResponse.php | 4 +- .../Find/FindCoursesCounterQuery.php | 4 +- .../Find/FindCoursesCounterQueryHandler.php | 4 +- .../Increment/CoursesCounterIncrementer.php | 3 +- ...IncrementCoursesCounterOnCourseCreated.php | 4 +- .../CoursesCounter/Domain/CoursesCounter.php | 4 +- .../Domain/CoursesCounterId.php | 4 +- src/Mooc/Shared/Domain/Courses/CourseId.php | 4 +- src/Mooc/Shared/Domain/Videos/VideoUrl.php | 2 +- .../Doctrine/DbalTypesSearcher.php | 9 +- .../Doctrine/DoctrinePrefixesSearcher.php | 2 +- .../Doctrine/MoocEntityManagerFactory.php | 2 +- .../Application/Create/CreateVideoCommand.php | 3 +- .../Create/CreateVideoCommandHandler.php | 12 +- .../Application/Create/VideoCreator.php | 4 +- .../Application/Find/FindVideoQuery.php | 4 +- .../Videos/Application/Find/VideoResponse.php | 3 +- .../Application/Trim/TrimVideoCommand.php | 4 +- .../Trim/TrimVideoCommandHandler.php | 6 +- .../Videos/Application/Trim/VideoTrimmer.php | 4 +- src/Mooc/Videos/Domain/Video.php | 5 +- .../Videos/Domain/VideoCreatedDomainEvent.php | 8 +- src/Mooc/Videos/Domain/VideoFinder.php | 6 +- src/Mooc/Videos/Domain/VideoId.php | 4 +- src/Mooc/Videos/Domain/VideoTitle.php | 4 +- src/Mooc/Videos/Domain/VideoType.php | 2 +- .../Persistence/VideoRepositoryMySql.php | 10 +- src/Shared/Domain/Aggregate/AggregateRoot.php | 2 +- src/Shared/Domain/Bus/Command/Command.php | 4 +- .../Domain/Bus/Command/CommandHandler.php | 4 +- src/Shared/Domain/Bus/Event/DomainEvent.php | 10 +- src/Shared/Domain/Bus/Query/Query.php | 4 +- src/Shared/Domain/Bus/Query/QueryHandler.php | 4 +- src/Shared/Domain/Bus/Query/Response.php | 4 +- src/Shared/Domain/Collection.php | 4 +- src/Shared/Domain/Criteria/Criteria.php | 3 +- src/Shared/Domain/Criteria/Filter.php | 3 +- src/Shared/Domain/Criteria/FilterField.php | 4 +- src/Shared/Domain/Criteria/FilterOperator.php | 10 +- src/Shared/Domain/Criteria/FilterValue.php | 4 +- src/Shared/Domain/Criteria/Order.php | 14 +- src/Shared/Domain/Criteria/OrderBy.php | 4 +- src/Shared/Domain/Criteria/OrderType.php | 2 +- src/Shared/Domain/Second.php | 4 +- src/Shared/Domain/SecondsInterval.php | 2 +- src/Shared/Domain/Utils.php | 13 +- src/Shared/Domain/ValueObject/Enum.php | 16 +- .../Domain/ValueObject/IntValueObject.php | 8 +- src/Shared/Domain/ValueObject/SimpleUuid.php | 7 + .../Domain/ValueObject/StringValueObject.php | 6 +- src/Shared/Domain/ValueObject/Uuid.php | 10 +- .../Bus/CallableFirstParameterExtractor.php | 6 +- .../Bus/Event/DomainEventJsonDeserializer.php | 10 +- .../Bus/Event/DomainEventJsonSerializer.php | 6 +- .../Bus/Event/DomainEventMapping.php | 5 +- .../Event/DomainEventSubscriberLocator.php | 4 +- .../InMemory/InMemorySymfonyEventBus.php | 4 +- .../MySqlDoctrineDomainEventsConsumer.php | 4 +- .../Bus/Event/MySql/MySqlDoctrineEventBus.php | 8 +- .../Bus/Event/RabbitMq/RabbitMqConfigurer.php | 20 +- .../Bus/Event/RabbitMq/RabbitMqConnection.php | 8 +- .../RabbitMq/RabbitMqDomainEventsConsumer.php | 11 +- .../Bus/Event/RabbitMq/RabbitMqEventBus.php | 11 +- .../WithPrometheusMonitoringEventBus.php | 3 +- .../Doctrine/DoctrineEntityManagerFactory.php | 20 +- .../Elasticsearch/ElasticsearchClient.php | 8 +- .../ElasticsearchClientFactory.php | 2 +- .../Infrastructure/Logger/MonologLogger.php | 4 +- .../Doctrine/DoctrineCriteriaConverter.php | 3 +- .../Doctrine/DoctrineRepository.php | 4 +- .../Persistence/Doctrine/UuidType.php | 8 +- .../Elasticsearch/ElasticQueryGenerator.php | 21 +- .../ElasticsearchCriteriaConverter.php | 8 +- .../Elasticsearch/ElasticsearchRepository.php | 6 +- .../Symfony/AddJsonBodyToRequestListener.php | 2 +- .../Symfony/ApiExceptionListener.php | 6 +- .../ApiExceptionsHttpStatusCodeMapping.php | 4 +- .../Symfony/BasicHttpAuthMiddleware.php | 12 +- .../Infrastructure/Symfony/WebController.php | 18 +- .../AuthenticateUserCommandHandlerTest.php | 6 +- .../Domain/BackofficeCourseCriteriaMother.php | 10 +- ...icsearchBackofficeCourseRepositoryTest.php | 14 +- .../MySqlBackofficeCourseRepositoryTest.php | 14 +- .../PhpUnit/BackofficeEnvironmentArranger.php | 8 +- .../Create/CreateCourseCommandHandlerTest.php | 2 +- .../Application/Update/CourseRenamerTest.php | 4 +- .../FindCoursesCounterQueryHandlerTest.php | 4 +- ...ementCoursesCounterOnCourseCreatedTest.php | 18 +- .../PhpUnit/MoocEnvironmentArranger.php | 8 +- .../Infrastructure/Behat/ApiContext.php | 10 +- .../Behat/ApplicationFeatureContext.php | 3 +- .../Bus/Command/FakeCommand.php | 4 +- .../Command/InMemorySymfonyCommandBusTest.php | 2 +- .../Event/MySql/MySqlDoctrineEventBusTest.php | 13 +- .../Event/RabbitMq/RabbitMqEventBusTest.php | 10 +- .../TestAllWorksOnRabbitMqEventsPublished.php | 9 +- .../Infrastructure/Bus/Query/FakeQuery.php | 4 +- .../Infrastructure/Bus/Query/FakeResponse.php | 4 +- .../Bus/Query/InMemorySymfonyQueryBusTest.php | 4 +- .../Doctrine/MySqlDatabaseCleaner.php | 2 +- .../Shared/Infrastructure/Mink/MinkHelper.php | 12 +- .../Mink/MinkSessionRequestHelper.php | 4 +- .../Mockery/CodelyTvMatcherIsSimilar.php | 3 +- .../AggregateRootSimilarComparator.php | 4 +- .../Comparator/DateTimeSimilarComparator.php | 2 +- .../DateTimeStringSimilarComparator.php | 6 +- .../DomainEventSimilarComparator.php | 4 +- .../CodelyTvConstraintIsSimilar.php | 27 +- .../Infrastructure/PhpUnit/UnitTestCase.php | 6 +- 169 files changed, 604 insertions(+), 981 deletions(-) delete mode 100644 .php-cs-fixer.dist.php create mode 100644 ecs.php create mode 100644 src/Shared/Domain/ValueObject/SimpleUuid.php diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php deleted file mode 100644 index bb744c831..000000000 --- a/.php-cs-fixer.dist.php +++ /dev/null @@ -1,23 +0,0 @@ -in( - [ - __DIR__ . '/apps/backoffice/backend/src', - __DIR__ . '/apps/backoffice/frontend/src', - __DIR__ . '/apps/mooc/backend/src', - __DIR__ . '/apps/mooc/frontend/src', - __DIR__ . '/src', - __DIR__ . '/tests', - ] -); - -$config = new PhpCsFixer\Config(); - -return $config->setRules( - [ - '@PSR12' => true, - 'strict_param' => true, - 'modernize_strpos' => true, - 'array_syntax' => ['syntax' => 'short'], - ] -)->setFinder($finder); diff --git a/Makefile b/Makefile index ca2150c78..a3ea006ee 100644 --- a/Makefile +++ b/Makefile @@ -49,7 +49,7 @@ static-analysis: composer-env-file .PHONY: lint lint: - docker exec codely-php_ddd_skeleton-mooc_backend-php ./vendor/bin/php-cs-fixer fix --config .php-cs-fixer.dist.php --allow-risky=yes --dry-run + docker exec codely-php_ddd_skeleton-mooc_backend-php ./vendor/bin/ecs check .PHONY: run-tests run-tests: composer-env-file diff --git a/apps/backoffice/backend/config/bundles.php b/apps/backoffice/backend/config/bundles.php index 7de452252..8455bba43 100644 --- a/apps/backoffice/backend/config/bundles.php +++ b/apps/backoffice/backend/config/bundles.php @@ -1,7 +1,9 @@ ['all' => true], + Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['test' => true], // WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] ]; diff --git a/apps/backoffice/backend/public/index.php b/apps/backoffice/backend/public/index.php index c8cc58db9..977a86d4b 100644 --- a/apps/backoffice/backend/public/index.php +++ b/apps/backoffice/backend/public/index.php @@ -1,5 +1,7 @@ handle($request); $response->send(); $kernel->terminate($request, $response); diff --git a/apps/backoffice/backend/src/BackofficeBackendKernel.php b/apps/backoffice/backend/src/BackofficeBackendKernel.php index aa828f9f8..9e25fc2cc 100644 --- a/apps/backoffice/backend/src/BackofficeBackendKernel.php +++ b/apps/backoffice/backend/src/BackofficeBackendKernel.php @@ -12,7 +12,7 @@ use function dirname; -final class BackofficeBackendKernel extends Kernel +class BackofficeBackendKernel extends Kernel { use MicroKernelTrait; diff --git a/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php b/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php index 3819852df..545846fc5 100644 --- a/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php +++ b/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php @@ -15,33 +15,31 @@ final readonly class CoursesGetController { - public function __construct(private QueryBus $queryBus) - { - } + public function __construct(private QueryBus $queryBus) {} public function __invoke(Request $request): JsonResponse { $orderBy = $request->query->get('order_by'); $order = $request->query->get('order'); - $limit = $request->query->get('limit'); + $limit = $request->query->get('limit'); $offset = $request->query->get('offset'); /** @var BackofficeCoursesResponse $response */ $response = $this->queryBus->ask( new SearchBackofficeCoursesByCriteriaQuery( (array) $request->query->get('filters'), - null === $orderBy ? null : (string) $orderBy, - null === $order ? null : (string) $order, - null === $limit ? null : (int) $limit, - null === $offset ? null : (int) $offset + $orderBy === null ? null : (string) $orderBy, + $order === null ? null : (string) $order, + $limit === null ? null : (int) $limit, + $offset === null ? null : (int) $offset ) ); return new JsonResponse( map( fn (BackofficeCourseResponse $course) => [ - 'id' => $course->id(), - 'name' => $course->name(), + 'id' => $course->id(), + 'name' => $course->name(), 'duration' => $course->duration(), ], $response->courses() diff --git a/apps/backoffice/backend/src/Controller/Metrics/MetricsController.php b/apps/backoffice/backend/src/Controller/Metrics/MetricsController.php index a4fced07a..21a639d9f 100644 --- a/apps/backoffice/backend/src/Controller/Metrics/MetricsController.php +++ b/apps/backoffice/backend/src/Controller/Metrics/MetricsController.php @@ -11,14 +11,12 @@ final readonly class MetricsController { - public function __construct(private PrometheusMonitor $monitor) - { - } + public function __construct(private PrometheusMonitor $monitor) {} public function __invoke(Request $request): Response { $renderer = new RenderTextFormat(); - $result = $renderer->render($this->monitor->registry()->getMetricFamilySamples()); + $result = $renderer->render($this->monitor->registry()->getMetricFamilySamples()); return new Response($result, 200, ['Content-Type' => RenderTextFormat::MIME_TYPE]); } diff --git a/apps/backoffice/frontend/config/bundles.php b/apps/backoffice/frontend/config/bundles.php index c44a868b7..0a87a7689 100644 --- a/apps/backoffice/frontend/config/bundles.php +++ b/apps/backoffice/frontend/config/bundles.php @@ -1,8 +1,10 @@ ['all' => true], + Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['test' => true], - Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], // WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] ]; diff --git a/apps/backoffice/frontend/public/index.php b/apps/backoffice/frontend/public/index.php index f8510243a..c18f536e7 100644 --- a/apps/backoffice/frontend/public/index.php +++ b/apps/backoffice/frontend/public/index.php @@ -1,5 +1,7 @@ handle($request); $response->send(); $kernel->terminate($request, $response); diff --git a/apps/backoffice/frontend/src/BackofficeFrontendKernel.php b/apps/backoffice/frontend/src/BackofficeFrontendKernel.php index 9413df568..650c7d02b 100644 --- a/apps/backoffice/frontend/src/BackofficeFrontendKernel.php +++ b/apps/backoffice/frontend/src/BackofficeFrontendKernel.php @@ -12,7 +12,7 @@ use function dirname; -final class BackofficeFrontendKernel extends Kernel +class BackofficeFrontendKernel extends Kernel { use MicroKernelTrait; diff --git a/apps/backoffice/frontend/src/Controller/Courses/CoursesGetWebController.php b/apps/backoffice/frontend/src/Controller/Courses/CoursesGetWebController.php index 549fcd62b..6bd5b5d78 100644 --- a/apps/backoffice/frontend/src/Controller/Courses/CoursesGetWebController.php +++ b/apps/backoffice/frontend/src/Controller/Courses/CoursesGetWebController.php @@ -6,7 +6,7 @@ use CodelyTv\Mooc\CoursesCounter\Application\Find\CoursesCounterResponse; use CodelyTv\Mooc\CoursesCounter\Application\Find\FindCoursesCounterQuery; -use CodelyTv\Shared\Domain\ValueObject\Uuid; +use CodelyTv\Shared\Domain\ValueObject\SimpleUuid; use CodelyTv\Shared\Infrastructure\Symfony\WebController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -21,10 +21,10 @@ public function __invoke(Request $request): Response return $this->render( 'pages/courses/courses.html.twig', [ - 'title' => 'Courses', - 'description' => 'Courses CodelyTV - Backoffice', + 'title' => 'Courses', + 'description' => 'Courses CodelyTV - Backoffice', 'courses_counter' => $coursesCounterResponse->total(), - 'new_course_id' => Uuid::random()->value(), + 'new_course_id' => SimpleUuid::random()->value(), ] ); } diff --git a/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php b/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php index 0b76138b7..22e168f8d 100644 --- a/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php +++ b/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php @@ -32,8 +32,8 @@ private function validateRequest(Request $request): ConstraintViolationListInter { $constraint = new Assert\Collection( [ - 'id' => new Assert\Uuid(), - 'name' => [new Assert\NotBlank(), new Assert\Length(['min' => 1, 'max' => 255])], + 'id' => new Assert\Uuid(), + 'name' => [new Assert\NotBlank(), new Assert\Length(['min' => 1, 'max' => 255])], 'duration' => [new Assert\NotBlank(), new Assert\Length(['min' => 4, 'max' => 100])], ] ); diff --git a/apps/backoffice/frontend/src/Controller/Home/HomeGetWebController.php b/apps/backoffice/frontend/src/Controller/Home/HomeGetWebController.php index 8cdc343d8..757747ac0 100644 --- a/apps/backoffice/frontend/src/Controller/Home/HomeGetWebController.php +++ b/apps/backoffice/frontend/src/Controller/Home/HomeGetWebController.php @@ -15,7 +15,7 @@ public function __invoke(Request $request): Response return $this->render( 'pages/home.html.twig', [ - 'title' => 'Welcome', + 'title' => 'Welcome', 'description' => 'CodelyTV - Backoffice', ] ); diff --git a/apps/backoffice/frontend/src/Controller/Metrics/MetricsController.php b/apps/backoffice/frontend/src/Controller/Metrics/MetricsController.php index 1e00d4893..1a853490c 100644 --- a/apps/backoffice/frontend/src/Controller/Metrics/MetricsController.php +++ b/apps/backoffice/frontend/src/Controller/Metrics/MetricsController.php @@ -11,14 +11,12 @@ final readonly class MetricsController { - public function __construct(private PrometheusMonitor $monitor) - { - } + public function __construct(private PrometheusMonitor $monitor) {} public function __invoke(Request $request): Response { $renderer = new RenderTextFormat(); - $result = $renderer->render($this->monitor->registry()->getMetricFamilySamples()); + $result = $renderer->render($this->monitor->registry()->getMetricFamilySamples()); return new Response($result, 200, ['Content-Type' => RenderTextFormat::MIME_TYPE]); } diff --git a/apps/bootstrap.php b/apps/bootstrap.php index 1c3488ac1..cb93ce7f7 100644 --- a/apps/bootstrap.php +++ b/apps/bootstrap.php @@ -1,5 +1,7 @@ loadEnv($rootPath . '/.env'); + (new Dotenv())->loadEnv($rootPath . '/.env'); } -$_SERVER += $_ENV; -$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = ($_SERVER['APP_ENV'] ?? $_ENV['APP_ENV'] ?? null) ?: 'dev'; -$_SERVER['APP_DEBUG'] ??= $_ENV['APP_DEBUG'] ?? 'prod' !== $_SERVER['APP_ENV']; +$_SERVER += $_ENV; +$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = ($_SERVER['APP_ENV'] ?? $_ENV['APP_ENV'] ?? null) ?: 'dev'; +$_SERVER['APP_DEBUG'] ??= $_ENV['APP_DEBUG'] ?? $_SERVER['APP_ENV'] !== 'prod'; $_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = (int) $_SERVER['APP_DEBUG'] || filter_var($_SERVER['APP_DEBUG'], FILTER_VALIDATE_BOOLEAN) ? '1' : '0'; diff --git a/apps/mooc/backend/config/bundles.php b/apps/mooc/backend/config/bundles.php index 7de452252..8455bba43 100644 --- a/apps/mooc/backend/config/bundles.php +++ b/apps/mooc/backend/config/bundles.php @@ -1,7 +1,9 @@ ['all' => true], + Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['test' => true], // WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] ]; diff --git a/apps/mooc/backend/public/index.php b/apps/mooc/backend/public/index.php index d3de27b72..0d1e3eae8 100644 --- a/apps/mooc/backend/public/index.php +++ b/apps/mooc/backend/public/index.php @@ -1,5 +1,7 @@ handle($request); $response->send(); $kernel->terminate($request, $response); diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php index 49a32a533..125a50a24 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php @@ -36,7 +36,7 @@ protected function configure(): void protected function execute(InputInterface $input, OutputInterface $output): int { - $queueName = (string) $input->getArgument('queue'); + $queueName = (string) $input->getArgument('queue'); $eventsToProcess = (int) $input->getArgument('quantity'); repeat($this->consumer($queueName), $eventsToProcess); diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php index fcf4c5ba7..5883b60db 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php @@ -16,9 +16,9 @@ final class GenerateSupervisorRabbitMqConsumerFilesCommand extends Command { - private const EVENTS_TO_PROCESS_AT_TIME = 200; + private const EVENTS_TO_PROCESS_AT_TIME = 200; private const NUMBERS_OF_PROCESSES_PER_SUBSCRIBER = 1; - private const SUPERVISOR_PATH = __DIR__ . '/../../../../build/supervisor'; + private const SUPERVISOR_PATH = __DIR__ . '/../../../../build/supervisor'; protected static $defaultName = 'codelytv:domain-events:rabbitmq:generate-supervisor-files'; public function __construct(private readonly DomainEventSubscriberLocator $locator) @@ -45,17 +45,11 @@ protected function execute(InputInterface $input, OutputInterface $output): int private function configCreator(string $path): callable { return function (DomainEventSubscriber $subscriber) use ($path): void { - $queueName = RabbitMqQueueNameFormatter::format($subscriber); + $queueName = RabbitMqQueueNameFormatter::format($subscriber); $subscriberName = RabbitMqQueueNameFormatter::shortFormat($subscriber); $fileContent = str_replace( - [ - '{subscriber_name}', - '{queue_name}', - '{path}', - '{processes}', - '{events_to_process}', - ], + ['{subscriber_name}', '{queue_name}', '{path}', '{processes}', '{events_to_process}', ], [ $subscriberName, $queueName, diff --git a/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php b/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php index c69c0fd70..d500d03bb 100644 --- a/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php +++ b/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php @@ -10,16 +10,14 @@ final readonly class HealthCheckGetController { - public function __construct(private RandomNumberGenerator $generator) - { - } + public function __construct(private RandomNumberGenerator $generator) {} public function __invoke(Request $request): JsonResponse { return new JsonResponse( [ 'mooc-backend' => 'ok', - 'rand' => $this->generator->generate(), + 'rand' => $this->generator->generate(), ] ); } diff --git a/apps/mooc/backend/src/Controller/Metrics/MetricsController.php b/apps/mooc/backend/src/Controller/Metrics/MetricsController.php index 905cc6e7e..18619a02c 100644 --- a/apps/mooc/backend/src/Controller/Metrics/MetricsController.php +++ b/apps/mooc/backend/src/Controller/Metrics/MetricsController.php @@ -11,14 +11,12 @@ final readonly class MetricsController { - public function __construct(private PrometheusMonitor $monitor) - { - } + public function __construct(private PrometheusMonitor $monitor) {} public function __invoke(Request $request): Response { $renderer = new RenderTextFormat(); - $result = $renderer->render($this->monitor->registry()->getMetricFamilySamples()); + $result = $renderer->render($this->monitor->registry()->getMetricFamilySamples()); return new Response($result, 200, ['Content-Type' => RenderTextFormat::MIME_TYPE]); } diff --git a/apps/mooc/backend/src/MoocBackendKernel.php b/apps/mooc/backend/src/MoocBackendKernel.php index 06e0ec90d..9a5b3e1bc 100644 --- a/apps/mooc/backend/src/MoocBackendKernel.php +++ b/apps/mooc/backend/src/MoocBackendKernel.php @@ -12,7 +12,7 @@ use function dirname; -final class MoocBackendKernel extends Kernel +class MoocBackendKernel extends Kernel { use MicroKernelTrait; diff --git a/composer.json b/composer.json index 83d77b034..1f498b9b6 100644 --- a/composer.json +++ b/composer.json @@ -51,8 +51,9 @@ "fakerphp/faker": "^1", "symfony/error-handler": "^6", + + "symplify/easy-coding-standard": "^12.0", "vimeo/psalm": "^5.15", - "friendsofphp/php-cs-fixer": "^3", "rector/rector": "^0.18.4" }, "autoload": { diff --git a/composer.lock b/composer.lock index 7ededf775..4cb195c0d 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": "edaf2180f50e9c9bd8f7524b0844e9ee", + "content-hash": "6a083c6e70896a6fe633c8afc29cb888", "packages": [ { "name": "brick/math", @@ -6681,101 +6681,6 @@ }, "time": "2021-12-24T13:14:59+00:00" }, - { - "name": "friendsofphp/php-cs-fixer", - "version": "v3.30.0", - "source": { - "type": "git", - "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "95c64693b2f149966a2bc05a7a4981b0343ea52f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/95c64693b2f149966a2bc05a7a4981b0343ea52f", - "reference": "95c64693b2f149966a2bc05a7a4981b0343ea52f", - "shasum": "" - }, - "require": { - "composer/semver": "^3.3", - "composer/xdebug-handler": "^3.0.3", - "ext-json": "*", - "ext-tokenizer": "*", - "php": "^7.4 || ^8.0", - "sebastian/diff": "^4.0 || ^5.0", - "symfony/console": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.27", - "symfony/polyfill-php80": "^1.27", - "symfony/polyfill-php81": "^1.27", - "symfony/process": "^5.4 || ^6.0", - "symfony/stopwatch": "^5.4 || ^6.0" - }, - "require-dev": { - "facile-it/paraunit": "^1.3 || ^2.0", - "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^2.0", - "mikey179/vfsstream": "^1.6.11", - "php-coveralls/php-coveralls": "^2.5.3", - "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.16", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.6", - "phpunitgoodpractices/traits": "^1.9.2", - "symfony/phpunit-bridge": "^6.2.3", - "symfony/yaml": "^5.4 || ^6.0" - }, - "suggest": { - "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters." - }, - "bin": [ - "php-cs-fixer" - ], - "type": "application", - "autoload": { - "psr-4": { - "PhpCsFixer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" - } - ], - "description": "A tool to automatically fix PHP code style", - "keywords": [ - "Static code analysis", - "fixer", - "standards", - "static analysis" - ], - "support": { - "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.30.0" - }, - "funding": [ - { - "url": "https://github.com/keradus", - "type": "github" - } - ], - "time": "2023-09-26T22:10:43+00:00" - }, { "name": "hamcrest/hamcrest-php", "version": "v2.0.1", @@ -9915,213 +9820,6 @@ ], "time": "2023-08-01T07:43:40+00:00" }, - { - "name": "symfony/options-resolver", - "version": "v6.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a10f19f5198d589d5c33333cffe98dc9820332dd", - "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "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/v6.3.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": "2023-05-12T14:21:09+00:00" - }, - { - "name": "symfony/polyfill-php81", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b", - "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/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.28.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": "2023-01-26T09:26:14+00:00" - }, - { - "name": "symfony/process", - "version": "v6.3.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", - "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "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/v6.3.4" - }, - "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": "2023-08-07T10:39:22+00:00" - }, { "name": "symfony/proxy-manager-bridge", "version": "v6.3.0", @@ -10189,68 +9887,6 @@ ], "time": "2023-05-26T07:49:33+00:00" }, - { - "name": "symfony/stopwatch", - "version": "v6.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", - "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "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/v6.3.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": "2023-02-16T10:14:28+00:00" - }, { "name": "symfony/translation", "version": "v6.3.3", @@ -10346,6 +9982,64 @@ ], "time": "2023-07-31T07:08:24+00:00" }, + { + "name": "symplify/easy-coding-standard", + "version": "12.0.8", + "source": { + "type": "git", + "url": "https://github.com/easy-coding-standard/easy-coding-standard.git", + "reference": "99d87d188acc712dd6655ee946569f823cfeff69" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/99d87d188acc712dd6655ee946569f823cfeff69", + "reference": "99d87d188acc712dd6655ee946569f823cfeff69", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "conflict": { + "friendsofphp/php-cs-fixer": "<3.0", + "squizlabs/php_codesniffer": "<3.6", + "symplify/coding-standard": "<11.3" + }, + "bin": [ + "bin/ecs" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Use Coding Standard with 0-knowledge of PHP-CS-Fixer and PHP_CodeSniffer", + "keywords": [ + "Code style", + "automation", + "fixer", + "static analysis" + ], + "support": { + "issues": "https://github.com/easy-coding-standard/easy-coding-standard/issues", + "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.0.8" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2023-09-08T10:17:14+00:00" + }, { "name": "theseer/tokenizer", "version": "1.2.1", diff --git a/ecs.php b/ecs.php new file mode 100644 index 000000000..437848d5d --- /dev/null +++ b/ecs.php @@ -0,0 +1,137 @@ +paths([ + __DIR__ . '/apps', + __DIR__ . '/src', + __DIR__ . '/tests', + ]); + + $ecsConfig->sets([SetList::PSR_12]); + + $ecsConfig->rules([ + // Imports + NoUnusedImportsFixer::class, + FullyQualifiedStrictTypesFixer::class, + GlobalNamespaceImportFixer::class, + NoLeadingImportSlashFixer::class, + // Arrays + TrimArraySpacesFixer::class, + // Blank lines + BlankLineAfterStrictTypesFixer::class, + NoBlankLinesAfterClassOpeningFixer::class, + // Spacing + SingleLineEmptyBodyFixer::class, + CastSpacesFixer::class, + TypeDeclarationSpacesFixer::class, + TypesSpacesFixer::class, + // Casing + ClassReferenceNameCasingFixer::class, + LowercaseStaticReferenceFixer::class, + MagicMethodCasingFixer::class, + NativeFunctionCasingFixer::class, + NativeFunctionTypeDeclarationCasingFixer::class, + // Architecture + FinalClassFixer::class, + FinalPublicMethodForAbstractClassFixer::class, + ProtectedToPrivateFixer::class, + VisibilityRequiredFixer::class, + DateTimeImmutableFixer::class, + NoUselessElseFixer::class, + // Operator + AssignNullCoalescingToCoalesceEqualFixer::class, + NoUselessConcatOperatorFixer::class, + NoUselessNullsafeOperatorFixer::class, + ObjectOperatorWithoutWhitespaceFixer::class, + TernaryToElvisOperatorFixer::class, + TernaryToNullCoalescingFixer::class, + // Testing + PhpUnitConstructFixer::class, + PhpUnitDedicateAssertFixer::class, + PhpUnitDedicateAssertInternalTypeFixer::class, + PhpUnitExpectationFixer::class, + // Other + LineLengthFixer::class, + NoNullPropertyInitializationFixer::class, + NoUnneededFinalMethodFixer::class, + SelfAccessorFixer::class, + SelfStaticAccessorFixer::class, + NoUnneededControlParenthesesFixer::class, + NoUnneededCurlyBracesFixer::class, + SimplifiedIfReturnFixer::class, + TrailingCommaInMultilineFixer::class, + DeclareStrictTypesFixer::class, + StrictComparisonFixer::class, + SingleQuoteFixer::class, + StatementIndentationFixer::class, + ]); + + $ecsConfig->ruleWithConfiguration(ArraySyntaxFixer::class, ['syntax' => 'short']); + $ecsConfig->ruleWithConfiguration(LineLengthFixer::class, [LineLengthFixer::LINE_LENGTH => 120]); + $ecsConfig->ruleWithConfiguration(YodaStyleFixer::class, ['equal' => false, 'identical' => false, 'less_and_greater' => false]); + $ecsConfig->ruleWithConfiguration(PhpUnitMethodCasingFixer::class, ['case' => PhpUnitMethodCasingFixer::SNAKE_CASE]); + $ecsConfig->ruleWithConfiguration(OrderedTypesFixer::class, ['null_adjustment' => 'always_last']); + + $ecsConfig->skip([ + FinalClassFixer::class => [ + __DIR__ . '/apps/backoffice/backend/src/BackofficeBackendKernel.php', + __DIR__ . '/apps/backoffice/frontend/src/BackofficeFrontendKernel.php', + __DIR__ . '/apps/mooc/backend/src/MoocBackendKernel.php', + __DIR__ . '/src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php', + ] + ]); +}; diff --git a/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php b/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php index 999cebd2d..e5205d311 100644 --- a/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php +++ b/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php @@ -13,9 +13,7 @@ final readonly class DomainEventStorer { - public function __construct(private DomainEventsRepository $repository) - { - } + public function __construct(private DomainEventsRepository $repository) {} public function store( AnalyticsDomainEventId $id, diff --git a/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php b/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php index 11d0dd65e..011a0abe7 100644 --- a/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php +++ b/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php @@ -13,9 +13,7 @@ final readonly class StoreDomainEventOnOccurred implements DomainEventSubscriber { - public function __construct(private DomainEventStorer $storer) - { - } + public function __construct(private DomainEventStorer $storer) {} public static function subscribedTo(): array { @@ -24,10 +22,10 @@ public static function subscribedTo(): array public function __invoke(DomainEvent $event): void { - $id = new AnalyticsDomainEventId($event->eventId()); + $id = new AnalyticsDomainEventId($event->eventId()); $aggregateId = new AnalyticsDomainEventAggregateId($event->aggregateId()); - $name = new AnalyticsDomainEventName($event::eventName()); - $body = new AnalyticsDomainEventBody($event->toPrimitives()); + $name = new AnalyticsDomainEventName($event::eventName()); + $body = new AnalyticsDomainEventBody($event->toPrimitives()); $this->storer->store($id, $aggregateId, $name, $body); } diff --git a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php index 9eead61b2..0297eb90c 100644 --- a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php +++ b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php @@ -11,6 +11,5 @@ public function __construct( private AnalyticsDomainEventAggregateId $aggregateId, private AnalyticsDomainEventName $name, private AnalyticsDomainEventBody $body - ) { - } + ) {} } diff --git a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventAggregateId.php b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventAggregateId.php index 5b5c66a21..8d1bcdfbf 100644 --- a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventAggregateId.php +++ b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventAggregateId.php @@ -6,6 +6,4 @@ use CodelyTv\Shared\Domain\ValueObject\Uuid; -final class AnalyticsDomainEventAggregateId extends Uuid -{ -} +final class AnalyticsDomainEventAggregateId extends Uuid {} diff --git a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php index 492035244..1f5b227f1 100644 --- a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php +++ b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php @@ -6,9 +6,7 @@ final readonly class AnalyticsDomainEventBody { - public function __construct(private array $value) - { - } + public function __construct(private array $value) {} public function value(): array { diff --git a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventId.php b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventId.php index 2e186b375..6cfebcb7a 100644 --- a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventId.php +++ b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventId.php @@ -6,6 +6,4 @@ use CodelyTv\Shared\Domain\ValueObject\Uuid; -final class AnalyticsDomainEventId extends Uuid -{ -} +final class AnalyticsDomainEventId extends Uuid {} diff --git a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventName.php b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventName.php index 36f393995..67294de35 100644 --- a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventName.php +++ b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventName.php @@ -6,6 +6,4 @@ use CodelyTv\Shared\Domain\ValueObject\StringValueObject; -final class AnalyticsDomainEventName extends StringValueObject -{ -} +final class AnalyticsDomainEventName extends StringValueObject {} diff --git a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php index 05d917398..320a2ae48 100644 --- a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php +++ b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php @@ -8,9 +8,7 @@ final readonly class AuthenticateUserCommand implements Command { - public function __construct(private string $username, private string $password) - { - } + public function __construct(private string $username, private string $password) {} public function username(): string { diff --git a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php index 8244e15ee..9d4d53c7b 100644 --- a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php +++ b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php @@ -10,9 +10,7 @@ final readonly class AuthenticateUserCommandHandler implements CommandHandler { - public function __construct(private UserAuthenticator $authenticator) - { - } + public function __construct(private UserAuthenticator $authenticator) {} public function __invoke(AuthenticateUserCommand $command): void { diff --git a/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php b/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php index ed5291d5b..2a6e438fb 100644 --- a/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php +++ b/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php @@ -13,9 +13,7 @@ final readonly class UserAuthenticator { - public function __construct(private AuthRepository $repository) - { - } + public function __construct(private AuthRepository $repository) {} public function authenticate(AuthUsername $username, AuthPassword $password): void { @@ -27,7 +25,7 @@ public function authenticate(AuthUsername $username, AuthPassword $password): vo private function ensureUserExist(?AuthUser $auth, AuthUsername $username): void { - if (null === $auth) { + if ($auth === null) { throw new InvalidAuthUsername($username); } } diff --git a/src/Backoffice/Auth/Domain/AuthPassword.php b/src/Backoffice/Auth/Domain/AuthPassword.php index 9953d265f..9437c09f8 100644 --- a/src/Backoffice/Auth/Domain/AuthPassword.php +++ b/src/Backoffice/Auth/Domain/AuthPassword.php @@ -8,7 +8,7 @@ final class AuthPassword extends StringValueObject { - public function isEquals(AuthPassword $other): bool + public function isEquals(self $other): bool { return $this->value() === $other->value(); } diff --git a/src/Backoffice/Auth/Domain/AuthUser.php b/src/Backoffice/Auth/Domain/AuthUser.php index 1599ab64e..99b0e97e8 100644 --- a/src/Backoffice/Auth/Domain/AuthUser.php +++ b/src/Backoffice/Auth/Domain/AuthUser.php @@ -6,9 +6,7 @@ final readonly class AuthUser { - public function __construct(private AuthUsername $username, private AuthPassword $password) - { - } + public function __construct(private AuthUsername $username, private AuthPassword $password) {} public function passwordMatches(AuthPassword $password): bool { diff --git a/src/Backoffice/Auth/Domain/AuthUsername.php b/src/Backoffice/Auth/Domain/AuthUsername.php index 2841fa3a4..bc1f5b884 100644 --- a/src/Backoffice/Auth/Domain/AuthUsername.php +++ b/src/Backoffice/Auth/Domain/AuthUsername.php @@ -6,6 +6,4 @@ use CodelyTv\Shared\Domain\ValueObject\StringValueObject; -final class AuthUsername extends StringValueObject -{ -} +final class AuthUsername extends StringValueObject {} diff --git a/src/Backoffice/Auth/Infrastructure/Persistence/InMemoryAuthRepository.php b/src/Backoffice/Auth/Infrastructure/Persistence/InMemoryAuthRepository.php index c40aabb1f..eed7b9bd0 100644 --- a/src/Backoffice/Auth/Infrastructure/Persistence/InMemoryAuthRepository.php +++ b/src/Backoffice/Auth/Infrastructure/Persistence/InMemoryAuthRepository.php @@ -22,6 +22,6 @@ public function search(AuthUsername $username): ?AuthUser { $password = get($username->value(), self::USERS); - return null !== $password ? new AuthUser($username, new AuthPassword($password)) : null; + return $password !== null ? new AuthUser($username, new AuthPassword($password)) : null; } } diff --git a/src/Backoffice/Courses/Application/BackofficeCourseResponse.php b/src/Backoffice/Courses/Application/BackofficeCourseResponse.php index 4cdbc27e2..1b684f4af 100644 --- a/src/Backoffice/Courses/Application/BackofficeCourseResponse.php +++ b/src/Backoffice/Courses/Application/BackofficeCourseResponse.php @@ -6,9 +6,7 @@ final readonly class BackofficeCourseResponse { - public function __construct(private string $id, private string $name, private string $duration) - { - } + public function __construct(private string $id, private string $name, private string $duration) {} public function id(): string { diff --git a/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php b/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php index 73b6f37fc..aaf185801 100644 --- a/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php +++ b/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php @@ -9,9 +9,7 @@ final readonly class BackofficeCourseCreator { - public function __construct(private BackofficeCourseRepository $repository) - { - } + public function __construct(private BackofficeCourseRepository $repository) {} public function create(string $id, string $name, string $duration): void { diff --git a/src/Backoffice/Courses/Application/Create/CreateBackofficeCourseOnCourseCreated.php b/src/Backoffice/Courses/Application/Create/CreateBackofficeCourseOnCourseCreated.php index ae37cd7db..7b67f9575 100644 --- a/src/Backoffice/Courses/Application/Create/CreateBackofficeCourseOnCourseCreated.php +++ b/src/Backoffice/Courses/Application/Create/CreateBackofficeCourseOnCourseCreated.php @@ -9,9 +9,7 @@ final readonly class CreateBackofficeCourseOnCourseCreated implements DomainEventSubscriber { - public function __construct(private BackofficeCourseCreator $creator) - { - } + public function __construct(private BackofficeCourseCreator $creator) {} public static function subscribedTo(): array { diff --git a/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php b/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php index 77990a16f..f602c4a69 100644 --- a/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php +++ b/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php @@ -13,9 +13,7 @@ final readonly class AllBackofficeCoursesSearcher { - public function __construct(private BackofficeCourseRepository $repository) - { - } + public function __construct(private BackofficeCourseRepository $repository) {} public function searchAll(): BackofficeCoursesResponse { diff --git a/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQuery.php b/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQuery.php index 1d537951b..41df25386 100644 --- a/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQuery.php +++ b/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQuery.php @@ -6,6 +6,4 @@ use CodelyTv\Shared\Domain\Bus\Query\Query; -final class SearchAllBackofficeCoursesQuery implements Query -{ -} +final class SearchAllBackofficeCoursesQuery implements Query {} diff --git a/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQueryHandler.php b/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQueryHandler.php index d76086033..7688fc8c3 100644 --- a/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQueryHandler.php +++ b/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQueryHandler.php @@ -9,9 +9,7 @@ final readonly class SearchAllBackofficeCoursesQueryHandler implements QueryHandler { - public function __construct(private AllBackofficeCoursesSearcher $searcher) - { - } + public function __construct(private AllBackofficeCoursesSearcher $searcher) {} public function __invoke(SearchAllBackofficeCoursesQuery $query): BackofficeCoursesResponse { diff --git a/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php b/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php index 22894e646..70f32ebf6 100644 --- a/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php +++ b/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php @@ -16,9 +16,7 @@ final readonly class BackofficeCoursesByCriteriaSearcher { - public function __construct(private BackofficeCourseRepository $repository) - { - } + public function __construct(private BackofficeCourseRepository $repository) {} public function search(Filters $filters, Order $order, ?int $limit, ?int $offset): BackofficeCoursesResponse { diff --git a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQuery.php b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQuery.php index 10772edd5..87eb2a648 100644 --- a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQuery.php +++ b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQuery.php @@ -14,8 +14,7 @@ public function __construct( private ?string $order, private ?int $limit, private ?int $offset - ) { - } + ) {} public function filters(): array { diff --git a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php index 2ceb62d9a..4228431c0 100644 --- a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php +++ b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php @@ -11,14 +11,12 @@ final readonly class SearchBackofficeCoursesByCriteriaQueryHandler implements QueryHandler { - public function __construct(private BackofficeCoursesByCriteriaSearcher $searcher) - { - } + public function __construct(private BackofficeCoursesByCriteriaSearcher $searcher) {} public function __invoke(SearchBackofficeCoursesByCriteriaQuery $query): BackofficeCoursesResponse { $filters = Filters::fromValues($query->filters()); - $order = Order::fromValues($query->orderBy(), $query->order()); + $order = Order::fromValues($query->orderBy(), $query->order()); return $this->searcher->search($filters, $order, $query->limit(), $query->offset()); } diff --git a/src/Backoffice/Courses/Domain/BackofficeCourse.php b/src/Backoffice/Courses/Domain/BackofficeCourse.php index 96636c2d0..8bffd93a8 100644 --- a/src/Backoffice/Courses/Domain/BackofficeCourse.php +++ b/src/Backoffice/Courses/Domain/BackofficeCourse.php @@ -8,11 +8,9 @@ final class BackofficeCourse extends AggregateRoot { - public function __construct(private readonly string $id, private readonly string $name, private readonly string $duration) - { - } + public function __construct(private readonly string $id, private readonly string $name, private readonly string $duration) {} - public static function fromPrimitives(array $primitives): BackofficeCourse + public static function fromPrimitives(array $primitives): self { return new self($primitives['id'], $primitives['name'], $primitives['duration']); } @@ -20,8 +18,8 @@ public static function fromPrimitives(array $primitives): BackofficeCourse public function toPrimitives(): array { return [ - 'id' => $this->id, - 'name' => $this->name, + 'id' => $this->id, + 'name' => $this->name, 'duration' => $this->duration, ]; } diff --git a/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php b/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php index 1e9333096..4f892381d 100644 --- a/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php +++ b/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php @@ -12,12 +12,10 @@ final class InMemoryCacheBackofficeCourseRepository implements BackofficeCourseRepository { - private static array $allCoursesCache = []; - private static array $matchingCache = []; + private static array $allCoursesCache = []; + private static array $matchingCache = []; - public function __construct(private readonly BackofficeCourseRepository $repository) - { - } + public function __construct(private readonly BackofficeCourseRepository $repository) {} public function save(BackofficeCourse $course): void { diff --git a/src/Mooc/Courses/Application/Create/CourseCreator.php b/src/Mooc/Courses/Application/Create/CourseCreator.php index ab03911f6..8147a6002 100644 --- a/src/Mooc/Courses/Application/Create/CourseCreator.php +++ b/src/Mooc/Courses/Application/Create/CourseCreator.php @@ -13,9 +13,7 @@ final readonly class CourseCreator { - public function __construct(private CourseRepository $repository, private EventBus $bus) - { - } + public function __construct(private CourseRepository $repository, private EventBus $bus) {} public function __invoke(CourseId $id, CourseName $name, CourseDuration $duration): void { diff --git a/src/Mooc/Courses/Application/Create/CreateCourseCommand.php b/src/Mooc/Courses/Application/Create/CreateCourseCommand.php index 4a25411e9..239223fe8 100644 --- a/src/Mooc/Courses/Application/Create/CreateCourseCommand.php +++ b/src/Mooc/Courses/Application/Create/CreateCourseCommand.php @@ -8,9 +8,7 @@ final readonly class CreateCourseCommand implements Command { - public function __construct(private string $id, private string $name, private string $duration) - { - } + public function __construct(private string $id, private string $name, private string $duration) {} public function id(): string { diff --git a/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php b/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php index 75560f9cb..f251c1e1a 100644 --- a/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php +++ b/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php @@ -11,14 +11,12 @@ final readonly class CreateCourseCommandHandler implements CommandHandler { - public function __construct(private CourseCreator $creator) - { - } + public function __construct(private CourseCreator $creator) {} public function __invoke(CreateCourseCommand $command): void { - $id = new CourseId($command->id()); - $name = new CourseName($command->name()); + $id = new CourseId($command->id()); + $name = new CourseName($command->name()); $duration = new CourseDuration($command->duration()); $this->creator->__invoke($id, $name, $duration); diff --git a/src/Mooc/Courses/Application/Find/CourseFinder.php b/src/Mooc/Courses/Application/Find/CourseFinder.php index ab49e64b2..c59f5e62b 100644 --- a/src/Mooc/Courses/Application/Find/CourseFinder.php +++ b/src/Mooc/Courses/Application/Find/CourseFinder.php @@ -11,15 +11,13 @@ final readonly class CourseFinder { - public function __construct(private CourseRepository $repository) - { - } + public function __construct(private CourseRepository $repository) {} public function __invoke(CourseId $id): Course { $course = $this->repository->search($id); - if (null === $course) { + if ($course === null) { throw new CourseNotExist($id); } diff --git a/src/Mooc/Courses/Application/Update/CourseRenamer.php b/src/Mooc/Courses/Application/Update/CourseRenamer.php index 7beff5deb..ba96d9970 100644 --- a/src/Mooc/Courses/Application/Update/CourseRenamer.php +++ b/src/Mooc/Courses/Application/Update/CourseRenamer.php @@ -12,7 +12,7 @@ final readonly class CourseRenamer { - private CourseFinder $finder; + private CourseFinder $finder; public function __construct(private CourseRepository $repository, private EventBus $bus) { diff --git a/src/Mooc/Courses/Domain/Course.php b/src/Mooc/Courses/Domain/Course.php index f41041490..cdd5484c1 100644 --- a/src/Mooc/Courses/Domain/Course.php +++ b/src/Mooc/Courses/Domain/Course.php @@ -9,9 +9,7 @@ final class Course extends AggregateRoot { - public function __construct(private readonly CourseId $id, private CourseName $name, private readonly CourseDuration $duration) - { - } + public function __construct(private readonly CourseId $id, private CourseName $name, private readonly CourseDuration $duration) {} public static function create(CourseId $id, CourseName $name, CourseDuration $duration): self { diff --git a/src/Mooc/Courses/Domain/CourseCreatedDomainEvent.php b/src/Mooc/Courses/Domain/CourseCreatedDomainEvent.php index 41a68e6ec..4d6525403 100644 --- a/src/Mooc/Courses/Domain/CourseCreatedDomainEvent.php +++ b/src/Mooc/Courses/Domain/CourseCreatedDomainEvent.php @@ -35,7 +35,7 @@ public static function fromPrimitives( public function toPrimitives(): array { return [ - 'name' => $this->name, + 'name' => $this->name, 'duration' => $this->duration, ]; } diff --git a/src/Mooc/Courses/Domain/CourseDuration.php b/src/Mooc/Courses/Domain/CourseDuration.php index 3de808b53..71a56484b 100644 --- a/src/Mooc/Courses/Domain/CourseDuration.php +++ b/src/Mooc/Courses/Domain/CourseDuration.php @@ -6,6 +6,4 @@ use CodelyTv\Shared\Domain\ValueObject\StringValueObject; -final class CourseDuration extends StringValueObject -{ -} +final class CourseDuration extends StringValueObject {} diff --git a/src/Mooc/Courses/Domain/CourseName.php b/src/Mooc/Courses/Domain/CourseName.php index 52855e4b2..2235c0996 100644 --- a/src/Mooc/Courses/Domain/CourseName.php +++ b/src/Mooc/Courses/Domain/CourseName.php @@ -6,6 +6,4 @@ use CodelyTv\Shared\Domain\ValueObject\StringValueObject; -final class CourseName extends StringValueObject -{ -} +final class CourseName extends StringValueObject {} diff --git a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php index 1121c2123..d82d01a2c 100644 --- a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php +++ b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php @@ -9,15 +9,13 @@ final readonly class CoursesCounterFinder { - public function __construct(private CoursesCounterRepository $repository) - { - } + public function __construct(private CoursesCounterRepository $repository) {} public function __invoke(): CoursesCounterResponse { $counter = $this->repository->search(); - if (null === $counter) { + if ($counter === null) { throw new CoursesCounterNotExist(); } diff --git a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php index 5ecba9378..b7ddf5618 100644 --- a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php +++ b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php @@ -8,9 +8,7 @@ final readonly class CoursesCounterResponse implements Response { - public function __construct(private int $total) - { - } + public function __construct(private int $total) {} public function total(): int { diff --git a/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQuery.php b/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQuery.php index a13b1e9ea..4be728c05 100644 --- a/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQuery.php +++ b/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQuery.php @@ -6,6 +6,4 @@ use CodelyTv\Shared\Domain\Bus\Query\Query; -final class FindCoursesCounterQuery implements Query -{ -} +final class FindCoursesCounterQuery implements Query {} diff --git a/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php b/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php index e9a919188..d4952b13e 100644 --- a/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php +++ b/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php @@ -8,9 +8,7 @@ final readonly class FindCoursesCounterQueryHandler implements QueryHandler { - public function __construct(private CoursesCounterFinder $finder) - { - } + public function __construct(private CoursesCounterFinder $finder) {} public function __invoke(FindCoursesCounterQuery $query): CoursesCounterResponse { diff --git a/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php b/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php index e5fe2e035..9a2fe67bc 100644 --- a/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php +++ b/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php @@ -17,8 +17,7 @@ public function __construct( private CoursesCounterRepository $repository, private UuidGenerator $uuidGenerator, private EventBus $bus - ) { - } + ) {} public function __invoke(CourseId $courseId): void { diff --git a/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php b/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php index dc3d6c39c..8925dc255 100644 --- a/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php +++ b/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php @@ -12,9 +12,7 @@ final readonly class IncrementCoursesCounterOnCourseCreated implements DomainEventSubscriber { - public function __construct(private CoursesCounterIncrementer $incrementer) - { - } + public function __construct(private CoursesCounterIncrementer $incrementer) {} public static function subscribedTo(): array { diff --git a/src/Mooc/CoursesCounter/Domain/CoursesCounter.php b/src/Mooc/CoursesCounter/Domain/CoursesCounter.php index fef3ca6d0..c4fbaf355 100644 --- a/src/Mooc/CoursesCounter/Domain/CoursesCounter.php +++ b/src/Mooc/CoursesCounter/Domain/CoursesCounter.php @@ -43,7 +43,7 @@ public function existingCourses(): array public function increment(CourseId $courseId): void { - $this->total = $this->total->increment(); + $this->total = $this->total->increment(); $this->existingCourses[] = $courseId; $this->record(new CoursesCounterIncrementedDomainEvent($this->id()->value(), $this->total()->value())); @@ -53,7 +53,7 @@ public function hasIncremented(CourseId $courseId): bool { $existingCourse = search($this->courseIdComparator($courseId), $this->existingCourses()); - return null !== $existingCourse; + return $existingCourse !== null; } private function courseIdComparator(CourseId $courseId): callable diff --git a/src/Mooc/CoursesCounter/Domain/CoursesCounterId.php b/src/Mooc/CoursesCounter/Domain/CoursesCounterId.php index 9142b2594..16d0461e9 100644 --- a/src/Mooc/CoursesCounter/Domain/CoursesCounterId.php +++ b/src/Mooc/CoursesCounter/Domain/CoursesCounterId.php @@ -6,6 +6,4 @@ use CodelyTv\Shared\Domain\ValueObject\Uuid; -final class CoursesCounterId extends Uuid -{ -} +final class CoursesCounterId extends Uuid {} diff --git a/src/Mooc/Shared/Domain/Courses/CourseId.php b/src/Mooc/Shared/Domain/Courses/CourseId.php index ed2c5a753..ff6b551a8 100644 --- a/src/Mooc/Shared/Domain/Courses/CourseId.php +++ b/src/Mooc/Shared/Domain/Courses/CourseId.php @@ -6,6 +6,4 @@ use CodelyTv\Shared\Domain\ValueObject\Uuid; -final class CourseId extends Uuid -{ -} +final class CourseId extends Uuid {} diff --git a/src/Mooc/Shared/Domain/Videos/VideoUrl.php b/src/Mooc/Shared/Domain/Videos/VideoUrl.php index 3bc0448ea..9eae75f37 100644 --- a/src/Mooc/Shared/Domain/Videos/VideoUrl.php +++ b/src/Mooc/Shared/Domain/Videos/VideoUrl.php @@ -18,7 +18,7 @@ public function __construct(string $value) private function ensureIsValidUrl(string $url): void { - if (false === filter_var($url, FILTER_VALIDATE_URL)) { + if (filter_var($url, FILTER_VALIDATE_URL) === false) { throw new InvalidArgumentException(sprintf('The url <%s> is not well formatted', $url)); } } diff --git a/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php b/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php index d69612db5..1be475ed2 100644 --- a/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php +++ b/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php @@ -17,7 +17,7 @@ final class DbalTypesSearcher public static function inPath(string $path, string $contextName): array { $possibleDbalDirectories = self::possibleDbalPaths($path); - $dbalDirectories = filter(self::isExistingDbalPath(), $possibleDbalDirectories); + $dbalDirectories = filter(self::isExistingDbalPath(), $possibleDbalDirectories); return reduce(self::dbalClassesSearcher($contextName), $dbalDirectories, []); } @@ -51,14 +51,11 @@ private static function dbalClassesSearcher(string $contextName): callable { return static function (array $totalNamespaces, string $path) use ($contextName) { $possibleFiles = scandir($path); - $files = filter( - static fn ($file) => Utils::endsWith('Type.php', $file), - $possibleFiles - ); + $files = filter(static fn ($file) => Utils::endsWith('Type.php', $file), $possibleFiles); $namespaces = map( static function (string $file) use ($path, $contextName) { - $fullPath = "$path/$file"; + $fullPath = "$path/$file"; $splittedPath = explode("/src/$contextName/", $fullPath); $classWithoutPrefix = str_replace(['.php', '/'], ['', '\\'], $splittedPath[1]); diff --git a/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php b/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php index d2e28a092..cacc676ed 100644 --- a/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php +++ b/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php @@ -15,7 +15,7 @@ final class DoctrinePrefixesSearcher public static function inPath(string $path, string $baseNamespace): array { $possibleMappingDirectories = self::possibleMappingPaths($path); - $mappingDirectories = filter(self::isExistingMappingPath(), $possibleMappingDirectories); + $mappingDirectories = filter(self::isExistingMappingPath(), $possibleMappingDirectories); return array_flip(reindex(self::namespaceFormatter($baseNamespace), $mappingDirectories)); } diff --git a/src/Mooc/Shared/Infrastructure/Doctrine/MoocEntityManagerFactory.php b/src/Mooc/Shared/Infrastructure/Doctrine/MoocEntityManagerFactory.php index 4153955e0..5c31fca56 100644 --- a/src/Mooc/Shared/Infrastructure/Doctrine/MoocEntityManagerFactory.php +++ b/src/Mooc/Shared/Infrastructure/Doctrine/MoocEntityManagerFactory.php @@ -13,7 +13,7 @@ final class MoocEntityManagerFactory public static function create(array $parameters, string $environment): EntityManagerInterface { - $isDevMode = 'prod' !== $environment; + $isDevMode = $environment !== 'prod'; $prefixes = array_merge( DoctrinePrefixesSearcher::inPath(__DIR__ . '/../../../../Mooc', 'CodelyTv\Mooc'), diff --git a/src/Mooc/Videos/Application/Create/CreateVideoCommand.php b/src/Mooc/Videos/Application/Create/CreateVideoCommand.php index b6c1ae53a..d2104597b 100644 --- a/src/Mooc/Videos/Application/Create/CreateVideoCommand.php +++ b/src/Mooc/Videos/Application/Create/CreateVideoCommand.php @@ -14,8 +14,7 @@ public function __construct( private string $title, private string $url, private string $courseId - ) { - } + ) {} public function id(): string { diff --git a/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php b/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php index 6b2ee2d6b..6cabf783b 100644 --- a/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php +++ b/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php @@ -13,16 +13,14 @@ final readonly class CreateVideoCommandHandler implements CommandHandler { - public function __construct(private VideoCreator $creator) - { - } + public function __construct(private VideoCreator $creator) {} public function __invoke(CreateVideoCommand $command): void { - $id = new VideoId($command->id()); - $type = new VideoType($command->type()); - $title = new VideoTitle($command->title()); - $url = new VideoUrl($command->url()); + $id = new VideoId($command->id()); + $type = new VideoType($command->type()); + $title = new VideoTitle($command->title()); + $url = new VideoUrl($command->url()); $courseId = new CourseId($command->courseId()); $this->creator->create($id, $type, $title, $url, $courseId); diff --git a/src/Mooc/Videos/Application/Create/VideoCreator.php b/src/Mooc/Videos/Application/Create/VideoCreator.php index 35920496f..f2054a6ae 100644 --- a/src/Mooc/Videos/Application/Create/VideoCreator.php +++ b/src/Mooc/Videos/Application/Create/VideoCreator.php @@ -15,9 +15,7 @@ final readonly class VideoCreator { - public function __construct(private VideoRepository $repository, private EventBus $bus) - { - } + public function __construct(private VideoRepository $repository, private EventBus $bus) {} public function create(VideoId $id, VideoType $type, VideoTitle $title, VideoUrl $url, CourseId $courseId): void { diff --git a/src/Mooc/Videos/Application/Find/FindVideoQuery.php b/src/Mooc/Videos/Application/Find/FindVideoQuery.php index f8f3902ab..1f3a652be 100644 --- a/src/Mooc/Videos/Application/Find/FindVideoQuery.php +++ b/src/Mooc/Videos/Application/Find/FindVideoQuery.php @@ -8,9 +8,7 @@ final readonly class FindVideoQuery implements Query { - public function __construct(private string $id) - { - } + public function __construct(private string $id) {} public function id(): string { diff --git a/src/Mooc/Videos/Application/Find/VideoResponse.php b/src/Mooc/Videos/Application/Find/VideoResponse.php index 008af9702..e261a18d0 100644 --- a/src/Mooc/Videos/Application/Find/VideoResponse.php +++ b/src/Mooc/Videos/Application/Find/VideoResponse.php @@ -14,6 +14,5 @@ public function __construct( private string $title, private string $url, private string $courseId - ) { - } + ) {} } diff --git a/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php b/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php index 11c51b7c4..f2dcea30b 100644 --- a/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php +++ b/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php @@ -8,9 +8,7 @@ final readonly class TrimVideoCommand implements Command { - public function __construct(private string $videoId, private int $keepFromSecond, private int $keepToSecond) - { - } + public function __construct(private string $videoId, private int $keepFromSecond, private int $keepToSecond) {} public function videoId(): string { diff --git a/src/Mooc/Videos/Application/Trim/TrimVideoCommandHandler.php b/src/Mooc/Videos/Application/Trim/TrimVideoCommandHandler.php index 9511e2a51..e51a39cc4 100644 --- a/src/Mooc/Videos/Application/Trim/TrimVideoCommandHandler.php +++ b/src/Mooc/Videos/Application/Trim/TrimVideoCommandHandler.php @@ -9,13 +9,11 @@ final readonly class TrimVideoCommandHandler { - public function __construct(private VideoTrimmer $trimmer) - { - } + public function __construct(private VideoTrimmer $trimmer) {} public function __invoke(TrimVideoCommand $command): void { - $id = new VideoId($command->videoId()); + $id = new VideoId($command->videoId()); $interval = SecondsInterval::fromValues($command->keepFromSecond(), $command->keepToSecond()); $this->trimmer->trim($id, $interval); diff --git a/src/Mooc/Videos/Application/Trim/VideoTrimmer.php b/src/Mooc/Videos/Application/Trim/VideoTrimmer.php index d1415e4a9..1f7fc8dd5 100644 --- a/src/Mooc/Videos/Application/Trim/VideoTrimmer.php +++ b/src/Mooc/Videos/Application/Trim/VideoTrimmer.php @@ -9,7 +9,5 @@ final class VideoTrimmer { - public function trim(VideoId $id, SecondsInterval $interval): void - { - } + public function trim(VideoId $id, SecondsInterval $interval): void {} } diff --git a/src/Mooc/Videos/Domain/Video.php b/src/Mooc/Videos/Domain/Video.php index 6028dc104..a8626df49 100644 --- a/src/Mooc/Videos/Domain/Video.php +++ b/src/Mooc/Videos/Domain/Video.php @@ -16,8 +16,7 @@ public function __construct( private VideoTitle $title, private readonly VideoUrl $url, private readonly CourseId $courseId - ) { - } + ) {} public static function create( VideoId $id, @@ -25,7 +24,7 @@ public static function create( VideoTitle $title, VideoUrl $url, CourseId $courseId - ): Video { + ): self { $video = new self($id, $type, $title, $url, $courseId); $video->record( diff --git a/src/Mooc/Videos/Domain/VideoCreatedDomainEvent.php b/src/Mooc/Videos/Domain/VideoCreatedDomainEvent.php index e820ac970..829ee3884 100644 --- a/src/Mooc/Videos/Domain/VideoCreatedDomainEvent.php +++ b/src/Mooc/Videos/Domain/VideoCreatedDomainEvent.php @@ -30,7 +30,7 @@ public static function fromPrimitives( array $body, string $eventId, string $occurredOn - ): VideoCreatedDomainEvent { + ): self { return new self( $aggregateId, $body['type'], @@ -45,9 +45,9 @@ public static function fromPrimitives( public function toPrimitives(): array { return [ - 'type' => $this->type, - 'title' => $this->title, - 'url' => $this->url, + 'type' => $this->type, + 'title' => $this->title, + 'url' => $this->url, 'course_id' => $this->courseId, ]; } diff --git a/src/Mooc/Videos/Domain/VideoFinder.php b/src/Mooc/Videos/Domain/VideoFinder.php index 79494d770..19109faf4 100644 --- a/src/Mooc/Videos/Domain/VideoFinder.php +++ b/src/Mooc/Videos/Domain/VideoFinder.php @@ -6,15 +6,13 @@ final readonly class VideoFinder { - public function __construct(private VideoRepository $repository) - { - } + public function __construct(private VideoRepository $repository) {} public function __invoke(VideoId $id): Video { $video = $this->repository->search($id); - if (null === $video) { + if ($video === null) { throw new VideoNotFound($id); } diff --git a/src/Mooc/Videos/Domain/VideoId.php b/src/Mooc/Videos/Domain/VideoId.php index 2c8a3d177..4396d6b85 100644 --- a/src/Mooc/Videos/Domain/VideoId.php +++ b/src/Mooc/Videos/Domain/VideoId.php @@ -6,6 +6,4 @@ use CodelyTv\Shared\Domain\ValueObject\Uuid; -final class VideoId extends Uuid -{ -} +final class VideoId extends Uuid {} diff --git a/src/Mooc/Videos/Domain/VideoTitle.php b/src/Mooc/Videos/Domain/VideoTitle.php index 32e53aa88..d792cf453 100644 --- a/src/Mooc/Videos/Domain/VideoTitle.php +++ b/src/Mooc/Videos/Domain/VideoTitle.php @@ -6,6 +6,4 @@ use CodelyTv\Shared\Domain\ValueObject\StringValueObject; -final class VideoTitle extends StringValueObject -{ -} +final class VideoTitle extends StringValueObject {} diff --git a/src/Mooc/Videos/Domain/VideoType.php b/src/Mooc/Videos/Domain/VideoType.php index 439c785b1..3b20ed338 100644 --- a/src/Mooc/Videos/Domain/VideoType.php +++ b/src/Mooc/Videos/Domain/VideoType.php @@ -14,7 +14,7 @@ final class VideoType extends Enum { public const SCREENCAST = 'screencast'; - public const INTERVIEW = 'interview'; + public const INTERVIEW = 'interview'; protected function throwExceptionForInvalidValue($value): never { diff --git a/src/Mooc/Videos/Infrastructure/Persistence/VideoRepositoryMySql.php b/src/Mooc/Videos/Infrastructure/Persistence/VideoRepositoryMySql.php index 933277438..fffa093fe 100644 --- a/src/Mooc/Videos/Infrastructure/Persistence/VideoRepositoryMySql.php +++ b/src/Mooc/Videos/Infrastructure/Persistence/VideoRepositoryMySql.php @@ -15,10 +15,10 @@ final class VideoRepositoryMySql extends DoctrineRepository implements VideoRepository { private static array $criteriaToDoctrineFields = [ - 'id' => 'id', - 'type' => 'type', - 'title' => 'title', - 'url' => 'url', + 'id' => 'id', + 'type' => 'type', + 'title' => 'title', + 'url' => 'url', 'course_id' => 'courseId', ]; @@ -35,7 +35,7 @@ public function search(VideoId $id): ?Video public function searchByCriteria(Criteria $criteria): Videos { $doctrineCriteria = DoctrineCriteriaConverter::convert($criteria, self::$criteriaToDoctrineFields); - $videos = $this->repository(Video::class)->matching($doctrineCriteria)->toArray(); + $videos = $this->repository(Video::class)->matching($doctrineCriteria)->toArray(); return new Videos($videos); } diff --git a/src/Shared/Domain/Aggregate/AggregateRoot.php b/src/Shared/Domain/Aggregate/AggregateRoot.php index 80fa7ddbd..9c2d69d91 100644 --- a/src/Shared/Domain/Aggregate/AggregateRoot.php +++ b/src/Shared/Domain/Aggregate/AggregateRoot.php @@ -12,7 +12,7 @@ abstract class AggregateRoot final public function pullDomainEvents(): array { - $domainEvents = $this->domainEvents; + $domainEvents = $this->domainEvents; $this->domainEvents = []; return $domainEvents; diff --git a/src/Shared/Domain/Bus/Command/Command.php b/src/Shared/Domain/Bus/Command/Command.php index d8343b898..dceac12c7 100644 --- a/src/Shared/Domain/Bus/Command/Command.php +++ b/src/Shared/Domain/Bus/Command/Command.php @@ -4,6 +4,4 @@ namespace CodelyTv\Shared\Domain\Bus\Command; -interface Command -{ -} +interface Command {} diff --git a/src/Shared/Domain/Bus/Command/CommandHandler.php b/src/Shared/Domain/Bus/Command/CommandHandler.php index 2cea0d72d..1168c1df4 100644 --- a/src/Shared/Domain/Bus/Command/CommandHandler.php +++ b/src/Shared/Domain/Bus/Command/CommandHandler.php @@ -4,6 +4,4 @@ namespace CodelyTv\Shared\Domain\Bus\Command; -interface CommandHandler -{ -} +interface CommandHandler {} diff --git a/src/Shared/Domain/Bus/Event/DomainEvent.php b/src/Shared/Domain/Bus/Event/DomainEvent.php index 0bca368d4..9ea835826 100644 --- a/src/Shared/Domain/Bus/Event/DomainEvent.php +++ b/src/Shared/Domain/Bus/Event/DomainEvent.php @@ -5,7 +5,7 @@ namespace CodelyTv\Shared\Domain\Bus\Event; use CodelyTv\Shared\Domain\Utils; -use CodelyTv\Shared\Domain\ValueObject\Uuid; +use CodelyTv\Shared\Domain\ValueObject\SimpleUuid; use DateTimeImmutable; abstract class DomainEvent @@ -15,7 +15,7 @@ abstract class DomainEvent public function __construct(private readonly string $aggregateId, string $eventId = null, string $occurredOn = null) { - $this->eventId = $eventId ?: Uuid::random()->value(); + $this->eventId = $eventId ?: SimpleUuid::random()->value(); $this->occurredOn = $occurredOn ?: Utils::dateToString(new DateTimeImmutable()); } @@ -30,17 +30,17 @@ abstract public static function eventName(): string; abstract public function toPrimitives(): array; - public function aggregateId(): string + final public function aggregateId(): string { return $this->aggregateId; } - public function eventId(): string + final public function eventId(): string { return $this->eventId; } - public function occurredOn(): string + final public function occurredOn(): string { return $this->occurredOn; } diff --git a/src/Shared/Domain/Bus/Query/Query.php b/src/Shared/Domain/Bus/Query/Query.php index 319bac80b..3ed4d1467 100644 --- a/src/Shared/Domain/Bus/Query/Query.php +++ b/src/Shared/Domain/Bus/Query/Query.php @@ -4,6 +4,4 @@ namespace CodelyTv\Shared\Domain\Bus\Query; -interface Query -{ -} +interface Query {} diff --git a/src/Shared/Domain/Bus/Query/QueryHandler.php b/src/Shared/Domain/Bus/Query/QueryHandler.php index dc4a36392..f849e7210 100644 --- a/src/Shared/Domain/Bus/Query/QueryHandler.php +++ b/src/Shared/Domain/Bus/Query/QueryHandler.php @@ -4,6 +4,4 @@ namespace CodelyTv\Shared\Domain\Bus\Query; -interface QueryHandler -{ -} +interface QueryHandler {} diff --git a/src/Shared/Domain/Bus/Query/Response.php b/src/Shared/Domain/Bus/Query/Response.php index 3bf921ee0..dd8be87cb 100644 --- a/src/Shared/Domain/Bus/Query/Response.php +++ b/src/Shared/Domain/Bus/Query/Response.php @@ -4,6 +4,4 @@ namespace CodelyTv\Shared\Domain\Bus\Query; -interface Response -{ -} +interface Response {} diff --git a/src/Shared/Domain/Collection.php b/src/Shared/Domain/Collection.php index 6c60749a9..a184dd3cb 100644 --- a/src/Shared/Domain/Collection.php +++ b/src/Shared/Domain/Collection.php @@ -19,12 +19,12 @@ public function __construct(private readonly array $items) abstract protected function type(): string; - public function getIterator(): Traversable + final public function getIterator(): Traversable { return new ArrayIterator($this->items()); } - public function count(): int + final public function count(): int { return count($this->items()); } diff --git a/src/Shared/Domain/Criteria/Criteria.php b/src/Shared/Domain/Criteria/Criteria.php index 3496f3fd1..690b78cff 100644 --- a/src/Shared/Domain/Criteria/Criteria.php +++ b/src/Shared/Domain/Criteria/Criteria.php @@ -11,8 +11,7 @@ public function __construct( private Order $order, private ?int $offset, private ?int $limit - ) { - } + ) {} public function hasFilters(): bool { diff --git a/src/Shared/Domain/Criteria/Filter.php b/src/Shared/Domain/Criteria/Filter.php index cd7c95423..48c61445a 100644 --- a/src/Shared/Domain/Criteria/Filter.php +++ b/src/Shared/Domain/Criteria/Filter.php @@ -10,8 +10,7 @@ public function __construct( private FilterField $field, private FilterOperator $operator, private FilterValue $value - ) { - } + ) {} public static function fromValues(array $values): self { diff --git a/src/Shared/Domain/Criteria/FilterField.php b/src/Shared/Domain/Criteria/FilterField.php index 7c952bbb5..fcc11e2de 100644 --- a/src/Shared/Domain/Criteria/FilterField.php +++ b/src/Shared/Domain/Criteria/FilterField.php @@ -6,6 +6,4 @@ use CodelyTv\Shared\Domain\ValueObject\StringValueObject; -final class FilterField extends StringValueObject -{ -} +final class FilterField extends StringValueObject {} diff --git a/src/Shared/Domain/Criteria/FilterOperator.php b/src/Shared/Domain/Criteria/FilterOperator.php index 1c9c3b8ff..8a888019a 100644 --- a/src/Shared/Domain/Criteria/FilterOperator.php +++ b/src/Shared/Domain/Criteria/FilterOperator.php @@ -14,11 +14,11 @@ */ final class FilterOperator extends Enum { - public const EQUAL = '='; - public const NOT_EQUAL = '!='; - public const GT = '>'; - public const LT = '<'; - public const CONTAINS = 'CONTAINS'; + public const EQUAL = '='; + public const NOT_EQUAL = '!='; + public const GT = '>'; + public const LT = '<'; + public const CONTAINS = 'CONTAINS'; public const NOT_CONTAINS = 'NOT_CONTAINS'; private static array $containing = [self::CONTAINS, self::NOT_CONTAINS]; diff --git a/src/Shared/Domain/Criteria/FilterValue.php b/src/Shared/Domain/Criteria/FilterValue.php index 08151b09e..5576c10fb 100644 --- a/src/Shared/Domain/Criteria/FilterValue.php +++ b/src/Shared/Domain/Criteria/FilterValue.php @@ -6,6 +6,4 @@ use CodelyTv\Shared\Domain\ValueObject\StringValueObject; -final class FilterValue extends StringValueObject -{ -} +final class FilterValue extends StringValueObject {} diff --git a/src/Shared/Domain/Criteria/Order.php b/src/Shared/Domain/Criteria/Order.php index 388d09370..c86595764 100644 --- a/src/Shared/Domain/Criteria/Order.php +++ b/src/Shared/Domain/Criteria/Order.php @@ -6,23 +6,21 @@ final readonly class Order { - public function __construct(private OrderBy $orderBy, private OrderType $orderType) - { - } + public function __construct(private OrderBy $orderBy, private OrderType $orderType) {} - public static function createDesc(OrderBy $orderBy): Order + public static function createDesc(OrderBy $orderBy): self { return new self($orderBy, OrderType::desc()); } - public static function fromValues(?string $orderBy, ?string $order): Order + public static function fromValues(?string $orderBy, ?string $order): self { - return null === $orderBy ? self::none() : new Order(new OrderBy($orderBy), new OrderType($order)); + return $orderBy === null ? self::none() : new self(new OrderBy($orderBy), new OrderType($order)); } - public static function none(): Order + public static function none(): self { - return new Order(new OrderBy(''), OrderType::none()); + return new self(new OrderBy(''), OrderType::none()); } public function orderBy(): OrderBy diff --git a/src/Shared/Domain/Criteria/OrderBy.php b/src/Shared/Domain/Criteria/OrderBy.php index c6e43e6b9..d2d054cae 100644 --- a/src/Shared/Domain/Criteria/OrderBy.php +++ b/src/Shared/Domain/Criteria/OrderBy.php @@ -6,6 +6,4 @@ use CodelyTv\Shared\Domain\ValueObject\StringValueObject; -final class OrderBy extends StringValueObject -{ -} +final class OrderBy extends StringValueObject {} diff --git a/src/Shared/Domain/Criteria/OrderType.php b/src/Shared/Domain/Criteria/OrderType.php index 2ffc46071..50f2f5213 100644 --- a/src/Shared/Domain/Criteria/OrderType.php +++ b/src/Shared/Domain/Criteria/OrderType.php @@ -14,7 +14,7 @@ */ final class OrderType extends Enum { - public const ASC = 'asc'; + public const ASC = 'asc'; public const DESC = 'desc'; public const NONE = 'none'; diff --git a/src/Shared/Domain/Second.php b/src/Shared/Domain/Second.php index 6ed51277e..6ff9f4bcb 100644 --- a/src/Shared/Domain/Second.php +++ b/src/Shared/Domain/Second.php @@ -6,6 +6,4 @@ use CodelyTv\Shared\Domain\ValueObject\IntValueObject; -final class Second extends IntValueObject -{ -} +final class Second extends IntValueObject {} diff --git a/src/Shared/Domain/SecondsInterval.php b/src/Shared/Domain/SecondsInterval.php index 975097271..1b6546342 100644 --- a/src/Shared/Domain/SecondsInterval.php +++ b/src/Shared/Domain/SecondsInterval.php @@ -13,7 +13,7 @@ public function __construct(private Second $from, private Second $to) $this->ensureIntervalEndsAfterStart($from, $to); } - public static function fromValues(int $from, int $to): SecondsInterval + public static function fromValues(int $from, int $to): self { return new self(new Second($from), new Second($to)); } diff --git a/src/Shared/Domain/Utils.php b/src/Shared/Domain/Utils.php index 01a3e3fa7..bdb8a9ef8 100644 --- a/src/Shared/Domain/Utils.php +++ b/src/Shared/Domain/Utils.php @@ -20,7 +20,7 @@ public static function endsWith(string $needle, string $haystack): bool return true; } - return (substr($haystack, -$length) === $needle); + return substr($haystack, -$length) === $needle; } public static function dateToString(DateTimeInterface $date): string @@ -42,7 +42,7 @@ public static function jsonDecode(string $json): array { $data = json_decode($json, true); - if (JSON_ERROR_NONE !== json_last_error()) { + if (json_last_error() !== JSON_ERROR_NONE) { throw new RuntimeException('Unable to parse response body into JSON: ' . json_last_error()); } @@ -51,7 +51,7 @@ public static function jsonDecode(string $json): array public static function toSnakeCase(string $text): string { - return ctype_lower($text) ? $text : strtolower((string) preg_replace('/([^A-Z\s])([A-Z])/', "$1_$2", $text)); + return ctype_lower($text) ? $text : strtolower((string) preg_replace('/([^A-Z\s])([A-Z])/', '$1_$2', $text)); } public static function toCamelCase(string $text): string @@ -64,7 +64,7 @@ public static function dot(array $array, string $prepend = ''): array $results = []; foreach ($array as $key => $value) { if (is_array($value) && !empty($value)) { - $results = array_merge($results, static::dot($value, $prepend . $key . '.')); + $results = array_merge($results, self::dot($value, $prepend . $key . '.')); } else { $results[$prepend . $key] = $value; } @@ -75,10 +75,7 @@ public static function dot(array $array, string $prepend = ''): array public static function filesIn(string $path, string $fileType): array { - return filter( - static fn (string $possibleModule) => strstr($possibleModule, $fileType), - scandir($path) - ); + return filter(static fn (string $possibleModule) => strstr($possibleModule, $fileType), scandir($path)); } public static function extractClassName(object $object): string diff --git a/src/Shared/Domain/ValueObject/Enum.php b/src/Shared/Domain/ValueObject/Enum.php index e1f9af9ba..76825cecf 100644 --- a/src/Shared/Domain/ValueObject/Enum.php +++ b/src/Shared/Domain/ValueObject/Enum.php @@ -27,29 +27,29 @@ public static function __callStatic(string $name, $args) return new static(self::values()[$name]); } - public static function fromString(string $value): Enum + final public static function fromString(string $value): self { return new static($value); } - public static function values(): array + final public static function values(): array { $class = static::class; if (!isset(self::$cache[$class])) { - $reflected = new ReflectionClass($class); + $reflected = new ReflectionClass($class); self::$cache[$class] = reindex(self::keysFormatter(), $reflected->getConstants()); } return self::$cache[$class]; } - public static function randomValue() + final public static function randomValue() { return self::values()[array_rand(self::values())]; } - public static function random(): static + final public static function random(): static { return new static(self::randomValue()); } @@ -59,14 +59,14 @@ private static function keysFormatter(): callable return static fn ($unused, string $key): string => Utils::toCamelCase(strtolower($key)); } - public function value() + final public function value() { return $this->value; } - public function equals(Enum $other): bool + final public function equals(self $other): bool { - return $other == $this; + return $other->value() === $this->value(); } public function __toString(): string diff --git a/src/Shared/Domain/ValueObject/IntValueObject.php b/src/Shared/Domain/ValueObject/IntValueObject.php index e75774629..60514d776 100644 --- a/src/Shared/Domain/ValueObject/IntValueObject.php +++ b/src/Shared/Domain/ValueObject/IntValueObject.php @@ -6,16 +6,14 @@ abstract class IntValueObject { - public function __construct(protected int $value) - { - } + public function __construct(protected int $value) {} - public function value(): int + final public function value(): int { return $this->value; } - public function isBiggerThan(IntValueObject $other): bool + final public function isBiggerThan(self $other): bool { return $this->value() > $other->value(); } diff --git a/src/Shared/Domain/ValueObject/SimpleUuid.php b/src/Shared/Domain/ValueObject/SimpleUuid.php new file mode 100644 index 000000000..250f41c40 --- /dev/null +++ b/src/Shared/Domain/ValueObject/SimpleUuid.php @@ -0,0 +1,7 @@ +value; } diff --git a/src/Shared/Domain/ValueObject/Uuid.php b/src/Shared/Domain/ValueObject/Uuid.php index 7bf9e9c00..c23061a9b 100644 --- a/src/Shared/Domain/ValueObject/Uuid.php +++ b/src/Shared/Domain/ValueObject/Uuid.php @@ -8,24 +8,24 @@ use Ramsey\Uuid\Uuid as RamseyUuid; use Stringable; -class Uuid implements Stringable +abstract class Uuid implements Stringable { public function __construct(protected string $value) { $this->ensureIsValidUuid($value); } - public static function random(): self + final public static function random(): self { return new static(RamseyUuid::uuid4()->toString()); } - public function value(): string + final public function value(): string { return $this->value; } - public function equals(Uuid $other): bool + final public function equals(self $other): bool { return $this->value() === $other->value(); } @@ -38,7 +38,7 @@ public function __toString(): string private function ensureIsValidUuid(string $id): void { if (!RamseyUuid::isValid($id)) { - throw new InvalidArgumentException(sprintf('<%s> does not allow the value <%s>.', static::class, $id)); + throw new InvalidArgumentException(sprintf('<%s> does not allow the value <%s>.', self::class, $id)); } } } diff --git a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php index f74cb1f79..bac6860bb 100644 --- a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php +++ b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php @@ -26,7 +26,7 @@ public static function forPipedCallables(iterable $callables): array return reduce(self::pipedCallablesReducer(), $callables, []); } - private static function classExtractor(CallableFirstParameterExtractor $parameterExtractor): callable + private static function classExtractor(self $parameterExtractor): callable { return static fn (callable $handler): ?string => $parameterExtractor->extract($handler); } @@ -52,7 +52,7 @@ private static function unflatten(): callable public function extract($class): ?string { $reflector = new ReflectionClass($class); - $method = $reflector->getMethod('__invoke'); + $method = $reflector->getMethod('__invoke'); if ($this->hasOnlyOneParameter($method)) { return $this->firstParameterClassFrom($method); @@ -66,7 +66,7 @@ private function firstParameterClassFrom(ReflectionMethod $method): string /** @var ReflectionNamedType $fistParameterType */ $fistParameterType = $method->getParameters()[0]->getType(); - if (null === $fistParameterType) { + if ($fistParameterType === null) { throw new LogicException('Missing type hint for the first parameter of __invoke'); } diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php b/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php index 7bb31aa46..38217a553 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php @@ -10,17 +10,15 @@ final readonly class DomainEventJsonDeserializer { - public function __construct(private DomainEventMapping $mapping) - { - } + public function __construct(private DomainEventMapping $mapping) {} public function deserialize(string $domainEvent): DomainEvent { - $eventData = Utils::jsonDecode($domainEvent); - $eventName = $eventData['data']['type']; + $eventData = Utils::jsonDecode($domainEvent); + $eventName = $eventData['data']['type']; $eventClass = $this->mapping->for($eventName); - if (null === $eventClass) { + if ($eventClass === null) { throw new RuntimeException("The event <$eventName> doesn't exist or has no subscribers"); } diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventJsonSerializer.php b/src/Shared/Infrastructure/Bus/Event/DomainEventJsonSerializer.php index 011a1ff86..113528e2f 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventJsonSerializer.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventJsonSerializer.php @@ -13,10 +13,10 @@ public static function serialize(DomainEvent $domainEvent): string return json_encode( [ 'data' => [ - 'id' => $domainEvent->eventId(), - 'type' => $domainEvent::eventName(), + 'id' => $domainEvent->eventId(), + 'type' => $domainEvent::eventName(), 'occurred_on' => $domainEvent->occurredOn(), - 'attributes' => array_merge($domainEvent->toPrimitives(), ['id' => $domainEvent->aggregateId()]), + 'attributes' => array_merge($domainEvent->toPrimitives(), ['id' => $domainEvent->aggregateId()]), ], 'meta' => [], ] diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php b/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php index b2d8d8057..481da1326 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php @@ -32,10 +32,7 @@ private function eventsExtractor(): callable { return fn (array $mapping, DomainEventSubscriber $subscriber) => array_merge( $mapping, - reindex( - $this->eventNameExtractor(), - $subscriber::subscribedTo() - ) + reindex($this->eventNameExtractor(), $subscriber::subscribedTo()) ); } diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php b/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php index 381e1f139..be6230573 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php @@ -28,7 +28,7 @@ public function allSubscribedTo(string $eventClass): array return $formatted[$eventClass]; } - public function withRabbitMqQueueNamed(string $queueName): DomainEventSubscriber|callable + public function withRabbitMqQueueNamed(string $queueName): callable|DomainEventSubscriber { $subscriber = search( static fn (DomainEventSubscriber $subscriber) => RabbitMqQueueNameFormatter::format($subscriber) === @@ -36,7 +36,7 @@ public function withRabbitMqQueueNamed(string $queueName): DomainEventSubscriber $this->mapping ); - if (null === $subscriber) { + if ($subscriber === null) { throw new RuntimeException("There are no subscribers for the <$queueName> queue"); } diff --git a/src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php b/src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php index d894ad23a..f7bc03b52 100644 --- a/src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php @@ -21,9 +21,7 @@ public function __construct(iterable $subscribers) $this->bus = new MessageBus( [ new HandleMessageMiddleware( - new HandlersLocator( - CallableFirstParameterExtractor::forPipedCallables($subscribers) - ) + new HandlersLocator(CallableFirstParameterExtractor::forPipedCallables($subscribers)) ), ] ); diff --git a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php index d52951593..43ae38c0f 100644 --- a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php +++ b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php @@ -17,7 +17,7 @@ final readonly class MySqlDoctrineDomainEventsConsumer { - private Connection $connection; + private Connection $connection; public function __construct(EntityManager $entityManager, private DomainEventMapping $eventMapping) { @@ -44,7 +44,7 @@ private function executeSubscribers(callable $subscribers): callable return function (array $rawEvent) use ($subscribers): void { try { $domainEventClass = $this->eventMapping->for($rawEvent['name']); - $domainEvent = $domainEventClass::fromPrimitives( + $domainEvent = $domainEventClass::fromPrimitives( $rawEvent['aggregate_id'], Utils::jsonDecode($rawEvent['body']), $rawEvent['id'], diff --git a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php index 280d0e88f..5127030df 100644 --- a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php @@ -30,11 +30,11 @@ public function publish(DomainEvent ...$events): void private function publisher(): callable { return function (DomainEvent $domainEvent): void { - $id = $this->connection->quote($domainEvent->eventId()); + $id = $this->connection->quote($domainEvent->eventId()); $aggregateId = $this->connection->quote($domainEvent->aggregateId()); - $name = $this->connection->quote($domainEvent::eventName()); - $body = $this->connection->quote(Utils::jsonEncode($domainEvent->toPrimitives())); - $occurredOn = $this->connection->quote( + $name = $this->connection->quote($domainEvent::eventName()); + $body = $this->connection->quote(Utils::jsonEncode($domainEvent->toPrimitives())); + $occurredOn = $this->connection->quote( Utils::stringToDate($domainEvent->occurredOn())->format(self::DATABASE_TIMESTAMP_FORMAT) ); diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConfigurer.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConfigurer.php index a46f22200..03d529f75 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConfigurer.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConfigurer.php @@ -11,13 +11,11 @@ final readonly class RabbitMqConfigurer { - public function __construct(private RabbitMqConnection $connection) - { - } + public function __construct(private RabbitMqConnection $connection) {} public function configure(string $exchangeName, DomainEventSubscriber ...$subscribers): void { - $retryExchangeName = RabbitMqExchangeNameFormatter::retry($exchangeName); + $retryExchangeName = RabbitMqExchangeNameFormatter::retry($exchangeName); $deadLetterExchangeName = RabbitMqExchangeNameFormatter::deadLetter($exchangeName); $this->declareExchange($exchangeName); @@ -54,12 +52,12 @@ private function queueDeclarator( $retryExchangeName, $deadLetterExchangeName ): void { - $queueName = RabbitMqQueueNameFormatter::format($subscriber); - $retryQueueName = RabbitMqQueueNameFormatter::formatRetry($subscriber); + $queueName = RabbitMqQueueNameFormatter::format($subscriber); + $retryQueueName = RabbitMqQueueNameFormatter::formatRetry($subscriber); $deadLetterQueueName = RabbitMqQueueNameFormatter::formatDeadLetter($subscriber); - $queue = $this->declareQueue($queueName); - $retryQueue = $this->declareQueue($retryQueueName, $exchangeName, $queueName, 1000); + $queue = $this->declareQueue($queueName); + $retryQueue = $this->declareQueue($retryQueueName, $exchangeName, $queueName, 1000); $deadLetterQueue = $this->declareQueue($deadLetterQueueName); $queue->bind($exchangeName, $queueName); @@ -80,15 +78,15 @@ private function declareQueue( ): AMQPQueue { $queue = $this->connection->queue($name); - if (null !== $deadLetterExchange) { + if ($deadLetterExchange !== null) { $queue->setArgument('x-dead-letter-exchange', $deadLetterExchange); } - if (null !== $deadLetterRoutingKey) { + if ($deadLetterRoutingKey !== null) { $queue->setArgument('x-dead-letter-routing-key', $deadLetterRoutingKey); } - if (null !== $messageTtl) { + if ($messageTtl !== null) { $queue->setArgument('x-message-ttl', $messageTtl); } diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php index a43fa35d8..5242ce758 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php @@ -12,15 +12,13 @@ final class RabbitMqConnection { private static ?AMQPConnection $connection = null; - private static ?AMQPChannel $channel = null; + private static ?AMQPChannel $channel = null; /** @var AMQPExchange[] */ private static array $exchanges = []; /** @var AMQPQueue[] */ private static array $queues = []; - public function __construct(private readonly array $configuration) - { - } + public function __construct(private readonly array $configuration) {} public function queue(string $name): AMQPQueue { @@ -57,7 +55,7 @@ private function channel(): AMQPChannel private function connection(): AMQPConnection { - if (null === self::$connection) { + if (self::$connection === null) { self::$connection = new AMQPConnection($this->configuration); } diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php index bdd5b09ea..bf12fc093 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php @@ -20,8 +20,7 @@ public function __construct( private DomainEventJsonDeserializer $deserializer, private string $exchangeName, private int $maxRetries - ) { - } + ) {} public function consume(callable $subscriber, string $queueName): void { @@ -82,11 +81,11 @@ private function sendMessageTo(string $exchangeName, AMQPEnvelope $envelope, AMQ $queue->getName(), AMQP_NOPARAM, [ - 'message_id' => $envelope->getMessageId(), - 'content_type' => $envelope->getContentType(), + 'message_id' => $envelope->getMessageId(), + 'content_type' => $envelope->getContentType(), 'content_encoding' => $envelope->getContentEncoding(), - 'priority' => $envelope->getPriority(), - 'headers' => assoc($headers, 'redelivery_count', get('redelivery_count', $headers, 0) + 1), + 'priority' => $envelope->getPriority(), + 'headers' => assoc($headers, 'redelivery_count', get('redelivery_count', $headers, 0) + 1), ] ); } diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php index f9f92da4b..ddd46d98a 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php @@ -18,8 +18,7 @@ public function __construct( private RabbitMqConnection $connection, private string $exchangeName, private MySqlDoctrineEventBus $failoverPublisher - ) { - } + ) {} public function publish(DomainEvent ...$events): void { @@ -39,17 +38,17 @@ private function publisher(): callable private function publishEvent(DomainEvent $event): void { - $body = DomainEventJsonSerializer::serialize($event); + $body = DomainEventJsonSerializer::serialize($event); $routingKey = $event::eventName(); - $messageId = $event->eventId(); + $messageId = $event->eventId(); $this->connection->exchange($this->exchangeName)->publish( $body, $routingKey, AMQP_NOPARAM, [ - 'message_id' => $messageId, - 'content_type' => 'application/json', + 'message_id' => $messageId, + 'content_type' => 'application/json', 'content_encoding' => 'utf-8', ] ); diff --git a/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php b/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php index 68ff4f25e..b404f19cf 100644 --- a/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php @@ -16,8 +16,7 @@ public function __construct( private PrometheusMonitor $monitor, private string $appName, private EventBus $bus - ) { - } + ) {} public function publish(DomainEvent ...$events): void { diff --git a/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php b/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php index 5bc719ff0..7bf97a4f3 100644 --- a/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php +++ b/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php @@ -6,9 +6,9 @@ use CodelyTv\Shared\Infrastructure\Doctrine\Dbal\DbalCustomTypesRegistrar; use Doctrine\DBAL\DriverManager; +use Doctrine\DBAL\Platforms\MariaDBPlatform; use Doctrine\DBAL\Schema\MySQLSchemaManager; use Doctrine\ORM\Configuration; -use Doctrine\DBAL\Platforms\MariaDBPlatform; use Doctrine\ORM\EntityManager; use Doctrine\ORM\Mapping\Driver\SimplifiedXmlDriver; use Doctrine\ORM\ORMSetup; @@ -23,14 +23,14 @@ final class DoctrineEntityManagerFactory ]; public static function create( - array $parameters, - array $contextPrefixes, - bool $isDevMode, + array $parameters, + array $contextPrefixes, + bool $isDevMode, string $schemaFile, - array $dbalCustomTypesClasses + array $dbalCustomTypesClasses ): EntityManager { if ($isDevMode) { - static::generateDatabaseIfNotExists($parameters, $schemaFile); + self::generateDatabaseIfNotExists($parameters, $schemaFile); } DbalCustomTypesRegistrar::register($dbalCustomTypesClasses); @@ -42,11 +42,11 @@ private static function generateDatabaseIfNotExists(array $parameters, string $s { self::ensureSchemaFileExists($schemaFile); - $databaseName = $parameters['dbname']; + $databaseName = $parameters['dbname']; $parametersWithoutDatabaseName = dissoc($parameters, 'dbname'); - $connection = DriverManager::getConnection($parametersWithoutDatabaseName); - $platform = new MariaDBPlatform(); - $schemaManager = new MySQLSchemaManager($connection, $platform); + $connection = DriverManager::getConnection($parametersWithoutDatabaseName); + $platform = new MariaDBPlatform(); + $schemaManager = new MySQLSchemaManager($connection, $platform); if (!self::databaseExists($databaseName, $schemaManager)) { $schemaManager->createDatabase($databaseName); diff --git a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php index b5e52eff3..d338b38cd 100644 --- a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php +++ b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php @@ -8,17 +8,15 @@ final readonly class ElasticsearchClient { - public function __construct(private Client $client, private string $indexPrefix) - { - } + public function __construct(private Client $client, private string $indexPrefix) {} public function persist(string $aggregateName, string $identifier, array $plainBody): void { $this->client->index( [ 'index' => sprintf('%s_%s', $this->indexPrefix, $aggregateName), - 'id' => $identifier, - 'body' => $plainBody, + 'id' => $identifier, + 'body' => $plainBody, ] ); } diff --git a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php index d18c90694..13a038ed4 100644 --- a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php +++ b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php @@ -30,7 +30,7 @@ private function generateIndexIfNotExists( string $schemasFolder, string $environment ): void { - if ('prod' !== $environment) { + if ($environment !== 'prod') { return; } diff --git a/src/Shared/Infrastructure/Logger/MonologLogger.php b/src/Shared/Infrastructure/Logger/MonologLogger.php index 1bf01d5bd..9dca53c91 100644 --- a/src/Shared/Infrastructure/Logger/MonologLogger.php +++ b/src/Shared/Infrastructure/Logger/MonologLogger.php @@ -8,9 +8,7 @@ final readonly class MonologLogger implements Logger { - public function __construct(private \Monolog\Logger $logger) - { - } + public function __construct(private \Monolog\Logger $logger) {} public function info(string $message, array $context = []): void { diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php index 382a1ee34..fd2930ab9 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php @@ -18,8 +18,7 @@ public function __construct( private Criteria $criteria, private array $criteriaToDoctrineFields = [], private array $hydrators = [] - ) { - } + ) {} public static function convert( Criteria $criteria, diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php index 7ac1ea13f..a9c5545dd 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php @@ -10,9 +10,7 @@ abstract class DoctrineRepository { - public function __construct(private readonly EntityManager $entityManager) - { - } + public function __construct(private readonly EntityManager $entityManager) {} protected function entityManager(): EntityManager { diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php b/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php index 2fd2598a7..f4668c11f 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php @@ -16,24 +16,24 @@ abstract class UuidType extends StringType implements DoctrineCustomType { abstract protected function typeClassName(): string; - public static function customTypeName(): string + final public static function customTypeName(): string { return Utils::toSnakeCase(str_replace('Type', '', (string) last(explode('\\', static::class)))); } - public function getName(): string + final public function getName(): string { return self::customTypeName(); } - public function convertToPHPValue($value, AbstractPlatform $platform) + final public function convertToPHPValue($value, AbstractPlatform $platform) { $className = $this->typeClassName(); return new $className($value); } - public function convertToDatabaseValue($value, AbstractPlatform $platform) + final public function convertToDatabaseValue($value, AbstractPlatform $platform) { /** @var Uuid $value */ return $value->value(); diff --git a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php index 35aea009e..611585223 100644 --- a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php +++ b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php @@ -10,18 +10,18 @@ final class ElasticQueryGenerator { - private const MUST_TYPE = 'must'; + private const MUST_TYPE = 'must'; private const MUST_NOT_TYPE = 'must_not'; - private const TERM_TERM = 'term'; - private const TERM_RANGE = 'range'; + private const TERM_TERM = 'term'; + private const TERM_RANGE = 'range'; private const TERM_WILDCARD = 'wildcard'; private static array $mustNotFields = [FilterOperator::NOT_EQUAL, FilterOperator::NOT_CONTAINS]; public function __invoke(array $query, Filter $filter): array { - $type = $this->typeFor($filter->operator()); - $termLevel = $this->termLevelFor($filter->operator()); + $type = $this->typeFor($filter->operator()); + $termLevel = $this->termLevelFor($filter->operator()); $valueTemplate = $filter->operator()->isContaining() ? '*%s*' : '%s'; return array_merge_recursive( @@ -29,10 +29,7 @@ public function __invoke(array $query, Filter $filter): array [ $type => [ $termLevel => [ - $filter->field()->value() => sprintf( - $valueTemplate, - strtolower($filter->value()->value()) - ), + $filter->field()->value() => sprintf($valueTemplate, strtolower($filter->value()->value())), ], ], ] @@ -47,9 +44,9 @@ private function typeFor(FilterOperator $operator): string private function termLevelFor(FilterOperator $operator): string { return match ($operator->value()) { - FilterOperator::EQUAL => self::TERM_TERM, - FilterOperator::NOT_EQUAL => '!=', - FilterOperator::GT, FilterOperator::LT => self::TERM_RANGE, + FilterOperator::EQUAL => self::TERM_TERM, + FilterOperator::NOT_EQUAL => '!=', + FilterOperator::GT, FilterOperator::LT => self::TERM_RANGE, FilterOperator::CONTAINS, FilterOperator::NOT_CONTAINS => self::TERM_WILDCARD, default => throw new Exception("Unexpected match value {$operator->value()}"), }; diff --git a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchCriteriaConverter.php b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchCriteriaConverter.php index 18aa91e71..b541f941e 100644 --- a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchCriteriaConverter.php +++ b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchCriteriaConverter.php @@ -39,7 +39,13 @@ private function formatSort(Criteria $criteria): array if ($criteria->hasOrder()) { $order = $criteria->order(); - return ['sort' => [$order->orderBy()->value() => ['order' => $order->orderType()->value()]]]; + return [ + 'sort' => [ + $order->orderBy()->value() => [ + 'order' => $order->orderType()->value(), + ], + ], + ]; } return []; diff --git a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php index 698eb4a9a..bd72fc4cd 100644 --- a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php +++ b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php @@ -13,13 +13,11 @@ abstract class ElasticsearchRepository { - public function __construct(private readonly ElasticsearchClient $client) - { - } + public function __construct(private readonly ElasticsearchClient $client) {} abstract protected function aggregateName(): string; - public function searchByCriteria(Criteria $criteria): array + final public function searchByCriteria(Criteria $criteria): array { $converter = new ElasticsearchCriteriaConverter(); diff --git a/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php b/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php index 71ef755e2..c93c9e9bc 100644 --- a/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php +++ b/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php @@ -13,7 +13,7 @@ final class AddJsonBodyToRequestListener { public function onKernelRequest(RequestEvent $event): void { - $request = $event->getRequest(); + $request = $event->getRequest(); $requestContents = $request->getContent(); if (!empty($requestContents) && $this->containsHeader($request, 'Content-Type', 'application/json')) { diff --git a/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php b/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php index 8f88d26c4..a18ea1e20 100644 --- a/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php +++ b/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php @@ -12,9 +12,7 @@ final readonly class ApiExceptionListener { - public function __construct(private ApiExceptionsHttpStatusCodeMapping $exceptionHandler) - { - } + public function __construct(private ApiExceptionsHttpStatusCodeMapping $exceptionHandler) {} public function onException(ExceptionEvent $event): void { @@ -23,7 +21,7 @@ public function onException(ExceptionEvent $event): void $event->setResponse( new JsonResponse( [ - 'code' => $this->exceptionCodeFor($exception), + 'code' => $this->exceptionCodeFor($exception), 'message' => $exception->getMessage(), ], $this->exceptionHandler->statusCodeFor($exception::class) diff --git a/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php b/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php index 573bf5633..2a8694347 100644 --- a/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php +++ b/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php @@ -15,7 +15,7 @@ final class ApiExceptionsHttpStatusCodeMapping private const DEFAULT_STATUS_CODE = Response::HTTP_INTERNAL_SERVER_ERROR; private array $exceptions = [ InvalidArgumentException::class => Response::HTTP_BAD_REQUEST, - NotFoundHttpException::class => Response::HTTP_NOT_FOUND, + NotFoundHttpException::class => Response::HTTP_NOT_FOUND, ]; public function register(string $exceptionClass, int $statusCode): void @@ -27,7 +27,7 @@ public function statusCodeFor(string $exceptionClass): int { $statusCode = get($exceptionClass, $this->exceptions, self::DEFAULT_STATUS_CODE); - if (null === $statusCode) { + if ($statusCode === null) { throw new InvalidArgumentException("There are no status code mapping for <$exceptionClass>"); } diff --git a/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php b/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php index f77d01aa7..4443de0f5 100644 --- a/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php +++ b/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php @@ -14,9 +14,7 @@ final readonly class BasicHttpAuthMiddleware { - public function __construct(private CommandBus $bus) - { - } + public function __construct(private CommandBus $bus) {} public function onKernelRequest(RequestEvent $event): void { @@ -34,7 +32,7 @@ public function onKernelRequest(RequestEvent $event): void private function hasIntroducedCredentials(?string $user): bool { - return null !== $user; + return $user !== null; } private function authenticate(string $user, string $pass, RequestEvent $event): void @@ -43,7 +41,7 @@ private function authenticate(string $user, string $pass, RequestEvent $event): $this->bus->dispatch(new AuthenticateUserCommand($user, $pass)); $this->addUserDataToRequest($user, $event); - } catch (InvalidAuthUsername | InvalidAuthCredentials) { + } catch (InvalidAuthCredentials|InvalidAuthUsername) { $event->setResponse(new JsonResponse(['error' => 'Invalid credentials'], Response::HTTP_FORBIDDEN)); } } @@ -56,7 +54,9 @@ private function addUserDataToRequest(string $user, RequestEvent $event): void private function askForCredentials(RequestEvent $event): void { $event->setResponse( - new Response('', Response::HTTP_UNAUTHORIZED, ['WWW-Authenticate' => 'Basic realm="CodelyTV"']) + new Response('', Response::HTTP_UNAUTHORIZED, [ +'WWW-Authenticate' => 'Basic realm="CodelyTV"', +]) ); } } diff --git a/src/Shared/Infrastructure/Symfony/WebController.php b/src/Shared/Infrastructure/Symfony/WebController.php index 81efc342d..26bbecf23 100644 --- a/src/Shared/Infrastructure/Symfony/WebController.php +++ b/src/Shared/Infrastructure/Symfony/WebController.php @@ -17,34 +17,34 @@ abstract class WebController extends ApiController { public function __construct( - private readonly Environment $twig, - private readonly RouterInterface $router, - private readonly RequestStack $requestStack, - QueryBus $queryBus, - CommandBus $commandBus, + private readonly Environment $twig, + private readonly RouterInterface $router, + private readonly RequestStack $requestStack, + QueryBus $queryBus, + CommandBus $commandBus, ApiExceptionsHttpStatusCodeMapping $exceptionHandler ) { parent::__construct($queryBus, $commandBus, $exceptionHandler); } - public function render(string $templatePath, array $arguments = []): SymfonyResponse + final public function render(string $templatePath, array $arguments = []): SymfonyResponse { return new SymfonyResponse($this->twig->render($templatePath, $arguments)); } - public function redirect(string $routeName): RedirectResponse + final public function redirect(string $routeName): RedirectResponse { return new RedirectResponse($this->router->generate($routeName), 302); } - public function redirectWithMessage(string $routeName, string $message): RedirectResponse + final public function redirectWithMessage(string $routeName, string $message): RedirectResponse { $this->addFlashFor('message', [$message]); return $this->redirect($routeName); } - public function redirectWithErrors( + final public function redirectWithErrors( string $routeName, ConstraintViolationListInterface $errors, Request $request diff --git a/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php b/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php index 0d83c9376..a5fc8a61c 100644 --- a/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php +++ b/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php @@ -26,7 +26,7 @@ protected function setUp(): void /** @test */ public function it_should_authenticate_a_valid_user(): void { - $command = AuthenticateUserCommandMother::create(); + $command = AuthenticateUserCommandMother::create(); $authUser = AuthUserMother::fromCommand($command); $this->shouldSearch($authUser->username(), $authUser); @@ -39,7 +39,7 @@ public function it_should_throw_an_exception_when_the_user_does_not_exist(): voi { $this->expectException(InvalidAuthUsername::class); - $command = AuthenticateUserCommandMother::create(); + $command = AuthenticateUserCommandMother::create(); $username = AuthUsernameMother::create($command->username()); $this->shouldSearch($username); @@ -52,7 +52,7 @@ public function it_should_throw_an_exception_when_the_password_does_not_math(): { $this->expectException(InvalidAuthCredentials::class); - $command = AuthenticateUserCommandMother::create(); + $command = AuthenticateUserCommandMother::create(); $authUser = AuthUserMother::create(username: AuthUsernameMother::create($command->username())); $this->shouldSearch($authUser->username(), $authUser); diff --git a/tests/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php b/tests/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php index 85168553d..d6620c4ad 100644 --- a/tests/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php +++ b/tests/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php @@ -15,13 +15,11 @@ public static function nameContains(string $text): Criteria { return CriteriaMother::create( FiltersMother::createOne( - FilterMother::fromValues( - [ - 'field' => 'name', + FilterMother::fromValues([ + 'field' => 'name', 'operator' => 'CONTAINS', - 'value' => $text, - ] - ) + 'value' => $text, + ]) ) ); } diff --git a/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php b/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php index 490e9d922..10212414f 100644 --- a/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php +++ b/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php @@ -20,9 +20,9 @@ public function it_should_save_a_valid_course(): void /** @test */ public function it_should_search_all_existing_courses(): void { - $existingCourse = BackofficeCourseMother::create(); + $existingCourse = BackofficeCourseMother::create(); $anotherExistingCourse = BackofficeCourseMother::create(); - $existingCourses = [$existingCourse, $anotherExistingCourse]; + $existingCourses = [$existingCourse, $anotherExistingCourse]; $this->elasticRepository()->save($existingCourse); $this->elasticRepository()->save($anotherExistingCourse); @@ -33,9 +33,9 @@ public function it_should_search_all_existing_courses(): void /** @test */ public function it_should_search_all_existing_courses_with_an_empty_criteria(): void { - $existingCourse = BackofficeCourseMother::create(); + $existingCourse = BackofficeCourseMother::create(); $anotherExistingCourse = BackofficeCourseMother::create(); - $existingCourses = [$existingCourse, $anotherExistingCourse]; + $existingCourses = [$existingCourse, $anotherExistingCourse]; $this->elasticRepository()->save($existingCourse); $this->elasticRepository()->save($anotherExistingCourse); @@ -51,10 +51,10 @@ public function it_should_search_all_existing_courses_with_an_empty_criteria(): /** @test */ public function it_should_filter_by_criteria(): void { - $dddInPhpCourse = BackofficeCourseMother::create(name: 'DDD en PHP'); + $dddInPhpCourse = BackofficeCourseMother::create(name: 'DDD en PHP'); $dddInJavaCourse = BackofficeCourseMother::create(name: 'DDD en Java'); - $intellijCourse = BackofficeCourseMother::create(name: 'Exprimiendo Intellij'); - $dddCourses = [$dddInPhpCourse, $dddInJavaCourse]; + $intellijCourse = BackofficeCourseMother::create(name: 'Exprimiendo Intellij'); + $dddCourses = [$dddInPhpCourse, $dddInJavaCourse]; $nameContainsDddCriteria = BackofficeCourseCriteriaMother::nameContains('DDD'); diff --git a/tests/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php b/tests/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php index bb35da789..eb2f3b457 100644 --- a/tests/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php +++ b/tests/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php @@ -20,9 +20,9 @@ public function it_should_save_a_valid_course(): void /** @test */ public function it_should_search_all_existing_courses(): void { - $existingCourse = BackofficeCourseMother::create(); + $existingCourse = BackofficeCourseMother::create(); $anotherExistingCourse = BackofficeCourseMother::create(); - $existingCourses = [$existingCourse, $anotherExistingCourse]; + $existingCourses = [$existingCourse, $anotherExistingCourse]; $this->mySqlRepository()->save($existingCourse); $this->mySqlRepository()->save($anotherExistingCourse); @@ -33,9 +33,9 @@ public function it_should_search_all_existing_courses(): void /** @test */ public function it_should_search_all_existing_courses_with_an_empty_criteria(): void { - $existingCourse = BackofficeCourseMother::create(); + $existingCourse = BackofficeCourseMother::create(); $anotherExistingCourse = BackofficeCourseMother::create(); - $existingCourses = [$existingCourse, $anotherExistingCourse]; + $existingCourses = [$existingCourse, $anotherExistingCourse]; $this->mySqlRepository()->save($existingCourse); $this->mySqlRepository()->save($anotherExistingCourse); @@ -47,10 +47,10 @@ public function it_should_search_all_existing_courses_with_an_empty_criteria(): /** @test */ public function it_should_filter_by_criteria(): void { - $dddInPhpCourse = BackofficeCourseMother::create(name: 'DDD en PHP'); + $dddInPhpCourse = BackofficeCourseMother::create(name: 'DDD en PHP'); $dddInJavaCourse = BackofficeCourseMother::create(name: 'DDD en Java'); - $intellijCourse = BackofficeCourseMother::create(name: 'Exprimiendo Intellij'); - $dddCourses = [$dddInPhpCourse, $dddInJavaCourse]; + $intellijCourse = BackofficeCourseMother::create(name: 'Exprimiendo Intellij'); + $dddCourses = [$dddInPhpCourse, $dddInJavaCourse]; $nameContainsDddCriteria = BackofficeCourseCriteriaMother::nameContains('DDD'); diff --git a/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeEnvironmentArranger.php b/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeEnvironmentArranger.php index a9210551b..4bee80f16 100644 --- a/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeEnvironmentArranger.php +++ b/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeEnvironmentArranger.php @@ -14,9 +14,7 @@ final readonly class BackofficeEnvironmentArranger implements EnvironmentArranger { - public function __construct(private ElasticsearchClient $elasticsearchClient, private EntityManager $entityManager) - { - } + public function __construct(private ElasticsearchClient $elasticsearchClient, private EntityManager $entityManager) {} public function arrange(): void { @@ -24,7 +22,5 @@ public function arrange(): void apply(new MySqlDatabaseCleaner(), [$this->entityManager]); } - public function close(): void - { - } + public function close(): void {} } diff --git a/tests/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php b/tests/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php index 6a85c1f1a..fa17355db 100644 --- a/tests/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php +++ b/tests/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php @@ -26,7 +26,7 @@ public function it_should_create_a_valid_course(): void { $command = CreateCourseCommandMother::create(); - $course = CourseMother::fromRequest($command); + $course = CourseMother::fromRequest($command); $domainEvent = CourseCreatedDomainEventMother::fromCourse($course); $this->shouldSave($course); diff --git a/tests/Mooc/Courses/Application/Update/CourseRenamerTest.php b/tests/Mooc/Courses/Application/Update/CourseRenamerTest.php index 2815aa7fe..9481c0557 100644 --- a/tests/Mooc/Courses/Application/Update/CourseRenamerTest.php +++ b/tests/Mooc/Courses/Application/Update/CourseRenamerTest.php @@ -26,8 +26,8 @@ protected function setUp(): void /** @test */ public function it_should_rename_an_existing_course(): void { - $course = CourseMother::create(); - $newName = CourseNameMother::create(); + $course = CourseMother::create(); + $newName = CourseNameMother::create(); $renamedCourse = DuplicatorMother::with($course, ['name' => $newName]); $this->shouldSearch($course->id(), $course); diff --git a/tests/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php b/tests/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php index 630137874..9d6bf0573 100644 --- a/tests/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php +++ b/tests/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php @@ -25,8 +25,8 @@ protected function setUp(): void /** @test */ public function it_should_find_an_existing_courses_counter(): void { - $counter = CoursesCounterMother::create(); - $query = new FindCoursesCounterQuery(); + $counter = CoursesCounterMother::create(); + $query = new FindCoursesCounterQuery(); $response = CoursesCounterResponseMother::create($counter->total()); $this->shouldSearch($counter); diff --git a/tests/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php b/tests/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php index 9074bb70d..f7aa9b16d 100644 --- a/tests/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php +++ b/tests/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php @@ -21,11 +21,7 @@ protected function setUp(): void parent::setUp(); $this->subscriber = new IncrementCoursesCounterOnCourseCreated( - new CoursesCounterIncrementer( - $this->repository(), - $this->uuidGenerator(), - $this->eventBus() - ) + new CoursesCounterIncrementer($this->repository(), $this->uuidGenerator(), $this->eventBus()) ); } @@ -34,8 +30,8 @@ public function it_should_initialize_a_new_counter(): void { $event = CourseCreatedDomainEventMother::create(); - $courseId = CourseIdMother::create($event->aggregateId()); - $newCounter = CoursesCounterMother::withOne($courseId); + $courseId = CourseIdMother::create($event->aggregateId()); + $newCounter = CoursesCounterMother::withOne($courseId); $domainEvent = CoursesCounterIncrementedDomainEventMother::fromCounter($newCounter); $this->shouldSearch(null); @@ -51,10 +47,10 @@ public function it_should_increment_an_existing_counter(): void { $event = CourseCreatedDomainEventMother::create(); - $courseId = CourseIdMother::create($event->aggregateId()); - $existingCounter = CoursesCounterMother::create(); + $courseId = CourseIdMother::create($event->aggregateId()); + $existingCounter = CoursesCounterMother::create(); $incrementedCounter = CoursesCounterMother::incrementing($existingCounter, $courseId); - $domainEvent = CoursesCounterIncrementedDomainEventMother::fromCounter($incrementedCounter); + $domainEvent = CoursesCounterIncrementedDomainEventMother::fromCounter($incrementedCounter); $this->shouldSearch($existingCounter); $this->shouldSave($incrementedCounter); @@ -68,7 +64,7 @@ public function it_should_not_increment_an_already_incremented_course(): void { $event = CourseCreatedDomainEventMother::create(); - $courseId = CourseIdMother::create($event->aggregateId()); + $courseId = CourseIdMother::create($event->aggregateId()); $existingCounter = CoursesCounterMother::withOne($courseId); $this->shouldSearch($existingCounter); diff --git a/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php b/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php index 4f44bbf9d..96a9024a0 100644 --- a/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php +++ b/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php @@ -12,16 +12,12 @@ final readonly class MoocEnvironmentArranger implements EnvironmentArranger { - public function __construct(private EntityManager $entityManager) - { - } + public function __construct(private EntityManager $entityManager) {} public function arrange(): void { apply(new MySqlDatabaseCleaner(), [$this->entityManager]); } - public function close(): void - { - } + public function close(): void {} } diff --git a/tests/Shared/Infrastructure/Behat/ApiContext.php b/tests/Shared/Infrastructure/Behat/ApiContext.php index b1c76c1ec..30be7f565 100644 --- a/tests/Shared/Infrastructure/Behat/ApiContext.php +++ b/tests/Shared/Infrastructure/Behat/ApiContext.php @@ -13,13 +13,13 @@ final class ApiContext extends RawMinkContext { - private readonly MinkHelper $sessionHelper; + private readonly MinkHelper $sessionHelper; private readonly MinkSessionRequestHelper $request; public function __construct(private readonly Session $minkSession) { $this->sessionHelper = new MinkHelper($this->minkSession); - $this->request = new MinkSessionRequestHelper(new MinkHelper($minkSession)); + $this->request = new MinkSessionRequestHelper(new MinkHelper($minkSession)); } /** @@ -44,7 +44,7 @@ public function iSendARequestToWithBody($method, $url, PyStringNode $body): void public function theResponseContentShouldBe(PyStringNode $expectedResponse): void { $expected = $this->sanitizeOutput($expectedResponse->getRaw()); - $actual = $this->sanitizeOutput($this->sessionHelper->getResponse()); + $actual = $this->sanitizeOutput($this->sessionHelper->getResponse()); if ($expected !== $actual) { throw new RuntimeException( @@ -61,9 +61,7 @@ public function theResponseShouldBeEmpty(): void $actual = trim($this->sessionHelper->getResponse()); if (!empty($actual)) { - throw new RuntimeException( - sprintf("The outputs is not empty, Actual:\n%s", $actual) - ); + throw new RuntimeException(sprintf("The outputs is not empty, Actual:\n%s", $actual)); } } diff --git a/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php b/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php index 710b1d5c3..157041b44 100644 --- a/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php +++ b/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php @@ -16,8 +16,7 @@ public function __construct( private DatabaseConnections $connections, private InMemorySymfonyEventBus $bus, private DomainEventJsonDeserializer $deserializer - ) { - } + ) {} /** @BeforeScenario */ public function cleanEnvironment(): void diff --git a/tests/Shared/Infrastructure/Bus/Command/FakeCommand.php b/tests/Shared/Infrastructure/Bus/Command/FakeCommand.php index bf13218ba..d009d2a79 100644 --- a/tests/Shared/Infrastructure/Bus/Command/FakeCommand.php +++ b/tests/Shared/Infrastructure/Bus/Command/FakeCommand.php @@ -6,6 +6,4 @@ use CodelyTv\Shared\Domain\Bus\Command\Command; -final class FakeCommand implements Command -{ -} +final class FakeCommand implements Command {} diff --git a/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php b/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php index a394baaec..291e9eb14 100644 --- a/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php @@ -40,7 +40,7 @@ public function it_should_raise_an_exception_dispatching_a_non_registered_comman private function commandHandler(): object { - return new class () { + return new class() { public function __invoke(FakeCommand $command): never { throw new RuntimeException('This works fine!'); diff --git a/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php b/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php index d2d4457e1..8b3f48364 100644 --- a/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php @@ -16,14 +16,14 @@ final class MySqlDoctrineEventBusTest extends InfrastructureTestCase { - private MySqlDoctrineEventBus|null $bus; + private MySqlDoctrineEventBus|null $bus; private MySqlDoctrineDomainEventsConsumer|null $consumer; protected function setUp(): void { parent::setUp(); - $this->bus = new MySqlDoctrineEventBus($this->service(EntityManager::class)); + $this->bus = new MySqlDoctrineEventBus($this->service(EntityManager::class)); $this->consumer = new MySqlDoctrineDomainEventsConsumer( $this->service(EntityManager::class), $this->service(DomainEventMapping::class) @@ -33,14 +33,17 @@ protected function setUp(): void /** @test */ public function it_should_publish_and_consume_domain_events_from_msql(): void { - $domainEvent = CourseCreatedDomainEventMother::create(); + $domainEvent = CourseCreatedDomainEventMother::create(); $anotherDomainEvent = CoursesCounterIncrementedDomainEventMother::create(); $this->bus->publish($domainEvent, $anotherDomainEvent); $this->consumer->consume( - subscribers: fn (DomainEvent ...$expectedEvents) => $this->assertContainsEquals($domainEvent, $expectedEvents), - eventsToConsume: 2 + subscribers: fn (DomainEvent ...$expectedEvents) => $this->assertContainsEquals( + $domainEvent, + $expectedEvents + ), + eventsToConsume: 2 ); } diff --git a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php index f9e921a8b..5612e2c8a 100644 --- a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php @@ -35,20 +35,20 @@ protected function setUp(): void $this->connection = $this->service(RabbitMqConnection::class); - $this->exchangeName = 'test_domain_events'; - $this->configurer = new RabbitMqConfigurer($this->connection); - $this->publisher = new RabbitMqEventBus( + $this->exchangeName = 'test_domain_events'; + $this->configurer = new RabbitMqConfigurer($this->connection); + $this->publisher = new RabbitMqEventBus( $this->connection, $this->exchangeName, $this->service(MySqlDoctrineEventBus::class) ); - $this->consumer = new RabbitMqDomainEventsConsumer( + $this->consumer = new RabbitMqDomainEventsConsumer( $this->connection, $this->service(DomainEventJsonDeserializer::class), $this->exchangeName, $maxRetries = 1 ); - $this->fakeSubscriber = new TestAllWorksOnRabbitMqEventsPublished(); + $this->fakeSubscriber = new TestAllWorksOnRabbitMqEventsPublished(); $this->consumerHasBeenExecuted = false; $this->cleanEnvironment($this->connection); diff --git a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php index 310d3ce58..70a8623e4 100644 --- a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php +++ b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php @@ -12,13 +12,8 @@ final class TestAllWorksOnRabbitMqEventsPublished implements DomainEventSubscrib { public static function subscribedTo(): array { - return [ - CourseCreatedDomainEvent::class, - CoursesCounterIncrementedDomainEvent::class, - ]; + return [CourseCreatedDomainEvent::class, CoursesCounterIncrementedDomainEvent::class, ]; } - public function __invoke(CourseCreatedDomainEvent|CoursesCounterIncrementedDomainEvent $event): void - { - } + public function __invoke(CourseCreatedDomainEvent|CoursesCounterIncrementedDomainEvent $event): void {} } diff --git a/tests/Shared/Infrastructure/Bus/Query/FakeQuery.php b/tests/Shared/Infrastructure/Bus/Query/FakeQuery.php index 0afc89517..4f5f2ba62 100644 --- a/tests/Shared/Infrastructure/Bus/Query/FakeQuery.php +++ b/tests/Shared/Infrastructure/Bus/Query/FakeQuery.php @@ -6,6 +6,4 @@ use CodelyTv\Shared\Domain\Bus\Query\Query; -final class FakeQuery implements Query -{ -} +final class FakeQuery implements Query {} diff --git a/tests/Shared/Infrastructure/Bus/Query/FakeResponse.php b/tests/Shared/Infrastructure/Bus/Query/FakeResponse.php index 2ba0b4cee..323c50493 100644 --- a/tests/Shared/Infrastructure/Bus/Query/FakeResponse.php +++ b/tests/Shared/Infrastructure/Bus/Query/FakeResponse.php @@ -8,9 +8,7 @@ final readonly class FakeResponse implements Response { - public function __construct(private int $number) - { - } + public function __construct(private int $number) {} public function number(): int { diff --git a/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php b/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php index d25b907f8..3dbb86fe8 100644 --- a/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php @@ -40,7 +40,7 @@ public function it_should_raise_an_exception_dispatching_a_non_registered_query( private function queryHandler(): object { - return new class () { + return new class() { public function __invoke(FakeQuery $query): never { throw new RuntimeException('This works fine!'); @@ -48,7 +48,7 @@ public function __invoke(FakeQuery $query): never }; } - private function query(): Query|MockInterface + private function query(): MockInterface|Query { return $this->mock(Query::class); } diff --git a/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php b/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php index a8b6b0688..2aa1c9afe 100644 --- a/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php +++ b/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php @@ -16,7 +16,7 @@ public function __invoke(EntityManagerInterface $entityManager): void { $connection = $entityManager->getConnection(); - $tables = $this->tables($connection); + $tables = $this->tables($connection); $truncateTablesSql = $this->truncateDatabaseSql($tables); $connection->exec($truncateTablesSql); diff --git a/tests/Shared/Infrastructure/Mink/MinkHelper.php b/tests/Shared/Infrastructure/Mink/MinkHelper.php index a820db5e2..51fb79319 100644 --- a/tests/Shared/Infrastructure/Mink/MinkHelper.php +++ b/tests/Shared/Infrastructure/Mink/MinkHelper.php @@ -11,17 +11,15 @@ final readonly class MinkHelper { - public function __construct(private Session $session) - { - } + public function __construct(private Session $session) {} public function sendRequest($method, $url, array $optionalParams = []): Crawler { $defaultOptionalParams = [ - 'parameters' => [], - 'files' => [], - 'server' => ['HTTP_ACCEPT' => 'application/json', 'CONTENT_TYPE' => 'application/json'], - 'content' => null, + 'parameters' => [], + 'files' => [], + 'server' => ['HTTP_ACCEPT' => 'application/json', 'CONTENT_TYPE' => 'application/json'], + 'content' => null, 'changeHistory' => true, ]; diff --git a/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php b/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php index b1760fce0..6f02b11d7 100644 --- a/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php +++ b/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php @@ -9,9 +9,7 @@ final readonly class MinkSessionRequestHelper { - public function __construct(private MinkHelper $sessionHelper) - { - } + public function __construct(private MinkHelper $sessionHelper) {} public function sendRequest($method, $url, array $optionalParams = []): void { diff --git a/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php b/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php index 73a59cc64..90ca771b3 100644 --- a/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php +++ b/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php @@ -6,8 +6,9 @@ use CodelyTv\Tests\Shared\Infrastructure\PhpUnit\Constraint\CodelyTvConstraintIsSimilar; use Mockery\Matcher\MatcherAbstract; +use Stringable; -final class CodelyTvMatcherIsSimilar extends MatcherAbstract implements \Stringable +final class CodelyTvMatcherIsSimilar extends MatcherAbstract implements Stringable { private readonly CodelyTvConstraintIsSimilar $constraint; diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php index 01317fa01..b475419ea 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php @@ -53,7 +53,7 @@ private function aggregateRootsAreTheSameClass(AggregateRoot $expected, Aggregat private function aggregateRootPropertiesAreSimilar(AggregateRoot $expected, AggregateRoot $actual): bool { $expectedReflected = new ReflectionObject($expected); - $actualReflected = new ReflectionObject($actual); + $actualReflected = new ReflectionObject($actual); foreach ($expectedReflected->getProperties() as $expectedReflectedProperty) { $actualReflectedProperty = $actualReflected->getProperty($expectedReflectedProperty->getName()); @@ -62,7 +62,7 @@ private function aggregateRootPropertiesAreSimilar(AggregateRoot $expected, Aggr $actualReflectedProperty->setAccessible(true); $expectedProperty = $expectedReflectedProperty->getValue($expected); - $actualProperty = $actualReflectedProperty->getValue($actual); + $actualProperty = $actualReflectedProperty->getValue($actual); if (!TestUtils::isSimilar($expectedProperty, $actualProperty)) { return false; diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeSimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeSimilarComparator.php index a6ca2c917..ad064d3e1 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeSimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeSimilarComparator.php @@ -25,7 +25,7 @@ public function assertEquals( $ignoreCase = false, array &$processed = [] ): void { - $normalizedDelta = $delta === 0.0 ? 10 : $delta; + $normalizedDelta = $delta === 0.0 ? 10 : $delta; $intervalWithDelta = new DateInterval(sprintf('PT%sS', abs($normalizedDelta))); $expectedLower = clone $expected; diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php index 4e1ea83ff..05bd8bdc3 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php @@ -16,7 +16,7 @@ final class DateTimeStringSimilarComparator extends ObjectComparator { public function accepts($expected, $actual): bool { - return (null !== $actual) + return ($actual !== null) && is_string($expected) && is_string($actual) && $this->isValidDateTimeString($expected) @@ -32,9 +32,9 @@ public function assertEquals( array &$processed = [] ): void { $expectedDate = new DateTimeImmutable($expected); - $actualDate = new DateTimeImmutable($actual); + $actualDate = new DateTimeImmutable($actual); - $normalizedDelta = $delta === 0.0 ? 10 : $delta; + $normalizedDelta = $delta === 0.0 ? 10 : $delta; $intervalWithDelta = new DateInterval(sprintf('PT%sS', abs($normalizedDelta))); if ($actualDate < $expectedDate->sub($intervalWithDelta) diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php index 48a52274a..34f061ebf 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php @@ -52,7 +52,7 @@ private function areTheSameClass(DomainEvent $expected, DomainEvent $actual): bo private function propertiesAreSimilar(DomainEvent $expected, DomainEvent $actual): bool { $expectedReflected = new ReflectionObject($expected); - $actualReflected = new ReflectionObject($actual); + $actualReflected = new ReflectionObject($actual); foreach ($expectedReflected->getProperties() as $expectedReflectedProperty) { if (!in_array($expectedReflectedProperty->getName(), self::$ignoredAttributes, false)) { @@ -62,7 +62,7 @@ private function propertiesAreSimilar(DomainEvent $expected, DomainEvent $actual $actualReflectedProperty->setAccessible(true); $expectedProperty = $expectedReflectedProperty->getValue($expected); - $actualProperty = $actualReflectedProperty->getValue($actual); + $actualProperty = $actualReflectedProperty->getValue($actual); if (!TestUtils::isSimilar($expectedProperty, $actualProperty)) { return false; diff --git a/tests/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php b/tests/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php index 5ee3ce2ed..7c8847dcc 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php +++ b/tests/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php @@ -21,9 +21,7 @@ // Based on \PHPUnit\Framework\Constraint\IsEqual final class CodelyTvConstraintIsSimilar extends Constraint { - public function __construct(private $value, private readonly float $delta = 0.0) - { - } + public function __construct(private $value, private readonly float $delta = 0.0) {} public function evaluate($other, $description = '', $returnResult = false): bool { @@ -31,7 +29,7 @@ public function evaluate($other, $description = '', $returnResult = false): bool return true; } - $isValid = true; + $isValid = true; $comparatorFactory = new Factory(); $comparatorFactory->register(new AggregateRootArraySimilarComparator()); @@ -47,10 +45,7 @@ public function evaluate($other, $description = '', $returnResult = false): bool $comparator->assertEquals($this->value, $other, $this->delta); } catch (ComparisonFailure $f) { if (!$returnResult) { - throw new ExpectationFailedException( - trim($description . "\n" . $f->getMessage()), - $f - ); + throw new ExpectationFailedException(trim($description . "\n" . $f->getMessage()), $f); } $isValid = false; @@ -68,23 +63,13 @@ public function toString(): string return 'is equal to '; } - return sprintf( - "is equal to '%s'", - $this->value - ); + return sprintf("is equal to '%s'", $this->value); } if ($this->delta !== 0) { - $delta = sprintf( - ' with delta <%F>', - $this->delta - ); + $delta = sprintf(' with delta <%F>', $this->delta); } - return sprintf( - 'is equal to %s%s', - $this->exporter()->export($this->value), - $delta - ); + return sprintf('is equal to %s%s', $this->exporter()->export($this->value), $delta); } } diff --git a/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php b/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php index 919441ae7..54d0e3a45 100644 --- a/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php +++ b/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php @@ -18,8 +18,8 @@ abstract class UnitTestCase extends MockeryTestCase { - private EventBus|MockInterface|null $eventBus = null; - private UuidGenerator|MockInterface|null $uuidGenerator = null; + private EventBus|MockInterface|null $eventBus = null; + private MockInterface|UuidGenerator|null $uuidGenerator = null; protected function mock(string $className): MockInterface { @@ -56,7 +56,7 @@ protected function shouldGenerateUuid(string $uuid): void ->andReturn($uuid); } - protected function uuidGenerator(): UuidGenerator|MockInterface + protected function uuidGenerator(): MockInterface|UuidGenerator { return $this->uuidGenerator ??= $this->mock(UuidGenerator::class); } From 2a9b95cfce3e604a876b9fdd513416f5a2819dd2 Mon Sep 17 00:00:00 2001 From: Juan Valdebenito Date: Wed, 27 Sep 2023 15:22:39 -0300 Subject: [PATCH 14/40] change: update README.md (#349) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rafa Gómez --- README.md | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index dd94d40cc..8893fc6af 100644 --- a/README.md +++ b/README.md @@ -63,8 +63,8 @@ some Symfony and Laravel implementations. ### ⛱️ Bounded Contexts -* [Mooc](src/Mooc): Place to look in if you wanna see some code 🙂. Massive Open Online Courses public platform with users, videos, notifications, and so on. -* [Backoffice](src/Backoffice): Here you'll find the use cases needed by the Customer Support department in order to manage users, courses, videos, and so on. +- [Mooc](src/Mooc): Place to look in if you wanna see some code 🙂. Massive Open Online Courses public platform with users, videos, notifications, and so on. +- [Backoffice](src/Backoffice): Here you'll find the use cases needed by the Customer Support department in order to manage users, courses, videos, and so on. ### 🎯 Hexagonal Architecture @@ -106,6 +106,7 @@ src ``` #### Repository pattern + Our repositories try to be as simple as possible usually only containing 2 methods `search` and `save`. If we need some query with more filters we use the `Specification` pattern also known as `Criteria` pattern. So we add a `searchByCriteria` method. @@ -114,33 +115,46 @@ You can see an example [here](src/Mooc/Courses/Domain/CourseRepository.php) and its implementation [here](src/Mooc/Courses/Infrastructure/Persistence/DoctrineCourseRepository.php). ### Aggregates + You can see an example of an aggregate [here](src/Mooc/Courses/Domain/Course.php). All aggregates should extend the [AggregateRoot](src/Shared/Domain/Aggregate/AggregateRoot.php). ### Command Bus + There is 1 implementations of the [command bus](src/Shared/Domain/Bus/Command/CommandBus.php). + 1. [Sync](src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php) using the Symfony Message Bus ### Query Bus + The [Query Bus](src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBus.php) uses the Symfony Message Bus. ### Event Bus + The [Event Bus](src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php) uses the Symfony Message Bus. The [MySql Bus](src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php) uses a MySql+Pulling as a bus. The [RabbitMQ Bus](src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php) uses RabbitMQ C extension. ## 📱 Monitoring + Every time a domain event is published it's exported to Prometheus. You can access to the Prometheus panel [here](http://localhost:9999/). ## 🤔 Contributing + There are some things missing (add swagger, improve documentation...), feel free to add this if you want! If you want some guidelines feel free to contact us :) ## 🤩 Extra + This code was shown in the [From framework coupled code to #microservices through #DDD](http://codely.tv/screencasts/codigo-acoplado-framework-microservicios-ddd) talk and doubts where answered in the [DDD y CQRS: Preguntas Frecuentes](http://codely.tv/screencasts/ddd-cqrs-preguntas-frecuentes/) video. 🎥 Used in the CodelyTV Pro courses: -* [🇪🇸 DDD in PHP](https://pro.codely.tv/library/ddd-en-php/about/) -* [🇪🇸 Arquitectura Hexagonal](https://pro.codely.tv/library/arquitectura-hexagonal/66748/about/) -* [🇪🇸 CQRS: Command Query Responsibility Segregation](https://pro.codely.tv/library/cqrs-command-query-responsibility-segregation-3719e4aa/62554/about/) -* [🇪🇸 Comunicación entre microservicios: Event-Driven Architecture](https://pro.codely.tv/library/comunicacion-entre-microservicios-event-driven-architecture/74823/about/) + +- [🇪🇸 DDD in PHP](https://pro.codely.tv/library/ddd-en-php/about/) +- [🇪🇸 Arquitectura Hexagonal](https://pro.codely.tv/library/arquitectura-hexagonal/66748/about/) +- [🇪🇸 CQRS: Command Query Responsibility Segregation](https://pro.codely.tv/library/cqrs-command-query-responsibility-segregation-3719e4aa/62554/about/) +- [🇪🇸 Comunicación entre microservicios: Event-Driven Architecture](https://pro.codely.tv/library/comunicacion-entre-microservicios-event-driven-architecture/74823/about/) + +## 🌐 remember to visit our courses + +- [Courses codely](https://codely.com/cursos) From d0750842c2ca20f283f956eb8236332ef929b28f Mon Sep 17 00:00:00 2001 From: jcbadillo Date: Wed, 27 Sep 2023 20:23:57 +0200 Subject: [PATCH 15/40] Small fix. A period at the end of the sentence for maintaining the same coherence with (#343) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit the rest of the documentation. Co-authored-by: Juan Carlos Badillo Co-authored-by: Rafa Gómez --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8893fc6af..2af641e94 100644 --- a/README.md +++ b/README.md @@ -122,8 +122,8 @@ extend the [AggregateRoot](src/Shared/Domain/Aggregate/AggregateRoot.php). ### Command Bus There is 1 implementations of the [command bus](src/Shared/Domain/Bus/Command/CommandBus.php). +1. [Sync](src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php) using the Symfony Message Bus. -1. [Sync](src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php) using the Symfony Message Bus ### Query Bus From d5ee40b28d36d12661c52968f433a0f30d2eb612 Mon Sep 17 00:00:00 2001 From: davidPaymefy <58425941+davidPaymefy@users.noreply.github.com> Date: Wed, 27 Sep 2023 20:24:55 +0200 Subject: [PATCH 16/40] =?UTF-8?q?Correcci=C3=B3n=20mensaje=20de=20error=20?= =?UTF-8?q?en=20ingl=C3=A9s=20(#337)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rafa Gómez Co-authored-by: ChatGPT --- src/Shared/Infrastructure/Bus/Query/QueryNotRegisteredError.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Shared/Infrastructure/Bus/Query/QueryNotRegisteredError.php b/src/Shared/Infrastructure/Bus/Query/QueryNotRegisteredError.php index 9f0d64588..ea5926271 100644 --- a/src/Shared/Infrastructure/Bus/Query/QueryNotRegisteredError.php +++ b/src/Shared/Infrastructure/Bus/Query/QueryNotRegisteredError.php @@ -13,6 +13,6 @@ public function __construct(Query $query) { $queryClass = $query::class; - parent::__construct("The query <$queryClass> hasn't a query handler associated"); + parent::__construct("The query <$queryClass> has no associated query handler"); } } From 835bc68b1559a0810168e25d0579d96f4f299deb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ca=C3=B1ada=20Garc=C3=ADa?= Date: Wed, 27 Sep 2023 20:29:22 +0200 Subject: [PATCH 17/40] fix: using the right link for blog entry. (#354) --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2af641e94..0f6b4a5a0 100644 --- a/README.md +++ b/README.md @@ -146,7 +146,8 @@ some guidelines feel free to contact us :) ## 🤩 Extra -This code was shown in the [From framework coupled code to #microservices through #DDD](http://codely.tv/screencasts/codigo-acoplado-framework-microservicios-ddd) talk and doubts where answered in the [DDD y CQRS: Preguntas Frecuentes](http://codely.tv/screencasts/ddd-cqrs-preguntas-frecuentes/) video. +This code was shown in the [From framework coupled code to #microservices through #DDD](http://codely.tv/blog/screencasts/codigo-acoplado-framework-microservicios-ddd) talk and doubts where answered in the [DDD y CQRS: Preguntas Frecuentes](http://codely.tv/screencasts/ddd-cqrs-preguntas-frecuentes/) video. + 🎥 Used in the CodelyTV Pro courses: From 23a2319fe4530c4b79c36d038713c7b2d80076fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Tue, 3 Oct 2023 11:50:03 +0200 Subject: [PATCH 18/40] chore: add psalm in all code dirs (#355) * chore: add psalm in all code dirs * chore: add psalm in all code dirs * chore: add psalm in all code dirs * chore: add psalm in all code dirs * chore: add psalm in all code dirs * chore: add psalm in all code dirs * chore: add psalm in all code dirs * chore: add psalm in all code dirs * chore: add psalm in all code dirs * chore: add psalm in all code dirs --- .github/workflows/ci.yml | 10 +-- Makefile | 82 ++++--------------- apps/backoffice/backend/bin/console | 2 +- apps/backoffice/backend/public/index.php | 4 +- apps/backoffice/frontend/bin/console | 2 +- apps/backoffice/frontend/public/index.php | 4 +- apps/bootstrap.php | 15 +--- apps/mooc/backend/bin/console | 2 +- apps/mooc/backend/public/index.php | 4 +- ecs.php | 6 +- psalm.xml | 6 +- .../RabbitMq/RabbitMqDomainEventsConsumer.php | 3 +- .../Bus/Query/InMemorySymfonyQueryBus.php | 4 +- .../Infrastructure/PhpUnit/UnitTestCase.php | 2 + 14 files changed, 43 insertions(+), 103 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8c5dc2df4..9ab37e216 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,7 +3,7 @@ name: CI on: push: branches: - - master + - main pull_request: jobs: @@ -12,9 +12,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - - run: docker-compose pull + - run: docker compose pull - name: 🎻 Install dependencies run: make composer-install @@ -35,14 +35,14 @@ jobs: sleep 2 done - - name: 🧪 Wait for the elasticsearch to get up + - name: 🧪 Wait for the Elasticsearch to get up run: | while ! make ping-elasticsearch &>/dev/null; do echo "Waiting for elasticsearch connection..." sleep 2 done - - name: 🐰 Wait for the message broker to get up + - name: 🐰 Wait for RabbitMQ to get up run: | while ! make ping-rabbitmq &>/dev/null; do echo "Waiting for RabbitMQ connection..." diff --git a/Makefile b/Makefile index a3ea006ee..aa5c306bb 100644 --- a/Makefile +++ b/Makefile @@ -1,100 +1,48 @@ current-dir := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) -.PHONY: build -build: deps start - -.PHONY: deps -deps: composer-install - -# 🐘 Composer -composer-env-file: - @if [ ! -f .env.local ]; then echo '' > .env.local; fi - -.PHONY: composer-install -composer-install: CMD=install - -.PHONY: composer-update -composer-update: CMD=update - -.PHONY: composer-require -composer-require: CMD=require -composer-require: INTERACTIVE=-ti --interactive - -.PHONY: composer-require-module -composer-require-module: CMD=require $(module) -composer-require-module: INTERACTIVE=-ti --interactive - -.PHONY: composer -composer composer-install composer-update composer-require composer-require-module: composer-env-file +composer-install: @docker run --rm $(INTERACTIVE) --volume $(current-dir):/app --user $(id -u):$(id -g) \ - composer:2.3.7 $(CMD) \ + composer:2.6.4 install \ --ignore-platform-reqs \ --no-ansi -.PHONY: reload -reload: composer-env-file - @docker-compose exec php-fpm kill -USR2 1 - @docker-compose exec nginx nginx -s reload - -.PHONY: test -test: composer-env-file +test: docker exec codely-php_ddd_skeleton-mooc_backend-php ./vendor/bin/phpunit --testsuite mooc docker exec codely-php_ddd_skeleton-mooc_backend-php ./vendor/bin/phpunit --testsuite shared docker exec codely-php_ddd_skeleton-mooc_backend-php ./vendor/bin/behat -p mooc_backend --format=progress -v docker exec codely-php_ddd_skeleton-backoffice_backend-php ./vendor/bin/phpunit --testsuite backoffice -.PHONY: static-analysis -static-analysis: composer-env-file +static-analysis: docker exec codely-php_ddd_skeleton-mooc_backend-php ./vendor/bin/psalm -.PHONY: lint lint: docker exec codely-php_ddd_skeleton-mooc_backend-php ./vendor/bin/ecs check -.PHONY: run-tests -run-tests: composer-env-file - mkdir -p build/test_results/phpunit - ./vendor/bin/phpunit --exclude-group='disabled' --log-junit build/test_results/phpunit/junit.xml --testsuite backoffice - ./vendor/bin/phpunit --exclude-group='disabled' --log-junit build/test_results/phpunit/junit.xml --testsuite mooc - ./vendor/bin/phpunit --exclude-group='disabled' --log-junit build/test_results/phpunit/junit.xml --testsuite shared - ./vendor/bin/behat -p mooc_backend --format=progress -v - -# 🐳 Docker Compose -.PHONY: start -start: CMD=up --build -d - -.PHONY: stop -stop: CMD=stop +start: + @if [ ! -f .env.local ]; then echo '' > .env.local; fi + UID=${shell id -u} GID=${shell id -g} docker compose up --build -d + make clean-cache -.PHONY: destroy -destroy: CMD=down +stop: + UID=${shell id -u} GID=${shell id -g} docker compose stop -# Usage: `make doco CMD="ps --services"` -# Usage: `make doco CMD="build --parallel --pull --force-rm --no-cache"` -.PHONY: doco -doco start stop destroy: composer-env-file - UID=${shell id -u} GID=${shell id -g} docker-compose $(CMD) +destroy: + UID=${shell id -u} GID=${shell id -g} docker compose down -.PHONY: rebuild -rebuild: composer-env-file - docker-compose build --pull --force-rm --no-cache - make deps +rebuild: + docker compose build --pull --force-rm --no-cache + make install make start -.PHONY: ping-mysql ping-mysql: @docker exec codely-php_ddd_skeleton-mooc-mysql mysqladmin --user=root --password= --host "127.0.0.1" ping --silent -.PHONY: ping-elasticsearch ping-elasticsearch: @curl -I -XHEAD localhost:9200 -.PHONY: ping-rabbitmq ping-rabbitmq: @docker exec codely-php_ddd_skeleton-rabbitmq rabbitmqctl ping --silent clean-cache: @rm -rf apps/*/*/var - @docker exec codely-php_ddd_skeleton-backoffice_backend-php ./apps/backoffice/backend/bin/console cache:warmup - @docker exec codely-php_ddd_skeleton-backoffice_frontend-php ./apps/backoffice/frontend/bin/console cache:warmup @docker exec codely-php_ddd_skeleton-mooc_backend-php ./apps/mooc/backend/bin/console cache:warmup diff --git a/apps/backoffice/backend/bin/console b/apps/backoffice/backend/bin/console index ac7f81a9a..29bc8b83f 100755 --- a/apps/backoffice/backend/bin/console +++ b/apps/backoffice/backend/bin/console @@ -12,7 +12,7 @@ if (false === in_array(PHP_SAPI, ['cli', 'phpdbg', 'embed'], true)) { set_time_limit(0); -require dirname(__DIR__) . '../../../vendor/autoload.php'; +require dirname(__DIR__) . '/../../../vendor/autoload.php'; if (!class_exists(Application::class)) { throw new RuntimeException('You need to add "symfony/framework-bundle" as a Composer dependency.'); diff --git a/apps/backoffice/backend/public/index.php b/apps/backoffice/backend/public/index.php index 977a86d4b..56a52ea14 100644 --- a/apps/backoffice/backend/public/index.php +++ b/apps/backoffice/backend/public/index.php @@ -16,8 +16,8 @@ if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? $_ENV['TRUSTED_PROXIES'] ?? false) { Request::setTrustedProxies( - explode(',', (string) $trustedProxies), - Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST + explode(',', $trustedProxies), + Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO ); } diff --git a/apps/backoffice/frontend/bin/console b/apps/backoffice/frontend/bin/console index 5e2d7ebf2..d680ab53c 100755 --- a/apps/backoffice/frontend/bin/console +++ b/apps/backoffice/frontend/bin/console @@ -12,7 +12,7 @@ if (false === in_array(PHP_SAPI, ['cli', 'phpdbg', 'embed'], true)) { set_time_limit(0); -require dirname(__DIR__) . '../../../vendor/autoload.php'; +require dirname(__DIR__) . '/../../../vendor/autoload.php'; if (!class_exists(Application::class)) { throw new RuntimeException('You need to add "symfony/framework-bundle" as a Composer dependency.'); diff --git a/apps/backoffice/frontend/public/index.php b/apps/backoffice/frontend/public/index.php index c18f536e7..2b5d9b2d3 100644 --- a/apps/backoffice/frontend/public/index.php +++ b/apps/backoffice/frontend/public/index.php @@ -16,8 +16,8 @@ if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? $_ENV['TRUSTED_PROXIES'] ?? false) { Request::setTrustedProxies( - explode(',', (string) $trustedProxies), - Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST + explode(',', $trustedProxies), + Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO ); } diff --git a/apps/bootstrap.php b/apps/bootstrap.php index cb93ce7f7..6d66dea9d 100644 --- a/apps/bootstrap.php +++ b/apps/bootstrap.php @@ -8,20 +8,7 @@ require $rootPath . '/vendor/autoload.php'; -// Load cached env vars if the .env.local.php file exists -// Run "composer dump-env prod" to create it (requires symfony/flex >=1.2) -if (is_array($env = @include $rootPath . '/.env.local.php')) { - foreach ($env as $k => $v) { - $_ENV[$k] ??= isset($_SERVER[$k]) && str_starts_with($k, 'HTTP_') ? $_SERVER[$k] : $v; - } -} elseif (!class_exists(Dotenv::class)) { - throw new RuntimeException( - 'Please run "composer require symfony/dotenv" to load the ".env" files configuring the application.' - ); -} else { - // load all the .env files - (new Dotenv())->loadEnv($rootPath . '/.env'); -} +(new Dotenv())->loadEnv($rootPath . '/.env'); $_SERVER += $_ENV; $_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = ($_SERVER['APP_ENV'] ?? $_ENV['APP_ENV'] ?? null) ?: 'dev'; diff --git a/apps/mooc/backend/bin/console b/apps/mooc/backend/bin/console index c794905a3..d013ee7a8 100755 --- a/apps/mooc/backend/bin/console +++ b/apps/mooc/backend/bin/console @@ -12,7 +12,7 @@ if (false === in_array(PHP_SAPI, ['cli', 'phpdbg', 'embed'], true)) { set_time_limit(0); -require dirname(__DIR__) . '../../../vendor/autoload.php'; +require dirname(__DIR__) . '/../../../vendor/autoload.php'; if (!class_exists(Application::class)) { throw new RuntimeException('You need to add "symfony/framework-bundle" as a Composer dependency.'); diff --git a/apps/mooc/backend/public/index.php b/apps/mooc/backend/public/index.php index 0d1e3eae8..4269b3810 100644 --- a/apps/mooc/backend/public/index.php +++ b/apps/mooc/backend/public/index.php @@ -16,8 +16,8 @@ if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? $_ENV['TRUSTED_PROXIES'] ?? false) { Request::setTrustedProxies( - explode(',', (string) $trustedProxies), - Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST + explode(',', $trustedProxies), + Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO ); } diff --git a/ecs.php b/ecs.php index 437848d5d..62c8f5208 100644 --- a/ecs.php +++ b/ecs.php @@ -132,6 +132,10 @@ __DIR__ . '/apps/backoffice/frontend/src/BackofficeFrontendKernel.php', __DIR__ . '/apps/mooc/backend/src/MoocBackendKernel.php', __DIR__ . '/src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php', - ] + ], + __DIR__ . '/apps/backoffice/backend/var', + __DIR__ . '/apps/backoffice/frontend/var', + __DIR__ . '/apps/mooc/backend/var', + __DIR__ . '/apps/mooc/frontend/var', ]); }; diff --git a/psalm.xml b/psalm.xml index 5eea39ada..123c91c54 100644 --- a/psalm.xml +++ b/psalm.xml @@ -9,13 +9,11 @@ findUnusedCode="false" > - - - - + + diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php index bf12fc093..c6afe08e1 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php @@ -7,6 +7,7 @@ use AMQPEnvelope; use AMQPQueue; use AMQPQueueException; +use CodelyTv\Shared\Domain\Bus\Event\DomainEventSubscriber; use CodelyTv\Shared\Infrastructure\Bus\Event\DomainEventJsonDeserializer; use Throwable; @@ -22,7 +23,7 @@ public function __construct( private int $maxRetries ) {} - public function consume(callable $subscriber, string $queueName): void + public function consume(callable|DomainEventSubscriber $subscriber, string $queueName): void { try { $this->connection->queue($queueName)->consume($this->consumer($subscriber)); diff --git a/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBus.php b/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBus.php index d01b9e105..e08643fcd 100644 --- a/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBus.php +++ b/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBus.php @@ -14,9 +14,9 @@ use Symfony\Component\Messenger\Middleware\HandleMessageMiddleware; use Symfony\Component\Messenger\Stamp\HandledStamp; -final class InMemorySymfonyQueryBus implements QueryBus +final readonly class InMemorySymfonyQueryBus implements QueryBus { - private readonly MessageBus $bus; + private MessageBus $bus; public function __construct(iterable $queryHandlers) { diff --git a/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php b/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php index 54d0e3a45..27bb36193 100644 --- a/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php +++ b/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php @@ -15,6 +15,7 @@ use Mockery\Adapter\Phpunit\MockeryTestCase; use Mockery\Matcher\MatcherAbstract; use Mockery\MockInterface; +use Throwable; abstract class UnitTestCase extends MockeryTestCase { @@ -78,6 +79,7 @@ protected function assertAskResponse(Response $expected, Query $query, callable $this->assertEquals($expected, $actual); } + /** @param class-string $expectedErrorClass */ protected function assertAskThrowsException(string $expectedErrorClass, Query $query, callable $queryHandler): void { $this->expectException($expectedErrorClass); From 9c902829ad942a793fc6c97f609c98a20221a06a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Tue, 3 Oct 2023 12:31:22 +0200 Subject: [PATCH 19/40] chore: use native php enum type (#357) --- .../Create/CreateVideoCommandHandler.php | 2 +- .../Find/VideoResponseConverter.php | 2 +- src/Mooc/Videos/Domain/Video.php | 2 +- src/Mooc/Videos/Domain/VideoType.php | 18 +--- src/Shared/Domain/Criteria/Filter.php | 4 +- src/Shared/Domain/Criteria/FilterOperator.php | 30 ++----- src/Shared/Domain/Criteria/Order.php | 8 +- src/Shared/Domain/Criteria/OrderType.php | 23 ++--- src/Shared/Domain/ValueObject/Enum.php | 83 ------------------- .../Doctrine/DoctrineCriteriaConverter.php | 2 +- .../Elasticsearch/ElasticQueryGenerator.php | 6 +- .../ElasticsearchCriteriaConverter.php | 2 +- tests/Shared/Domain/Criteria/FilterMother.php | 16 +++- tests/Shared/Domain/Criteria/OrderMother.php | 8 +- 14 files changed, 51 insertions(+), 155 deletions(-) delete mode 100644 src/Shared/Domain/ValueObject/Enum.php diff --git a/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php b/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php index 6cabf783b..608900a2e 100644 --- a/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php +++ b/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php @@ -18,7 +18,7 @@ public function __construct(private VideoCreator $creator) {} public function __invoke(CreateVideoCommand $command): void { $id = new VideoId($command->id()); - $type = new VideoType($command->type()); + $type = VideoType::from($command->type()); $title = new VideoTitle($command->title()); $url = new VideoUrl($command->url()); $courseId = new CourseId($command->courseId()); diff --git a/src/Mooc/Videos/Application/Find/VideoResponseConverter.php b/src/Mooc/Videos/Application/Find/VideoResponseConverter.php index 6ee2b7b5f..23d890eb8 100644 --- a/src/Mooc/Videos/Application/Find/VideoResponseConverter.php +++ b/src/Mooc/Videos/Application/Find/VideoResponseConverter.php @@ -12,7 +12,7 @@ public function __invoke(Video $video): VideoResponse { return new VideoResponse( $video->id()->value(), - $video->type()->value(), + $video->type()->value, $video->title()->value(), $video->url()->value(), $video->courseId()->value() diff --git a/src/Mooc/Videos/Domain/Video.php b/src/Mooc/Videos/Domain/Video.php index a8626df49..567d7231a 100644 --- a/src/Mooc/Videos/Domain/Video.php +++ b/src/Mooc/Videos/Domain/Video.php @@ -30,7 +30,7 @@ public static function create( $video->record( new VideoCreatedDomainEvent( $id->value(), - $type->value(), + $type->value, $title->value(), $url->value(), $courseId->value() diff --git a/src/Mooc/Videos/Domain/VideoType.php b/src/Mooc/Videos/Domain/VideoType.php index 3b20ed338..7560b64cf 100644 --- a/src/Mooc/Videos/Domain/VideoType.php +++ b/src/Mooc/Videos/Domain/VideoType.php @@ -4,20 +4,8 @@ namespace CodelyTv\Mooc\Videos\Domain; -use CodelyTv\Shared\Domain\ValueObject\Enum; -use InvalidArgumentException; - -/** - * @method static VideoType screencast() - * @method static VideoType interview() - */ -final class VideoType extends Enum +enum VideoType: string { - public const SCREENCAST = 'screencast'; - public const INTERVIEW = 'interview'; - - protected function throwExceptionForInvalidValue($value): never - { - throw new InvalidArgumentException(sprintf('The <%s> value is not a valid video type', $value)); - } + case SCREENCAST = 'screencast'; + case INTERVIEW = 'interview'; } diff --git a/src/Shared/Domain/Criteria/Filter.php b/src/Shared/Domain/Criteria/Filter.php index 48c61445a..05afbb66c 100644 --- a/src/Shared/Domain/Criteria/Filter.php +++ b/src/Shared/Domain/Criteria/Filter.php @@ -16,7 +16,7 @@ public static function fromValues(array $values): self { return new self( new FilterField($values['field']), - new FilterOperator($values['operator']), + FilterOperator::from($values['operator']), new FilterValue($values['value']) ); } @@ -38,6 +38,6 @@ public function value(): FilterValue public function serialize(): string { - return sprintf('%s.%s.%s', $this->field->value(), $this->operator->value(), $this->value->value()); + return sprintf('%s.%s.%s', $this->field->value(), $this->operator->value, $this->value->value()); } } diff --git a/src/Shared/Domain/Criteria/FilterOperator.php b/src/Shared/Domain/Criteria/FilterOperator.php index 8a888019a..5f6f151ac 100644 --- a/src/Shared/Domain/Criteria/FilterOperator.php +++ b/src/Shared/Domain/Criteria/FilterOperator.php @@ -4,31 +4,17 @@ namespace CodelyTv\Shared\Domain\Criteria; -use CodelyTv\Shared\Domain\ValueObject\Enum; -use InvalidArgumentException; - -/** - * @method static FilterOperator gt() - * @method static FilterOperator lt() - * @method static FilterOperator like() - */ -final class FilterOperator extends Enum +enum FilterOperator: string { - public const EQUAL = '='; - public const NOT_EQUAL = '!='; - public const GT = '>'; - public const LT = '<'; - public const CONTAINS = 'CONTAINS'; - public const NOT_CONTAINS = 'NOT_CONTAINS'; - private static array $containing = [self::CONTAINS, self::NOT_CONTAINS]; + case EQUAL = '='; + case NOT_EQUAL = '!='; + case GT = '>'; + case LT = '<'; + case CONTAINS = 'CONTAINS'; + case NOT_CONTAINS = 'NOT_CONTAINS'; public function isContaining(): bool { - return in_array($this->value(), self::$containing, true); - } - - protected function throwExceptionForInvalidValue($value): never - { - throw new InvalidArgumentException(sprintf('The filter <%s> is invalid', $value)); + return in_array($this->value, [self::CONTAINS->value, self::NOT_CONTAINS->value], true); } } diff --git a/src/Shared/Domain/Criteria/Order.php b/src/Shared/Domain/Criteria/Order.php index c86595764..331571c9a 100644 --- a/src/Shared/Domain/Criteria/Order.php +++ b/src/Shared/Domain/Criteria/Order.php @@ -10,17 +10,17 @@ public function __construct(private OrderBy $orderBy, private OrderType $orderTy public static function createDesc(OrderBy $orderBy): self { - return new self($orderBy, OrderType::desc()); + return new self($orderBy, OrderType::DESC); } public static function fromValues(?string $orderBy, ?string $order): self { - return $orderBy === null ? self::none() : new self(new OrderBy($orderBy), new OrderType($order)); + return $orderBy === null ? self::none() : new self(new OrderBy($orderBy), OrderType::from($order)); } public static function none(): self { - return new self(new OrderBy(''), OrderType::none()); + return new self(new OrderBy(''), OrderType::NONE); } public function orderBy(): OrderBy @@ -40,6 +40,6 @@ public function isNone(): bool public function serialize(): string { - return sprintf('%s.%s', $this->orderBy->value(), $this->orderType->value()); + return sprintf('%s.%s', $this->orderBy->value(), $this->orderType->value); } } diff --git a/src/Shared/Domain/Criteria/OrderType.php b/src/Shared/Domain/Criteria/OrderType.php index 50f2f5213..2ce357a95 100644 --- a/src/Shared/Domain/Criteria/OrderType.php +++ b/src/Shared/Domain/Criteria/OrderType.php @@ -4,27 +4,14 @@ namespace CodelyTv\Shared\Domain\Criteria; -use CodelyTv\Shared\Domain\ValueObject\Enum; -use InvalidArgumentException; - -/** - * @method static OrderType asc() - * @method static OrderType desc() - * @method static OrderType none() - */ -final class OrderType extends Enum +enum OrderType: string { - public const ASC = 'asc'; - public const DESC = 'desc'; - public const NONE = 'none'; + case ASC = 'asc'; + case DESC = 'desc'; + case NONE = 'none'; public function isNone(): bool { - return $this->equals(self::none()); - } - - protected function throwExceptionForInvalidValue($value): never - { - throw new InvalidArgumentException($value); + return $this->value === self::NONE->value; } } diff --git a/src/Shared/Domain/ValueObject/Enum.php b/src/Shared/Domain/ValueObject/Enum.php deleted file mode 100644 index 76825cecf..000000000 --- a/src/Shared/Domain/ValueObject/Enum.php +++ /dev/null @@ -1,83 +0,0 @@ -ensureIsBetweenAcceptedValues($value); - } - - abstract protected function throwExceptionForInvalidValue($value); - - public static function __callStatic(string $name, $args) - { - return new static(self::values()[$name]); - } - - final public static function fromString(string $value): self - { - return new static($value); - } - - final public static function values(): array - { - $class = static::class; - - if (!isset(self::$cache[$class])) { - $reflected = new ReflectionClass($class); - self::$cache[$class] = reindex(self::keysFormatter(), $reflected->getConstants()); - } - - return self::$cache[$class]; - } - - final public static function randomValue() - { - return self::values()[array_rand(self::values())]; - } - - final public static function random(): static - { - return new static(self::randomValue()); - } - - private static function keysFormatter(): callable - { - return static fn ($unused, string $key): string => Utils::toCamelCase(strtolower($key)); - } - - final public function value() - { - return $this->value; - } - - final public function equals(self $other): bool - { - return $other->value() === $this->value(); - } - - public function __toString(): string - { - return (string) $this->value(); - } - - private function ensureIsBetweenAcceptedValues($value): void - { - if (!in_array($value, static::values(), true)) { - $this->throwExceptionForInvalidValue($value); - } - } -} diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php index fd2930ab9..ca4e91d24 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php @@ -60,7 +60,7 @@ private function buildComparison(): callable ? $this->hydrate($field, $filter->value()->value()) : $filter->value()->value(); - return new Comparison($field, $filter->operator()->value(), $value); + return new Comparison($field, $filter->operator()->value, $value); }; } diff --git a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php index 611585223..55c34782d 100644 --- a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php +++ b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php @@ -6,7 +6,6 @@ use CodelyTv\Shared\Domain\Criteria\Filter; use CodelyTv\Shared\Domain\Criteria\FilterOperator; -use Exception; final class ElasticQueryGenerator { @@ -38,17 +37,16 @@ public function __invoke(array $query, Filter $filter): array private function typeFor(FilterOperator $operator): string { - return in_array($operator->value(), self::$mustNotFields, true) ? self::MUST_NOT_TYPE : self::MUST_TYPE; + return in_array($operator->value, self::$mustNotFields, true) ? self::MUST_NOT_TYPE : self::MUST_TYPE; } private function termLevelFor(FilterOperator $operator): string { - return match ($operator->value()) { + return match ($operator) { FilterOperator::EQUAL => self::TERM_TERM, FilterOperator::NOT_EQUAL => '!=', FilterOperator::GT, FilterOperator::LT => self::TERM_RANGE, FilterOperator::CONTAINS, FilterOperator::NOT_CONTAINS => self::TERM_WILDCARD, - default => throw new Exception("Unexpected match value {$operator->value()}"), }; } } diff --git a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchCriteriaConverter.php b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchCriteriaConverter.php index b541f941e..d215a7e33 100644 --- a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchCriteriaConverter.php +++ b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchCriteriaConverter.php @@ -42,7 +42,7 @@ private function formatSort(Criteria $criteria): array return [ 'sort' => [ $order->orderBy()->value() => [ - 'order' => $order->orderType()->value(), + 'order' => $order->orderType()->value, ], ], ]; diff --git a/tests/Shared/Domain/Criteria/FilterMother.php b/tests/Shared/Domain/Criteria/FilterMother.php index 9f3a6fcc5..40473422e 100644 --- a/tests/Shared/Domain/Criteria/FilterMother.php +++ b/tests/Shared/Domain/Criteria/FilterMother.php @@ -8,6 +8,7 @@ use CodelyTv\Shared\Domain\Criteria\FilterField; use CodelyTv\Shared\Domain\Criteria\FilterOperator; use CodelyTv\Shared\Domain\Criteria\FilterValue; +use CodelyTv\Tests\Shared\Domain\RandomElementPicker; final class FilterMother { @@ -18,7 +19,7 @@ public static function create( ): Filter { return new Filter( $field ?? FilterFieldMother::create(), - $operator ?? FilterOperator::random(), + $operator ?? self::randomOperator(), $value ?? FilterValueMother::create() ); } @@ -28,4 +29,17 @@ public static function fromValues(array $values): Filter { return Filter::fromValues($values); } + + + private static function randomOperator(): FilterOperator + { + return RandomElementPicker::from( + FilterOperator::EQUAL, + FilterOperator::NOT_EQUAL, + FilterOperator::GT, + FilterOperator::LT, + FilterOperator::CONTAINS, + FilterOperator::NOT_CONTAINS + ); + } } diff --git a/tests/Shared/Domain/Criteria/OrderMother.php b/tests/Shared/Domain/Criteria/OrderMother.php index 10e791440..81c606e07 100644 --- a/tests/Shared/Domain/Criteria/OrderMother.php +++ b/tests/Shared/Domain/Criteria/OrderMother.php @@ -7,16 +7,22 @@ use CodelyTv\Shared\Domain\Criteria\Order; use CodelyTv\Shared\Domain\Criteria\OrderBy; use CodelyTv\Shared\Domain\Criteria\OrderType; +use CodelyTv\Tests\Shared\Domain\RandomElementPicker; final class OrderMother { public static function create(?OrderBy $orderBy = null, ?OrderType $orderType = null): Order { - return new Order($orderBy ?? OrderByMother::create(), $orderType ?? OrderType::random()); + return new Order($orderBy ?? OrderByMother::create(), $orderType ?? self::randomOrderType()); } public static function none(): Order { return Order::none(); } + + private static function randomOrderType(): Order + { + return RandomElementPicker::from(OrderType::ASC, OrderType::DESC, OrderType::NONE); + } } From 2a84341cd985876cca132faa40e821e5825b7190 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Tue, 3 Oct 2023 14:50:16 +0200 Subject: [PATCH 20/40] chore: use psalm level 3 (#358) * feat: add mockery psalm plugin * chore(psalm): disable PossiblyUndefinedMethod in test Since are false positive errors * chore(psalm): add symfony plugin * chore(psalm): upgrade to level 3 --- README.md | 2 +- .../Courses/CoursesGetController.php | 2 +- .../ConsumeRabbitMqDomainEventsCommand.php | 2 +- ...SupervisorRabbitMqConsumerFilesCommand.php | 2 +- composer.json | 4 +- composer.lock | 197 +++++++++++++++++- psalm.xml | 55 ++++- rector.php | 11 +- .../Authenticate/UserAuthenticator.php | 8 +- .../AllBackofficeCoursesSearcher.php | 2 +- .../BackofficeCoursesByCriteriaSearcher.php | 2 +- ...lasticsearchBackofficeCourseRepository.php | 2 +- .../CoursesCounter/Domain/CoursesCounter.php | 2 +- .../Persistence/Doctrine/CourseIdsType.php | 4 +- .../Doctrine/DbalTypesSearcher.php | 10 +- .../Doctrine/DoctrinePrefixesSearcher.php | 6 +- .../Videos/Application/Find/VideoFinder.php | 3 +- src/Shared/Domain/Criteria/Criteria.php | 4 +- src/Shared/Domain/Criteria/Filters.php | 8 +- src/Shared/Domain/Criteria/Order.php | 5 +- src/Shared/Domain/Utils.php | 5 +- .../Bus/CallableFirstParameterExtractor.php | 4 +- .../Bus/Event/DomainEventMapping.php | 2 +- .../Event/DomainEventSubscriberLocator.php | 2 +- .../RabbitMq/RabbitMqQueueNameFormatter.php | 2 +- .../Dbal/DbalCustomTypesRegistrar.php | 6 +- .../Doctrine/DoctrineRepository.php | 10 + .../Elasticsearch/ElasticsearchRepository.php | 2 +- .../Symfony/AddJsonBodyToRequestListener.php | 2 +- .../Domain/CoursesCounterMother.php | 4 +- .../Infrastructure/Behat/ApiContext.php | 4 + .../Event/RabbitMq/RabbitMqEventBusTest.php | 2 +- .../Doctrine/MySqlDatabaseCleaner.php | 2 +- .../Shared/Infrastructure/Mink/MinkHelper.php | 2 +- .../Mink/MinkSessionRequestHelper.php | 2 +- .../AggregateRootArraySimilarComparator.php | 2 +- .../DomainEventArraySimilarComparator.php | 2 +- .../PhpUnit/InfrastructureTestCase.php | 2 +- 38 files changed, 326 insertions(+), 62 deletions(-) diff --git a/README.md b/README.md index 0f6b4a5a0..ade42f645 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@

codely.tv CodelyTV Courses - Symfony 5.0 + Symfony 6 CI pipeline status

diff --git a/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php b/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php index 545846fc5..428b3b35e 100644 --- a/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php +++ b/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php @@ -37,7 +37,7 @@ public function __invoke(Request $request): JsonResponse return new JsonResponse( map( - fn (BackofficeCourseResponse $course) => [ + fn (BackofficeCourseResponse $course): array => [ 'id' => $course->id(), 'name' => $course->name(), 'duration' => $course->duration(), diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php index 125a50a24..802f79b22 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php @@ -36,7 +36,7 @@ protected function configure(): void protected function execute(InputInterface $input, OutputInterface $output): int { - $queueName = (string) $input->getArgument('queue'); + $queueName = $input->getArgument('queue'); $eventsToProcess = (int) $input->getArgument('quantity'); repeat($this->consumer($queueName), $eventsToProcess); diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php index 5883b60db..9bd14493a 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php @@ -35,7 +35,7 @@ protected function configure(): void protected function execute(InputInterface $input, OutputInterface $output): int { - $path = (string) $input->getArgument('command-path'); + $path = $input->getArgument('command-path'); each($this->configCreator($path), $this->locator->all()); diff --git a/composer.json b/composer.json index 1f498b9b6..fcbc6d631 100644 --- a/composer.json +++ b/composer.json @@ -54,7 +54,9 @@ "symplify/easy-coding-standard": "^12.0", "vimeo/psalm": "^5.15", - "rector/rector": "^0.18.4" + "rector/rector": "^0.18.4", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-symfony": "^5.0" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index 4cb195c0d..c4951eef4 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": "6a083c6e70896a6fe633c8afc29cb888", + "content-hash": "5ca0c05883f15a06ec830187f97a5ba9", "packages": [ { "name": "brick/math", @@ -6062,6 +6062,79 @@ }, "time": "2022-03-30T09:27:43+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.1.0", @@ -7860,6 +7933,128 @@ ], "time": "2023-09-19T05:39:22+00:00" }, + { + "name": "psalm/plugin-mockery", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/psalm/psalm-plugin-mockery.git", + "reference": "876247d15f91df08240d00dac69c5135b6689283" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/psalm/psalm-plugin-mockery/zipball/876247d15f91df08240d00dac69c5135b6689283", + "reference": "876247d15f91df08240d00dac69c5135b6689283", + "shasum": "" + }, + "require": { + "composer/package-versions-deprecated": "^1.10", + "composer/semver": "^1.4 || ^2.0 || ^3.0", + "mockery/mockery": "^1.0", + "php": "~7.4 || ~8.0 || ~8.1 || ~8.2", + "vimeo/psalm": "dev-master || ^5.0@rc || ^5.0" + }, + "require-dev": { + "codeception/codeception": "^4.1.9", + "phpunit/phpunit": "^9.0", + "squizlabs/php_codesniffer": "^3.3.1", + "weirdan/codeception-psalm-module": "^0.13.1" + }, + "type": "psalm-plugin", + "extra": { + "psalm": { + "pluginClass": "Psalm\\MockeryPlugin\\Plugin" + } + }, + "autoload": { + "psr-4": { + "Psalm\\MockeryPlugin\\": [ + "." + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Brown", + "email": "github@muglug.com" + } + ], + "description": "Psalm plugin for Mockery", + "support": { + "issues": "https://github.com/psalm/psalm-plugin-mockery/issues", + "source": "https://github.com/psalm/psalm-plugin-mockery/tree/1.1.0" + }, + "time": "2022-11-25T07:16:18+00:00" + }, + { + "name": "psalm/plugin-symfony", + "version": "v5.0.3", + "source": { + "type": "git", + "url": "https://github.com/psalm/psalm-plugin-symfony.git", + "reference": "a6cef9c701686d17d4254b544d05345e9d3e0b88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/psalm/psalm-plugin-symfony/zipball/a6cef9c701686d17d4254b544d05345e9d3e0b88", + "reference": "a6cef9c701686d17d4254b544d05345e9d3e0b88", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "php": "^7.4 || ^8.0", + "symfony/framework-bundle": "^5.0 || ^6.0", + "vimeo/psalm": "^5.1" + }, + "require-dev": { + "doctrine/annotations": "^1.8|^2", + "doctrine/orm": "^2.9", + "phpunit/phpunit": "~7.5 || ~9.5", + "symfony/cache-contracts": "^1.0 || ^2.0", + "symfony/console": "*", + "symfony/form": "^5.0 || ^6.0", + "symfony/messenger": "^5.0 || ^6.0", + "symfony/security-guard": "*", + "symfony/serializer": "^5.0 || ^6.0", + "symfony/validator": "*", + "twig/twig": "^2.10 || ^3.0", + "weirdan/codeception-psalm-module": "dev-master" + }, + "suggest": { + "weirdan/doctrine-psalm-plugin": "If Doctrine is used, it is recommended install this plugin" + }, + "type": "psalm-plugin", + "extra": { + "psalm": { + "pluginClass": "Psalm\\SymfonyPsalmPlugin\\Plugin" + } + }, + "autoload": { + "psr-4": { + "Psalm\\SymfonyPsalmPlugin\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Farhad Safarov", + "email": "farhad.safarov@gmail.com" + } + ], + "description": "Psalm Plugin for Symfony", + "support": { + "issues": "https://github.com/psalm/psalm-plugin-symfony/issues", + "source": "https://github.com/psalm/psalm-plugin-symfony/tree/v5.0.3" + }, + "time": "2023-04-21T15:40:12+00:00" + }, { "name": "rector/rector", "version": "0.18.4", diff --git a/psalm.xml b/psalm.xml index 123c91c54..955503769 100644 --- a/psalm.xml +++ b/psalm.xml @@ -3,23 +3,56 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://getpsalm.org/schema/config" xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd" - errorLevel="4" + errorLevel="3" resolveFromConfigFile="true" findUnusedBaselineEntry="false" findUnusedCode="false" > - - - + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/rector.php b/rector.php index 3ae4afdf7..7ec25f27b 100644 --- a/rector.php +++ b/rector.php @@ -4,6 +4,7 @@ use Rector\Config\RectorConfig; use Rector\Set\ValueObject\LevelSetList; +use Rector\Set\ValueObject\SetList; return static function (RectorConfig $rectorConfig): void { $rectorConfig->paths([ @@ -13,6 +14,14 @@ ]); $rectorConfig->sets([ - LevelSetList::UP_TO_PHP_82 + LevelSetList::UP_TO_PHP_82, + SetList::TYPE_DECLARATION + ]); + + $rectorConfig->skip([ + __DIR__ . '/apps/backoffice/backend/var', + __DIR__ . '/apps/backoffice/frontend/var', + __DIR__ . '/apps/mooc/backend/var', + __DIR__ . '/apps/mooc/frontend/var', ]); }; diff --git a/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php b/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php index 2a6e438fb..149b30029 100644 --- a/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php +++ b/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php @@ -19,15 +19,11 @@ public function authenticate(AuthUsername $username, AuthPassword $password): vo { $auth = $this->repository->search($username); - $this->ensureUserExist($auth, $username); - $this->ensureCredentialsAreValid($auth, $password); - } - - private function ensureUserExist(?AuthUser $auth, AuthUsername $username): void - { if ($auth === null) { throw new InvalidAuthUsername($username); } + + $this->ensureCredentialsAreValid($auth, $password); } private function ensureCredentialsAreValid(AuthUser $auth, AuthPassword $password): void diff --git a/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php b/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php index f602c4a69..8cae9cc1d 100644 --- a/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php +++ b/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php @@ -22,7 +22,7 @@ public function searchAll(): BackofficeCoursesResponse private function toResponse(): callable { - return static fn (BackofficeCourse $course) => new BackofficeCourseResponse( + return static fn (BackofficeCourse $course): BackofficeCourseResponse => new BackofficeCourseResponse( $course->id(), $course->name(), $course->duration() diff --git a/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php b/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php index 70f32ebf6..07e09e980 100644 --- a/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php +++ b/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php @@ -27,7 +27,7 @@ public function search(Filters $filters, Order $order, ?int $limit, ?int $offset private function toResponse(): callable { - return static fn (BackofficeCourse $course) => new BackofficeCourseResponse( + return static fn (BackofficeCourse $course): BackofficeCourseResponse => new BackofficeCourseResponse( $course->id(), $course->name(), $course->duration() diff --git a/src/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepository.php b/src/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepository.php index 7ffe2b7ea..be8074d61 100644 --- a/src/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepository.php +++ b/src/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepository.php @@ -35,6 +35,6 @@ protected function aggregateName(): string private function toCourse(): callable { - return static fn (array $primitives) => BackofficeCourse::fromPrimitives($primitives); + return static fn (array $primitives): BackofficeCourse => BackofficeCourse::fromPrimitives($primitives); } } diff --git a/src/Mooc/CoursesCounter/Domain/CoursesCounter.php b/src/Mooc/CoursesCounter/Domain/CoursesCounter.php index c4fbaf355..0a6ed0d11 100644 --- a/src/Mooc/CoursesCounter/Domain/CoursesCounter.php +++ b/src/Mooc/CoursesCounter/Domain/CoursesCounter.php @@ -58,6 +58,6 @@ public function hasIncremented(CourseId $courseId): bool private function courseIdComparator(CourseId $courseId): callable { - return static fn (CourseId $other) => $courseId->equals($other); + return static fn (CourseId $other): bool => $courseId->equals($other); } } diff --git a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php index 934a9986a..b618ad93d 100644 --- a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php +++ b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php @@ -25,13 +25,13 @@ public function getName(): string public function convertToDatabaseValue($value, AbstractPlatform $platform) { - return parent::convertToDatabaseValue(map(fn (CourseId $id) => $id->value(), $value), $platform); + return parent::convertToDatabaseValue(map(fn (CourseId $id): string => $id->value(), $value), $platform); } public function convertToPHPValue($value, AbstractPlatform $platform) { $scalars = parent::convertToPHPValue($value, $platform); - return map(fn (string $value) => new CourseId($value), $scalars); + return map(fn (string $value): CourseId => new CourseId($value), $scalars); } } diff --git a/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php b/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php index 1be475ed2..e37b0efb9 100644 --- a/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php +++ b/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php @@ -25,7 +25,7 @@ public static function inPath(string $path, string $contextName): array private static function modulesInPath(string $path): array { return filter( - static fn (string $possibleModule) => !in_array($possibleModule, ['.', '..'], true), + static fn (string $possibleModule): bool => !in_array($possibleModule, ['.', '..'], true), scandir($path) ); } @@ -44,17 +44,17 @@ static function ($unused, string $module) use ($path) { private static function isExistingDbalPath(): callable { - return static fn (string $path) => !empty($path); + return static fn (string $path): bool => !empty($path); } private static function dbalClassesSearcher(string $contextName): callable { - return static function (array $totalNamespaces, string $path) use ($contextName) { + return static function (array $totalNamespaces, string $path) use ($contextName): array { $possibleFiles = scandir($path); - $files = filter(static fn ($file) => Utils::endsWith('Type.php', $file), $possibleFiles); + $files = filter(static fn ($file): bool => Utils::endsWith('Type.php', $file), $possibleFiles); $namespaces = map( - static function (string $file) use ($path, $contextName) { + static function (string $file) use ($path, $contextName): string { $fullPath = "$path/$file"; $splittedPath = explode("/src/$contextName/", $fullPath); diff --git a/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php b/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php index cacc676ed..6e66ebc20 100644 --- a/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php +++ b/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php @@ -23,7 +23,7 @@ public static function inPath(string $path, string $baseNamespace): array private static function modulesInPath(string $path): array { return filter( - static fn (string $possibleModule) => !in_array($possibleModule, ['.', '..'], true), + static fn (string $possibleModule): bool => !in_array($possibleModule, ['.', '..'], true), scandir($path) ); } @@ -42,11 +42,11 @@ static function ($unused, string $module) use ($path) { private static function isExistingMappingPath(): callable { - return static fn (string $path) => !empty($path); + return static fn (string $path): bool => !empty($path); } private static function namespaceFormatter(string $baseNamespace): callable { - return static fn (string $path, string $module) => "$baseNamespace\\$module\Domain"; + return static fn (string $path, string $module): string => "$baseNamespace\\$module\Domain"; } } diff --git a/src/Mooc/Videos/Application/Find/VideoFinder.php b/src/Mooc/Videos/Application/Find/VideoFinder.php index 6f99ef280..4e53fb8f7 100644 --- a/src/Mooc/Videos/Application/Find/VideoFinder.php +++ b/src/Mooc/Videos/Application/Find/VideoFinder.php @@ -4,6 +4,7 @@ namespace CodelyTv\Mooc\Videos\Application\Find; +use CodelyTv\Mooc\Videos\Domain\Video; use CodelyTv\Mooc\Videos\Domain\VideoFinder as DomainVideoFinder; use CodelyTv\Mooc\Videos\Domain\VideoId; use CodelyTv\Mooc\Videos\Domain\VideoRepository; @@ -17,7 +18,7 @@ public function __construct(VideoRepository $repository) $this->finder = new DomainVideoFinder($repository); } - public function __invoke(VideoId $id) + public function __invoke(VideoId $id): Video { return $this->finder->__invoke($id); } diff --git a/src/Shared/Domain/Criteria/Criteria.php b/src/Shared/Domain/Criteria/Criteria.php index 690b78cff..a1d7a85d9 100644 --- a/src/Shared/Domain/Criteria/Criteria.php +++ b/src/Shared/Domain/Criteria/Criteria.php @@ -54,8 +54,8 @@ public function serialize(): string '%s~~%s~~%s~~%s', $this->filters->serialize(), $this->order->serialize(), - $this->offset, - $this->limit + $this->offset ?? 'none', + $this->limit ?? 'none' ); } } diff --git a/src/Shared/Domain/Criteria/Filters.php b/src/Shared/Domain/Criteria/Filters.php index 56a6312d8..04af22fac 100644 --- a/src/Shared/Domain/Criteria/Filters.php +++ b/src/Shared/Domain/Criteria/Filters.php @@ -17,7 +17,7 @@ public static function fromValues(array $values): self private static function filterBuilder(): callable { - return fn (array $values) => Filter::fromValues($values); + return fn (array $values): Filter => Filter::fromValues($values); } public function add(Filter $filter): self @@ -33,7 +33,11 @@ public function filters(): array public function serialize(): string { return reduce( - static fn (string $accumulate, Filter $filter) => sprintf('%s^%s', $accumulate, $filter->serialize()), + static fn (string $accumulate, Filter $filter): string => sprintf( + '%s^%s', + $accumulate, + $filter->serialize() + ), $this->items(), '' ); diff --git a/src/Shared/Domain/Criteria/Order.php b/src/Shared/Domain/Criteria/Order.php index 331571c9a..afcc3303f 100644 --- a/src/Shared/Domain/Criteria/Order.php +++ b/src/Shared/Domain/Criteria/Order.php @@ -15,7 +15,10 @@ public static function createDesc(OrderBy $orderBy): self public static function fromValues(?string $orderBy, ?string $order): self { - return $orderBy === null ? self::none() : new self(new OrderBy($orderBy), OrderType::from($order)); + return ($orderBy === null || $order === null) ? self::none() : new self( + new OrderBy($orderBy), + OrderType::from($order) + ); } public static function none(): self diff --git a/src/Shared/Domain/Utils.php b/src/Shared/Domain/Utils.php index bdb8a9ef8..c7825a25b 100644 --- a/src/Shared/Domain/Utils.php +++ b/src/Shared/Domain/Utils.php @@ -75,7 +75,10 @@ public static function dot(array $array, string $prepend = ''): array public static function filesIn(string $path, string $fileType): array { - return filter(static fn (string $possibleModule) => strstr($possibleModule, $fileType), scandir($path)); + return filter( + static fn (string $possibleModule): false|string => strstr($possibleModule, $fileType), + scandir($path) + ); } public static function extractClassName(object $object): string diff --git a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php index bac6860bb..4db50eb2d 100644 --- a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php +++ b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php @@ -33,7 +33,7 @@ private static function classExtractor(self $parameterExtractor): callable private static function pipedCallablesReducer(): callable { - return static function ($subscribers, DomainEventSubscriber $subscriber): array { + return static function (array $subscribers, DomainEventSubscriber $subscriber): array { $subscribedEvents = $subscriber::subscribedTo(); foreach ($subscribedEvents as $subscribedEvent) { @@ -46,7 +46,7 @@ private static function pipedCallablesReducer(): callable private static function unflatten(): callable { - return static fn ($value) => [$value]; + return static fn ($value): array => [$value]; } public function extract($class): ?string diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php b/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php index 481da1326..39b8057d9 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php @@ -30,7 +30,7 @@ public function for(string $name) private function eventsExtractor(): callable { - return fn (array $mapping, DomainEventSubscriber $subscriber) => array_merge( + return fn (array $mapping, DomainEventSubscriber $subscriber): array => array_merge( $mapping, reindex($this->eventNameExtractor(), $subscriber::subscribedTo()) ); diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php b/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php index be6230573..9dabe2ef4 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php @@ -31,7 +31,7 @@ public function allSubscribedTo(string $eventClass): array public function withRabbitMqQueueNamed(string $queueName): callable|DomainEventSubscriber { $subscriber = search( - static fn (DomainEventSubscriber $subscriber) => RabbitMqQueueNameFormatter::format($subscriber) === + static fn (DomainEventSubscriber $subscriber): bool => RabbitMqQueueNameFormatter::format($subscriber) === $queueName, $this->mapping ); diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqQueueNameFormatter.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqQueueNameFormatter.php index e53ac7bb1..0e648c280 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqQueueNameFormatter.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqQueueNameFormatter.php @@ -49,6 +49,6 @@ public static function shortFormat(DomainEventSubscriber $subscriber): string private static function toSnakeCase(): callable { - return static fn (string $text) => Utils::toSnakeCase($text); + return static fn (string $text): string => Utils::toSnakeCase($text); } } diff --git a/src/Shared/Infrastructure/Doctrine/Dbal/DbalCustomTypesRegistrar.php b/src/Shared/Infrastructure/Doctrine/Dbal/DbalCustomTypesRegistrar.php index 70c77eeb9..c552cf7e7 100644 --- a/src/Shared/Infrastructure/Doctrine/Dbal/DbalCustomTypesRegistrar.php +++ b/src/Shared/Infrastructure/Doctrine/Dbal/DbalCustomTypesRegistrar.php @@ -23,8 +23,10 @@ public static function register(array $customTypeClassNames): void private static function registerType(): callable { - return static function (string $customTypeClassName): void { - Type::addType($customTypeClassName::customTypeName(), $customTypeClassName); + return static function (mixed $customTypeClassName): void { + $name = $customTypeClassName::customTypeName(); + + Type::addType($name, $customTypeClassName); }; } } diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php index a9c5545dd..44d9835c1 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php @@ -7,6 +7,7 @@ use CodelyTv\Shared\Domain\Aggregate\AggregateRoot; use Doctrine\ORM\EntityManager; use Doctrine\ORM\EntityRepository; +use Doctrine\ORM\Exception\NotSupported; abstract class DoctrineRepository { @@ -29,6 +30,15 @@ protected function remove(AggregateRoot $entity): void $this->entityManager()->flush($entity); } + /** + * @template T of object + * + * @psalm-param class-string $entityClass + * + * @psalm-return EntityRepository + * + * @throws NotSupported + */ protected function repository(string $entityClass): EntityRepository { return $this->entityManager->getRepository($entityClass); diff --git a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php index bd72fc4cd..6d10df4be 100644 --- a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php +++ b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php @@ -41,7 +41,7 @@ protected function searchRawElasticsearchQuery(array $params): array try { $result = $this->client->client()->search(array_merge(['index' => $this->indexName()], $params)); - $hits = get_in(['hits', 'hits'], $result, []); + $hits = (array) get_in(['hits', 'hits'], $result, []); return map($this->elasticValuesExtractor(), $hits); } catch (Missing404Exception) { diff --git a/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php b/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php index c93c9e9bc..0d8883c57 100644 --- a/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php +++ b/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php @@ -25,7 +25,7 @@ public function onKernelRequest(RequestEvent $event): void foreach ($jsonData as $key => $value) { $jsonDataLowerCase[preg_replace_callback( '/_(.)/', - static fn ($matches) => strtoupper($matches[1]), + static fn ($matches): string => strtoupper((string) $matches[1]), (string) $key )] = $value; } diff --git a/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php b/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php index ed8e836a4..7b199b90a 100644 --- a/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php +++ b/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php @@ -21,7 +21,9 @@ public static function create( return new CoursesCounter( $id ?? CoursesCounterIdMother::create(), $total ?? CoursesCounterTotalMother::create(), - ...count($existingCourses) ? $existingCourses : Repeater::random(fn () => CourseIdMother::create()) + ...count($existingCourses) ? $existingCourses : Repeater::random( + fn (): CourseId => CourseIdMother::create() + ) ); } diff --git a/tests/Shared/Infrastructure/Behat/ApiContext.php b/tests/Shared/Infrastructure/Behat/ApiContext.php index 30be7f565..bf1df4595 100644 --- a/tests/Shared/Infrastructure/Behat/ApiContext.php +++ b/tests/Shared/Infrastructure/Behat/ApiContext.php @@ -46,6 +46,10 @@ public function theResponseContentShouldBe(PyStringNode $expectedResponse): void $expected = $this->sanitizeOutput($expectedResponse->getRaw()); $actual = $this->sanitizeOutput($this->sessionHelper->getResponse()); + if ($expected === false || $actual === false) { + throw new RuntimeException('The outputs could not be parsed as JSON'); + } + if ($expected !== $actual) { throw new RuntimeException( sprintf("The outputs does not match!\n\n-- Expected:\n%s\n\n-- Actual:\n%s", $expected, $actual) diff --git a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php index 5612e2c8a..e57638dbc 100644 --- a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php @@ -21,7 +21,7 @@ final class RabbitMqEventBusTest extends InfrastructureTestCase { - private $connection; + private mixed $connection; private string $exchangeName; private RabbitMqConfigurer $configurer; private RabbitMqEventBus $publisher; diff --git a/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php b/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php index 2aa1c9afe..226c1e8a0 100644 --- a/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php +++ b/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php @@ -31,7 +31,7 @@ private function truncateDatabaseSql(array $tables): string private function truncateTableSql(): callable { - return fn (array $table): string => sprintf('TRUNCATE TABLE `%s`;', first($table)); + return fn (array $table): string => sprintf('TRUNCATE TABLE `%s`;', (string) first($table)); } private function tables(Connection $connection): array diff --git a/tests/Shared/Infrastructure/Mink/MinkHelper.php b/tests/Shared/Infrastructure/Mink/MinkHelper.php index 51fb79319..976ccc0d5 100644 --- a/tests/Shared/Infrastructure/Mink/MinkHelper.php +++ b/tests/Shared/Infrastructure/Mink/MinkHelper.php @@ -13,7 +13,7 @@ { public function __construct(private Session $session) {} - public function sendRequest($method, $url, array $optionalParams = []): Crawler + public function sendRequest(string $method, string $url, array $optionalParams = []): Crawler { $defaultOptionalParams = [ 'parameters' => [], diff --git a/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php b/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php index 6f02b11d7..c5909ef43 100644 --- a/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php +++ b/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php @@ -21,7 +21,7 @@ public function sendRequestWithPyStringNode($method, $url, PyStringNode $body): $this->request($method, $url, ['content' => $body->getRaw()]); } - public function request($method, $url, array $optionalParams = []): Crawler + public function request(string $method, string $url, array $optionalParams = []): Crawler { return $this->sessionHelper->sendRequest($method, $url, $optionalParams); } diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php index 78f9dd3d9..25d4017d6 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php @@ -40,7 +40,7 @@ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = f private function contains(array $expectedArray, array $actualArray): bool { $exists = fn (AggregateRoot $expected): bool => any( - fn (AggregateRoot $actual) => TestUtils::isSimilar($expected, $actual), + fn (AggregateRoot $actual): bool => TestUtils::isSimilar($expected, $actual), $actualArray ); diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php index f1975a01d..db43dfd09 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php @@ -40,7 +40,7 @@ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = f private function contains(array $expectedArray, array $actualArray): bool { $exists = static fn (DomainEvent $expected): bool => any( - static fn (DomainEvent $actual) => TestUtils::isSimilar($expected, $actual), + static fn (DomainEvent $actual): bool => TestUtils::isSimilar($expected, $actual), $actualArray ); diff --git a/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php b/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php index 757c4fda2..cc4e75844 100644 --- a/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php +++ b/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php @@ -32,7 +32,7 @@ protected function service(string $id): mixed return self::getContainer()->get($id); } - protected function parameter($parameter): mixed + protected function parameter(string $parameter): mixed { return self::getContainer()->getParameter($parameter); } From ff40d42db376dc05a1db43a6177fc670263e6e2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Tue, 3 Oct 2023 15:58:47 +0200 Subject: [PATCH 21/40] chore: use psalm level 2 (#359) --- .../Courses/CoursesGetController.php | 4 +- composer.json | 3 +- composer.lock | 62 ++++++++++++++++++- psalm.xml | 14 ++++- .../Doctrine/DbalTypesSearcher.php | 4 +- .../Doctrine/DoctrinePrefixesSearcher.php | 2 +- .../Find/FindVideoQueryHandler.php | 13 ++-- src/Shared/Domain/Assert.php | 2 +- src/Shared/Domain/ValueObject/Uuid.php | 2 +- .../Bus/CallableFirstParameterExtractor.php | 8 +-- .../Bus/Event/DomainEventJsonDeserializer.php | 5 -- .../Bus/Event/DomainEventMapping.php | 4 +- .../MySqlDoctrineDomainEventsConsumer.php | 7 +-- .../Bus/Event/MySql/MySqlDoctrineEventBus.php | 2 +- .../Doctrine/DoctrineEntityManagerFactory.php | 11 ++-- .../Doctrine/DoctrineCriteriaConverter.php | 8 +-- tests/Shared/Domain/DuplicatorMother.php | 2 +- tests/Shared/Domain/TestUtils.php | 6 +- .../Infrastructure/Behat/ApiContext.php | 6 +- .../Doctrine/MySqlDatabaseCleaner.php | 4 +- .../Mockery/CodelyTvMatcherIsSimilar.php | 2 +- .../DateTimeStringSimilarComparator.php | 3 +- .../PhpUnit/InfrastructureTestCase.php | 9 ++- .../Infrastructure/PhpUnit/UnitTestCase.php | 6 +- 24 files changed, 132 insertions(+), 57 deletions(-) diff --git a/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php b/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php index 428b3b35e..0249e77aa 100644 --- a/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php +++ b/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php @@ -28,8 +28,8 @@ public function __invoke(Request $request): JsonResponse $response = $this->queryBus->ask( new SearchBackofficeCoursesByCriteriaQuery( (array) $request->query->get('filters'), - $orderBy === null ? null : (string) $orderBy, - $order === null ? null : (string) $order, + $orderBy === null ? null : $orderBy, + $order === null ? null : $order, $limit === null ? null : (int) $limit, $offset === null ? null : (int) $offset ) diff --git a/composer.json b/composer.json index fcbc6d631..16cbae255 100644 --- a/composer.json +++ b/composer.json @@ -56,7 +56,8 @@ "vimeo/psalm": "^5.15", "rector/rector": "^0.18.4", "psalm/plugin-mockery": "^1.1", - "psalm/plugin-symfony": "^5.0" + "psalm/plugin-symfony": "^5.0", + "psalm/plugin-phpunit": "^0.18.4" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index c4951eef4..4c584ce32 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": "5ca0c05883f15a06ec830187f97a5ba9", + "content-hash": "aee8db87d99805f8edc889d34f98ff95", "packages": [ { "name": "brick/math", @@ -7990,6 +7990,66 @@ }, "time": "2022-11-25T07:16:18+00:00" }, + { + "name": "psalm/plugin-phpunit", + "version": "0.18.4", + "source": { + "type": "git", + "url": "https://github.com/psalm/psalm-plugin-phpunit.git", + "reference": "e4ab3096653d9eb6f6d0ea5f4461898d59ae4dbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/psalm/psalm-plugin-phpunit/zipball/e4ab3096653d9eb6f6d0ea5f4461898d59ae4dbc", + "reference": "e4ab3096653d9eb6f6d0ea5f4461898d59ae4dbc", + "shasum": "" + }, + "require": { + "composer/package-versions-deprecated": "^1.10", + "composer/semver": "^1.4 || ^2.0 || ^3.0", + "ext-simplexml": "*", + "php": "^7.1 || ^8.0", + "vimeo/psalm": "dev-master || dev-4.x || ^4.7.1 || ^5@beta || ^5.0" + }, + "conflict": { + "phpunit/phpunit": "<7.5" + }, + "require-dev": { + "codeception/codeception": "^4.0.3", + "php": "^7.3 || ^8.0", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.0", + "squizlabs/php_codesniffer": "^3.3.1", + "weirdan/codeception-psalm-module": "^0.11.0", + "weirdan/prophecy-shim": "^1.0 || ^2.0" + }, + "type": "psalm-plugin", + "extra": { + "psalm": { + "pluginClass": "Psalm\\PhpUnitPlugin\\Plugin" + } + }, + "autoload": { + "psr-4": { + "Psalm\\PhpUnitPlugin\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Brown", + "email": "github@muglug.com" + } + ], + "description": "Psalm plugin for PHPUnit", + "support": { + "issues": "https://github.com/psalm/psalm-plugin-phpunit/issues", + "source": "https://github.com/psalm/psalm-plugin-phpunit/tree/0.18.4" + }, + "time": "2022-12-03T07:47:07+00:00" + }, { "name": "psalm/plugin-symfony", "version": "v5.0.3", diff --git a/psalm.xml b/psalm.xml index 955503769..49bc1fcc1 100644 --- a/psalm.xml +++ b/psalm.xml @@ -3,10 +3,11 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://getpsalm.org/schema/config" xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd" - errorLevel="3" + errorLevel="2" resolveFromConfigFile="true" findUnusedBaselineEntry="false" findUnusedCode="false" + allowStringToStandInForClass="true" > @@ -44,15 +45,26 @@ + + + + + + + + + + + diff --git a/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php b/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php index e37b0efb9..a6df25c8b 100644 --- a/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php +++ b/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php @@ -33,7 +33,7 @@ private static function modulesInPath(string $path): array private static function possibleDbalPaths(string $path): array { return map( - static function ($unused, string $module) use ($path) { + static function (mixed $_unused, string $module) use ($path) { $mappingsPath = self::MAPPINGS_PATH; return realpath("$path/$module/$mappingsPath"); @@ -51,7 +51,7 @@ private static function dbalClassesSearcher(string $contextName): callable { return static function (array $totalNamespaces, string $path) use ($contextName): array { $possibleFiles = scandir($path); - $files = filter(static fn ($file): bool => Utils::endsWith('Type.php', $file), $possibleFiles); + $files = filter(static fn (string $file): bool => Utils::endsWith('Type.php', $file), $possibleFiles); $namespaces = map( static function (string $file) use ($path, $contextName): string { diff --git a/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php b/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php index 6e66ebc20..ac1ae3c2e 100644 --- a/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php +++ b/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php @@ -31,7 +31,7 @@ private static function modulesInPath(string $path): array private static function possibleMappingPaths(string $path): array { return map( - static function ($unused, string $module) use ($path) { + static function (mixed $_unused, string $module) use ($path) { $mappingsPath = self::MAPPINGS_PATH; return realpath("$path/$module/$mappingsPath"); diff --git a/src/Mooc/Videos/Application/Find/FindVideoQueryHandler.php b/src/Mooc/Videos/Application/Find/FindVideoQueryHandler.php index ef04073f4..377f08e39 100644 --- a/src/Mooc/Videos/Application/Find/FindVideoQueryHandler.php +++ b/src/Mooc/Videos/Application/Find/FindVideoQueryHandler.php @@ -8,21 +8,22 @@ use CodelyTv\Shared\Domain\Bus\Query\QueryHandler; use function Lambdish\Phunctional\apply; -use function Lambdish\Phunctional\pipe; -final class FindVideoQueryHandler implements QueryHandler +final readonly class FindVideoQueryHandler implements QueryHandler { - private $finder; + private VideoResponseConverter $responseConverter; - public function __construct(VideoFinder $finder) + public function __construct(private VideoFinder $finder) { - $this->finder = pipe($finder, new VideoResponseConverter()); + $this->responseConverter = new VideoResponseConverter(); } public function __invoke(FindVideoQuery $query): VideoResponse { $id = new VideoId($query->id()); - return apply($this->finder, [$id]); + $video = apply($this->finder, [$id]); + + return apply($this->responseConverter, [$video]); } } diff --git a/src/Shared/Domain/Assert.php b/src/Shared/Domain/Assert.php index d47b45939..1a56c0387 100644 --- a/src/Shared/Domain/Assert.php +++ b/src/Shared/Domain/Assert.php @@ -15,7 +15,7 @@ public static function arrayOf(string $class, array $items): void } } - public static function instanceOf(string $class, $item): void + public static function instanceOf(string $class, mixed $item): void { if (!$item instanceof $class) { throw new InvalidArgumentException( diff --git a/src/Shared/Domain/ValueObject/Uuid.php b/src/Shared/Domain/ValueObject/Uuid.php index c23061a9b..200dcb667 100644 --- a/src/Shared/Domain/ValueObject/Uuid.php +++ b/src/Shared/Domain/ValueObject/Uuid.php @@ -10,7 +10,7 @@ abstract class Uuid implements Stringable { - public function __construct(protected string $value) + final public function __construct(protected string $value) { $this->ensureIsValidUuid($value); } diff --git a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php index 4db50eb2d..9098fe2d4 100644 --- a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php +++ b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php @@ -28,7 +28,7 @@ public static function forPipedCallables(iterable $callables): array private static function classExtractor(self $parameterExtractor): callable { - return static fn (callable $handler): ?string => $parameterExtractor->extract($handler); + return static fn (object $handler): ?string => $parameterExtractor->extract($handler); } private static function pipedCallablesReducer(): callable @@ -46,10 +46,10 @@ private static function pipedCallablesReducer(): callable private static function unflatten(): callable { - return static fn ($value): array => [$value]; + return static fn (mixed $value): array => [$value]; } - public function extract($class): ?string + public function extract(object $class): ?string { $reflector = new ReflectionClass($class); $method = $reflector->getMethod('__invoke'); @@ -63,7 +63,7 @@ public function extract($class): ?string private function firstParameterClassFrom(ReflectionMethod $method): string { - /** @var ReflectionNamedType $fistParameterType */ + /** @var ReflectionNamedType|null $fistParameterType */ $fistParameterType = $method->getParameters()[0]->getType(); if ($fistParameterType === null) { diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php b/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php index 38217a553..6f1f035d8 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php @@ -6,7 +6,6 @@ use CodelyTv\Shared\Domain\Bus\Event\DomainEvent; use CodelyTv\Shared\Domain\Utils; -use RuntimeException; final readonly class DomainEventJsonDeserializer { @@ -18,10 +17,6 @@ public function deserialize(string $domainEvent): DomainEvent $eventName = $eventData['data']['type']; $eventClass = $this->mapping->for($eventName); - if ($eventClass === null) { - throw new RuntimeException("The event <$eventName> doesn't exist or has no subscribers"); - } - return $eventClass::fromPrimitives( $eventData['data']['attributes']['id'], $eventData['data']['attributes'], diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php b/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php index 39b8057d9..66d37f0b4 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php @@ -12,14 +12,14 @@ final class DomainEventMapping { - private $mapping; + private array $mapping; public function __construct(iterable $mapping) { $this->mapping = reduce($this->eventsExtractor(), $mapping, []); } - public function for(string $name) + public function for(string $name): string { if (!isset($this->mapping[$name])) { throw new RuntimeException("The Domain Event Class for <$name> doesn't exists or have no subscribers"); diff --git a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php index 43ae38c0f..e81e525dd 100644 --- a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php +++ b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php @@ -8,7 +8,6 @@ use CodelyTv\Shared\Infrastructure\Bus\Event\DomainEventMapping; use DateTimeImmutable; use Doctrine\DBAL\Connection; -use Doctrine\DBAL\FetchMode; use Doctrine\ORM\EntityManager; use RuntimeException; @@ -28,14 +27,14 @@ public function consume(callable $subscribers, int $eventsToConsume): void { $events = $this->connection ->executeQuery("SELECT * FROM domain_events ORDER BY occurred_on ASC LIMIT $eventsToConsume") - ->fetchAll(FetchMode::ASSOCIATIVE); + ->fetchAllAssociative(); each($this->executeSubscribers($subscribers), $events); $ids = implode(', ', map($this->idExtractor(), $events)); if (!empty($ids)) { - $this->connection->executeUpdate("DELETE FROM domain_events WHERE id IN ($ids)"); + $this->connection->executeStatement("DELETE FROM domain_events WHERE id IN ($ids)"); } } @@ -57,7 +56,7 @@ private function executeSubscribers(callable $subscribers): callable }; } - private function formatDate($stringDate): string + private function formatDate(mixed $stringDate): string { return Utils::dateToString(new DateTimeImmutable($stringDate)); } diff --git a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php index 5127030df..8876aec99 100644 --- a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php @@ -38,7 +38,7 @@ private function publisher(): callable Utils::stringToDate($domainEvent->occurredOn())->format(self::DATABASE_TIMESTAMP_FORMAT) ); - $this->connection->executeUpdate( + $this->connection->executeStatement( <<createDatabase($databaseName); - $connection->exec(sprintf('USE %s', $databaseName)); - $connection->exec(file_get_contents(realpath($schemaFile))); + $connection->executeStatement(sprintf('USE %s', $databaseName)); + $connection->executeStatement(file_get_contents(realpath($schemaFile))); } $connection->close(); } - private static function databaseExists($databaseName, MySqlSchemaManager $schemaManager): bool + private static function databaseExists(string $databaseName, MySqlSchemaManager $schemaManager): bool { return in_array($databaseName, $schemaManager->listDatabases(), true); } diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php index ca4e91d24..bb2f73604 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php @@ -64,7 +64,7 @@ private function buildComparison(): callable }; } - private function mapFieldValue(FilterField $field) + private function mapFieldValue(FilterField $field): mixed { return array_key_exists($field->value(), $this->criteriaToDoctrineFields) ? $this->criteriaToDoctrineFields[$field->value()] @@ -80,19 +80,19 @@ private function formatOrder(Criteria $criteria): ?array return [$this->mapOrderBy($criteria->order()->orderBy()) => $criteria->order()->orderType()]; } - private function mapOrderBy(OrderBy $field) + private function mapOrderBy(OrderBy $field): mixed { return array_key_exists($field->value(), $this->criteriaToDoctrineFields) ? $this->criteriaToDoctrineFields[$field->value()] : $field->value(); } - private function existsHydratorFor($field): bool + private function existsHydratorFor(mixed $field): bool { return array_key_exists($field, $this->hydrators); } - private function hydrate($field, string $value) + private function hydrate(mixed $field, string $value): mixed { return $this->hydrators[$field]($value); } diff --git a/tests/Shared/Domain/DuplicatorMother.php b/tests/Shared/Domain/DuplicatorMother.php index fc4260079..ab7fa25d9 100644 --- a/tests/Shared/Domain/DuplicatorMother.php +++ b/tests/Shared/Domain/DuplicatorMother.php @@ -11,7 +11,7 @@ final class DuplicatorMother { - public static function with($object, array $newParams): mixed + public static function with(mixed $object, array $newParams): mixed { $duplicated = clone $object; $reflection = new ReflectionObject($duplicated); diff --git a/tests/Shared/Domain/TestUtils.php b/tests/Shared/Domain/TestUtils.php index cfb347deb..2d560e6fd 100644 --- a/tests/Shared/Domain/TestUtils.php +++ b/tests/Shared/Domain/TestUtils.php @@ -9,21 +9,21 @@ final class TestUtils { - public static function isSimilar($expected, $actual): bool + public static function isSimilar(mixed $expected, mixed $actual): bool { $constraint = new CodelyTvConstraintIsSimilar($expected); return $constraint->evaluate($actual, '', true); } - public static function assertSimilar($expected, $actual): void + public static function assertSimilar(mixed $expected, mixed $actual): void { $constraint = new CodelyTvConstraintIsSimilar($expected); $constraint->evaluate($actual); } - public static function similarTo($value, $delta = 0.0): CodelyTvMatcherIsSimilar + public static function similarTo(mixed $value, float $delta = 0.0): CodelyTvMatcherIsSimilar { return new CodelyTvMatcherIsSimilar($value, $delta); } diff --git a/tests/Shared/Infrastructure/Behat/ApiContext.php b/tests/Shared/Infrastructure/Behat/ApiContext.php index bf1df4595..a3bd747eb 100644 --- a/tests/Shared/Infrastructure/Behat/ApiContext.php +++ b/tests/Shared/Infrastructure/Behat/ApiContext.php @@ -25,7 +25,7 @@ public function __construct(private readonly Session $minkSession) /** * @Given I send a :method request to :url */ - public function iSendARequestTo($method, $url): void + public function iSendARequestTo(string $method, string $url): void { $this->request->sendRequest($method, $this->locatePath($url)); } @@ -33,7 +33,7 @@ public function iSendARequestTo($method, $url): void /** * @Given I send a :method request to :url with body: */ - public function iSendARequestToWithBody($method, $url, PyStringNode $body): void + public function iSendARequestToWithBody(string $method, string $url, PyStringNode $body): void { $this->request->sendRequestWithPyStringNode($method, $this->locatePath($url), $body); } @@ -88,7 +88,7 @@ public function printResponseHeaders(): void /** * @Then the response status code should be :expectedResponseCode */ - public function theResponseStatusCodeShouldBe($expectedResponseCode): void + public function theResponseStatusCodeShouldBe(mixed $expectedResponseCode): void { if ($this->minkSession->getStatusCode() !== (int) $expectedResponseCode) { throw new RuntimeException( diff --git a/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php b/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php index 226c1e8a0..c58c5ce57 100644 --- a/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php +++ b/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php @@ -19,7 +19,7 @@ public function __invoke(EntityManagerInterface $entityManager): void $tables = $this->tables($connection); $truncateTablesSql = $this->truncateDatabaseSql($tables); - $connection->exec($truncateTablesSql); + $connection->executeQuery($truncateTablesSql); } private function truncateDatabaseSql(array $tables): string @@ -36,6 +36,6 @@ private function truncateTableSql(): callable private function tables(Connection $connection): array { - return $connection->query('SHOW TABLES')->fetchAll(); + return $connection->executeQuery('SHOW TABLES')->fetchAllAssociative(); } } diff --git a/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php b/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php index 90ca771b3..00271c0a6 100644 --- a/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php +++ b/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php @@ -12,7 +12,7 @@ final class CodelyTvMatcherIsSimilar extends MatcherAbstract implements Stringab { private readonly CodelyTvConstraintIsSimilar $constraint; - public function __construct($value, $delta = 0.0) + public function __construct(mixed $value, float $delta = 0.0) { parent::__construct($value); diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php index 05bd8bdc3..e3cc9d557 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php @@ -16,8 +16,7 @@ final class DateTimeStringSimilarComparator extends ObjectComparator { public function accepts($expected, $actual): bool { - return ($actual !== null) - && is_string($expected) + return is_string($expected) && is_string($actual) && $this->isValidDateTimeString($expected) && $this->isValidDateTimeString($actual); diff --git a/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php b/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php index cc4e75844..5ef80b395 100644 --- a/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php +++ b/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php @@ -42,8 +42,13 @@ protected function clearUnitOfWork(): void $this->service(EntityManager::class)->clear(); } - protected function eventually(callable $fn, $totalRetries = 3, $timeToWaitOnErrorInSeconds = 1, $attempt = 0): void - { + /** @param int<0, max> $timeToWaitOnErrorInSeconds */ + protected function eventually( + callable $fn, + int $totalRetries = 3, + int $timeToWaitOnErrorInSeconds = 1, + int $attempt = 0 + ): void { try { $fn(); } catch (Throwable $error) { diff --git a/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php b/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php index 27bb36193..1776ca089 100644 --- a/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php +++ b/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php @@ -87,17 +87,17 @@ protected function assertAskThrowsException(string $expectedErrorClass, Query $q $queryHandler($query); } - protected function isSimilar($expected, $actual): bool + protected function isSimilar(mixed $expected, mixed $actual): bool { return TestUtils::isSimilar($expected, $actual); } - protected function assertSimilar($expected, $actual): void + protected function assertSimilar(mixed $expected, mixed $actual): void { TestUtils::assertSimilar($expected, $actual); } - protected function similarTo($value, $delta = 0.0): MatcherAbstract + protected function similarTo(mixed $value, float $delta = 0.0): MatcherAbstract { return TestUtils::similarTo($value, $delta); } From 0e52a8b97a5208493892434aef4872a08baaa0c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Tue, 3 Oct 2023 19:09:13 +0200 Subject: [PATCH 22/40] feat: test architecture (#361) * chore(phpat): install codely fork * chore(phpat): test shared domain architecture * ci: test architecture * chore(phpat): test shared infrastructure architecture * chore(phpat): test shared infrastructure architecture * chore(phpat): test application services only have one public method --- .github/workflows/ci.yml | 3 + Makefile | 3 + composer.json | 12 ++- composer.lock | 75 +++++++++++++++++-- phpstan.neon | 25 +++++++ src/Shared/Domain/Utils.php | 9 --- .../Symfony/ApiExceptionListener.php | 10 ++- tests/Mooc/MoocArchitectureTest.php | 56 ++++++++++++++ .../Infrastructure/ArchitectureTest.php | 40 ++++++++++ tests/Shared/SharedArchitectureTest.php | 61 +++++++++++++++ 10 files changed, 275 insertions(+), 19 deletions(-) create mode 100644 phpstan.neon create mode 100644 tests/Mooc/MoocArchitectureTest.php create mode 100644 tests/Shared/Infrastructure/ArchitectureTest.php create mode 100644 tests/Shared/SharedArchitectureTest.php diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9ab37e216..f629db424 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,6 +28,9 @@ jobs: - name: 🏁 Static analysis run: make static-analysis + - name: 🏗️ Architecture + run: make test-architecture + - name: 🦭 Wait for the database to get up run: | while ! make ping-mysql &>/dev/null; do diff --git a/Makefile b/Makefile index aa5c306bb..c47502189 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,9 @@ static-analysis: lint: docker exec codely-php_ddd_skeleton-mooc_backend-php ./vendor/bin/ecs check +test-architecture: + docker exec codely-php_ddd_skeleton-mooc_backend-php php -d memory_limit=4G ./vendor/bin/phpstan analyse + start: @if [ ! -f .env.local ]; then echo '' > .env.local; fi UID=${shell id -u} GID=${shell id -g} docker compose up --build -d diff --git a/composer.json b/composer.json index 16cbae255..0028fa52f 100644 --- a/composer.json +++ b/composer.json @@ -57,7 +57,9 @@ "rector/rector": "^0.18.4", "psalm/plugin-mockery": "^1.1", "psalm/plugin-symfony": "^5.0", - "psalm/plugin-phpunit": "^0.18.4" + "psalm/plugin-phpunit": "^0.18.4", + "phpstan/phpstan": "^1.10", + "phpat/phpat": "dev-add-has_one_public_method" }, "autoload": { "psr-4": { @@ -80,5 +82,11 @@ "allow-plugins": { "ocramius/package-versions": true } - } + }, + "repositories": [ + { + "type": "vcs", + "url": "https://github.com/CodelyTV/phpat" + } + ] } diff --git a/composer.lock b/composer.lock index 4c584ce32..3369971a0 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": "aee8db87d99805f8edc889d34f98ff95", + "content-hash": "cc21804655685b24332ea14a43ca7875", "packages": [ { "name": "brick/math", @@ -7234,6 +7234,66 @@ }, "time": "2022-02-21T01:04:05+00:00" }, + { + "name": "phpat/phpat", + "version": "dev-add-has_one_public_method", + "source": { + "type": "git", + "url": "https://github.com/CodelyTV/phpat.git", + "reference": "5d530db9735aa52ca702db9e6d91493b1e06c990" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CodelyTV/phpat/zipball/5d530db9735aa52ca702db9e6d91493b1e06c990", + "reference": "5d530db9735aa52ca702db9e6d91493b1e06c990", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "phpstan/phpstan": "^1.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.0", + "kubawerlos/php-cs-fixer-custom-fixers": "^3.16", + "phpunit/phpunit": "^9.0", + "vimeo/psalm": "^4.0 || ^5.0" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "PHPat\\": "src/" + }, + "files": [ + "helpers.php" + ] + }, + "autoload-dev": { + "psr-4": { + "Tests\\PHPat\\": "tests/" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Carlos Alandete Sastre", + "email": "carlos.alandete@gmail.com" + } + ], + "description": "PHP Architecture Tester", + "support": { + "source": "https://github.com/CodelyTV/phpat/tree/add-has_one_public_method" + }, + "time": "2023-10-03T14:53:59+00:00" + }, { "name": "phpdocumentor/reflection-common", "version": "2.2.0", @@ -7451,16 +7511,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.10.35", + "version": "1.10.37", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "e730e5facb75ffe09dfb229795e8c01a459f26c3" + "reference": "058ba07e92f744d4dcf6061ae75283d0c6456f2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e730e5facb75ffe09dfb229795e8c01a459f26c3", - "reference": "e730e5facb75ffe09dfb229795e8c01a459f26c3", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/058ba07e92f744d4dcf6061ae75283d0c6456f2e", + "reference": "058ba07e92f744d4dcf6061ae75283d0c6456f2e", "shasum": "" }, "require": { @@ -7509,7 +7569,7 @@ "type": "tidelift" } ], - "time": "2023-09-19T15:27:56+00:00" + "time": "2023-10-02T16:18:37+00:00" }, { "name": "phpunit/php-code-coverage", @@ -10516,7 +10576,8 @@ "aliases": [], "minimum-stability": "RC", "stability-flags": { - "roave/security-advisories": 20 + "roave/security-advisories": 20, + "phpat/phpat": 20 }, "prefer-stable": false, "prefer-lowest": false, diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 000000000..4404d69b2 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,25 @@ +includes: + - vendor/phpat/phpat/extension.neon + +parameters: + level: 0 + paths: + - ./apps + - ./src + - ./tests + excludePaths: + - ./apps/backoffice/backend/var + - ./apps/backoffice/frontend/var + - ./apps/mooc/backend/var + - ./apps/mooc/frontend/var + +services: + - + class: CodelyTv\Tests\Shared\SharedArchitectureTest + tags: + - phpat.test + + - + class: CodelyTv\Tests\Mooc\MoocArchitectureTest + tags: + - phpat.test diff --git a/src/Shared/Domain/Utils.php b/src/Shared/Domain/Utils.php index c7825a25b..df64bfb87 100644 --- a/src/Shared/Domain/Utils.php +++ b/src/Shared/Domain/Utils.php @@ -6,9 +6,7 @@ use DateTimeImmutable; use DateTimeInterface; -use ReflectionClass; use RuntimeException; - use function Lambdish\Phunctional\filter; final class Utils @@ -81,13 +79,6 @@ public static function filesIn(string $path, string $fileType): array ); } - public static function extractClassName(object $object): string - { - $reflect = new ReflectionClass($object); - - return $reflect->getShortName(); - } - public static function iterableToArray(iterable $iterable): array { if (is_array($iterable)) { diff --git a/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php b/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php index a18ea1e20..80ef312df 100644 --- a/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php +++ b/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php @@ -6,6 +6,7 @@ use CodelyTv\Shared\Domain\DomainError; use CodelyTv\Shared\Domain\Utils; +use ReflectionClass; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpKernel\Event\ExceptionEvent; use Throwable; @@ -35,6 +36,13 @@ private function exceptionCodeFor(Throwable $error): string return $error instanceof $domainErrorClass ? $error->errorCode() - : Utils::toSnakeCase(Utils::extractClassName($error)); + : Utils::toSnakeCase($this->extractClassName($error)); + } + + private function extractClassName(object $object): string + { + $reflect = new ReflectionClass($object); + + return $reflect->getShortName(); } } diff --git a/tests/Mooc/MoocArchitectureTest.php b/tests/Mooc/MoocArchitectureTest.php new file mode 100644 index 000000000..a1cf75f57 --- /dev/null +++ b/tests/Mooc/MoocArchitectureTest.php @@ -0,0 +1,56 @@ +classes(Selector::inNamespace('/^CodelyTv\\\\Mooc\\\\.+\\\\Domain/', true)) + ->canOnlyDependOn() + ->classes(...array_merge(ArchitectureTest::languageClasses(), [ + // Itself + Selector::inNamespace('/^CodelyTv\\\\Mooc\\\\.+\\\\Domain/', true), + // Shared + Selector::inNamespace('CodelyTv\Shared\Domain'), + ])) + ->because('mooc domain can only import itself and shared domain'); + } + + public function test_mooc_application_should_only_import_itself_and_domain(): Rule + { + return PHPat::rule() + ->classes(Selector::inNamespace('/^CodelyTv\\\\Mooc\\\\.+\\\\Application/', true)) + ->canOnlyDependOn() + ->classes(...array_merge(ArchitectureTest::languageClasses(), [ + // Itself + Selector::inNamespace('/^CodelyTv\\\\Mooc\\\\.+\\\\Application/', true), + Selector::inNamespace('/^CodelyTv\\\\Mooc\\\\.+\\\\Domain/', true), + // Shared + Selector::inNamespace('CodelyTv\Shared'), + ])) + ->because('mooc application can only import itself and shared'); + } + + public function test_mooc_infrastructure_should_not_import_other_contexts_beside_shared(): Rule + { + return PHPat::rule() + ->classes(Selector::inNamespace('CodelyTv\Mooc')) + ->shouldNotDependOn() + ->classes(Selector::inNamespace('CodelyTv')) + ->excluding( + // Itself + Selector::inNamespace('CodelyTv\Mooc'), + // Shared + Selector::inNamespace('CodelyTv\Shared'), + ); + } +} diff --git a/tests/Shared/Infrastructure/ArchitectureTest.php b/tests/Shared/Infrastructure/ArchitectureTest.php new file mode 100644 index 000000000..17d97198b --- /dev/null +++ b/tests/Shared/Infrastructure/ArchitectureTest.php @@ -0,0 +1,40 @@ +classes(Selector::inNamespace('CodelyTv\Shared\Domain')) + ->canOnlyDependOn() + ->classes(...array_merge(ArchitectureTest::languageClasses(), [ + // Itself + Selector::inNamespace('CodelyTv\Shared\Domain'), + // Dependencies treated as domain + Selector::classname(Uuid::class), + ])) + ->because('shared domain cannot import from outside'); + } + + public function test_shared_infrastructure_should_not_import_from_other_contexts(): Rule + { + return PHPat::rule() + ->classes(Selector::inNamespace('CodelyTv\Shared\Infrastructure')) + ->shouldNotDependOn() + ->classes(Selector::inNamespace('CodelyTv')) + ->excluding( + // Itself + Selector::inNamespace('CodelyTv\Shared'), + // This need to be refactored + Selector::classname(MySqlDatabaseCleaner::class), + Selector::classname(AuthenticateUserCommand::class), + ); + } + + public function test_all_use_cases_can_only_have_one_public_method(): Rule + { + return PHPat::rule() + ->classes( + Selector::classname('/^CodelyTv\\\\.+\\\\.+\\\\Application\\\\.+\\\\(?!.*(?:Command|Query)$).*$/', true) + ) + ->excluding( + Selector::implements(Response::class), + Selector::implements(DomainEventSubscriber::class), + Selector::inNamespace('/.*\\\\Tests\\\\.*/', true) + ) + ->shouldHaveOnlyOnePublicMethod(); + } +} From 6a17830b6e52cabbf2c0eb5a3182d785f714cb8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Tue, 3 Oct 2023 21:07:09 +0200 Subject: [PATCH 23/40] chore: add phpmd (#362) * chore(phpmd): install * chore(phpmd): add BooleanArgumentFlag rule * chore(phpmd): add CyclomaticComplexity rule * chore(phpmd): add ExcessiveMethodLength rule * chore(phpmd): add ExcessiveClassLength rule * chore(phpmd): add ExcessiveParameterList rule * chore(phpmd): add TooManyMethods rule * chore(phpmd): add ExcessiveClassComplexity rule --- .github/workflows/ci.yml | 3 + Makefile | 3 + .../Courses/CoursesGetController.php | 4 +- composer.json | 3 +- composer.lock | 149 +++++++++++++++++- phpmd.xml | 48 ++++++ 6 files changed, 206 insertions(+), 4 deletions(-) create mode 100644 phpmd.xml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f629db424..39fe081e4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,6 +31,9 @@ jobs: - name: 🏗️ Architecture run: make test-architecture + - name: 🗑️ Mess detector + run: make mess-detector + - name: 🦭 Wait for the database to get up run: | while ! make ping-mysql &>/dev/null; do diff --git a/Makefile b/Makefile index c47502189..1a16c8a13 100644 --- a/Makefile +++ b/Makefile @@ -21,6 +21,9 @@ lint: test-architecture: docker exec codely-php_ddd_skeleton-mooc_backend-php php -d memory_limit=4G ./vendor/bin/phpstan analyse +mess-detector: + docker exec codely-php_ddd_skeleton-mooc_backend-php ./vendor/bin/phpmd apps,src,tests text phpmd.xml + start: @if [ ! -f .env.local ]; then echo '' > .env.local; fi UID=${shell id -u} GID=${shell id -g} docker compose up --build -d diff --git a/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php b/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php index 0249e77aa..11e060683 100644 --- a/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php +++ b/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php @@ -28,8 +28,8 @@ public function __invoke(Request $request): JsonResponse $response = $this->queryBus->ask( new SearchBackofficeCoursesByCriteriaQuery( (array) $request->query->get('filters'), - $orderBy === null ? null : $orderBy, - $order === null ? null : $order, + $orderBy, + $order, $limit === null ? null : (int) $limit, $offset === null ? null : (int) $offset ) diff --git a/composer.json b/composer.json index 0028fa52f..cf3792dff 100644 --- a/composer.json +++ b/composer.json @@ -59,7 +59,8 @@ "psalm/plugin-symfony": "^5.0", "psalm/plugin-phpunit": "^0.18.4", "phpstan/phpstan": "^1.10", - "phpat/phpat": "dev-add-has_one_public_method" + "phpat/phpat": "dev-add-has_one_public_method", + "phpmd/phpmd": "^2.14" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index 3369971a0..3b7f90f50 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": "cc21804655685b24332ea14a43ca7875", + "content-hash": "4b0709ec7581260bbd652ead9e882dbe", "packages": [ { "name": "brick/math", @@ -7123,6 +7123,69 @@ }, "time": "2023-08-13T19:53:39+00:00" }, + { + "name": "pdepend/pdepend", + "version": "2.15.1", + "source": { + "type": "git", + "url": "https://github.com/pdepend/pdepend.git", + "reference": "d12f25bcdfb7754bea458a4a5cb159d55e9950d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pdepend/pdepend/zipball/d12f25bcdfb7754bea458a4a5cb159d55e9950d0", + "reference": "d12f25bcdfb7754bea458a4a5cb159d55e9950d0", + "shasum": "" + }, + "require": { + "php": ">=5.3.7", + "symfony/config": "^2.3.0|^3|^4|^5|^6.0", + "symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0", + "symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0" + }, + "require-dev": { + "easy-doc/easy-doc": "0.0.0|^1.2.3", + "gregwar/rst": "^1.0", + "phpunit/phpunit": "^4.8.36|^5.7.27", + "squizlabs/php_codesniffer": "^2.0.0" + }, + "bin": [ + "src/bin/pdepend" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "PDepend\\": "src/main/php/PDepend" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Official version of pdepend to be handled with Composer", + "keywords": [ + "PHP Depend", + "PHP_Depend", + "dev", + "pdepend" + ], + "support": { + "issues": "https://github.com/pdepend/pdepend/issues", + "source": "https://github.com/pdepend/pdepend/tree/2.15.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/pdepend/pdepend", + "type": "tidelift" + } + ], + "time": "2023-09-28T12:00:56+00:00" + }, { "name": "phar-io/manifest", "version": "2.0.3", @@ -7462,6 +7525,90 @@ }, "time": "2023-08-12T11:01:26+00:00" }, + { + "name": "phpmd/phpmd", + "version": "2.14.1", + "source": { + "type": "git", + "url": "https://github.com/phpmd/phpmd.git", + "reference": "442fc2c34edcd5198b442d8647c7f0aec3afabe8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpmd/phpmd/zipball/442fc2c34edcd5198b442d8647c7f0aec3afabe8", + "reference": "442fc2c34edcd5198b442d8647c7f0aec3afabe8", + "shasum": "" + }, + "require": { + "composer/xdebug-handler": "^1.0 || ^2.0 || ^3.0", + "ext-xml": "*", + "pdepend/pdepend": "^2.15.1", + "php": ">=5.3.9" + }, + "require-dev": { + "easy-doc/easy-doc": "0.0.0 || ^1.3.2", + "ext-json": "*", + "ext-simplexml": "*", + "gregwar/rst": "^1.0", + "mikey179/vfsstream": "^1.6.8", + "phpunit/phpunit": "^4.8.36 || ^5.7.27", + "squizlabs/php_codesniffer": "^2.9.2 || ^3.7.2" + }, + "bin": [ + "src/bin/phpmd" + ], + "type": "library", + "autoload": { + "psr-0": { + "PHPMD\\": "src/main/php" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Manuel Pichler", + "email": "github@manuel-pichler.de", + "homepage": "https://github.com/manuelpichler", + "role": "Project Founder" + }, + { + "name": "Marc Würth", + "email": "ravage@bluewin.ch", + "homepage": "https://github.com/ravage84", + "role": "Project Maintainer" + }, + { + "name": "Other contributors", + "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", + "role": "Contributors" + } + ], + "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", + "homepage": "https://phpmd.org/", + "keywords": [ + "dev", + "mess detection", + "mess detector", + "pdepend", + "phpmd", + "pmd" + ], + "support": { + "irc": "irc://irc.freenode.org/phpmd", + "issues": "https://github.com/phpmd/phpmd/issues", + "source": "https://github.com/phpmd/phpmd/tree/2.14.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/phpmd/phpmd", + "type": "tidelift" + } + ], + "time": "2023-09-28T13:07:44+00:00" + }, { "name": "phpstan/phpdoc-parser", "version": "1.24.2", diff --git a/phpmd.xml b/phpmd.xml new file mode 100644 index 000000000..dee5bbe84 --- /dev/null +++ b/phpmd.xml @@ -0,0 +1,48 @@ + + + + apps/*/*/var/* + *SimilarComparator* + *IsSimilar* + + src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php + + tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php + + tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From a7e54c0942700b3da7dc4398c100045fa194da51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Tue, 3 Oct 2023 23:07:09 +0200 Subject: [PATCH 24/40] chore: add reporting of bad code (#363) --- Dockerfile | 2 +- Makefile | 6 +++--- README.md | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index e5dd7520c..5a269cece 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM php:8.2-fpm-alpine WORKDIR /app RUN apk --update upgrade \ - && apk add --no-cache autoconf automake make gcc g++ bash icu-dev libzip-dev rabbitmq-c rabbitmq-c-dev linux-headers + && apk add --no-cache autoconf automake make gcc g++ git bash icu-dev libzip-dev rabbitmq-c rabbitmq-c-dev linux-headers RUN pecl install apcu-5.1.22 && pecl install amqp-2.1.0 && pecl install xdebug-3.2.2 diff --git a/Makefile b/Makefile index 1a16c8a13..efec06c20 100644 --- a/Makefile +++ b/Makefile @@ -13,16 +13,16 @@ test: docker exec codely-php_ddd_skeleton-backoffice_backend-php ./vendor/bin/phpunit --testsuite backoffice static-analysis: - docker exec codely-php_ddd_skeleton-mooc_backend-php ./vendor/bin/psalm + docker exec codely-php_ddd_skeleton-mooc_backend-php ./vendor/bin/psalm --output-format=github --shepherd lint: docker exec codely-php_ddd_skeleton-mooc_backend-php ./vendor/bin/ecs check test-architecture: - docker exec codely-php_ddd_skeleton-mooc_backend-php php -d memory_limit=4G ./vendor/bin/phpstan analyse + docker exec codely-php_ddd_skeleton-mooc_backend-php php -d memory_limit=4G ./vendor/bin/phpstan analyse --error-format=github mess-detector: - docker exec codely-php_ddd_skeleton-mooc_backend-php ./vendor/bin/phpmd apps,src,tests text phpmd.xml + docker exec codely-php_ddd_skeleton-mooc_backend-php ./vendor/bin/phpmd apps,src,tests github phpmd.xml start: @if [ ! -f .env.local ]; then echo '' > .env.local; fi diff --git a/README.md b/README.md index ade42f645..5cb549a7c 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ codely.tv CodelyTV Courses Symfony 6 + Type Coverage CI pipeline status

From 64c1d279f351a1a9b5207a64ad58952034d264ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Fri, 6 Oct 2023 12:54:42 +0200 Subject: [PATCH 25/40] chore: use stable phpat version (#365) --- composer.json | 10 ++-------- composer.lock | 30 +++++++++++++----------------- 2 files changed, 15 insertions(+), 25 deletions(-) diff --git a/composer.json b/composer.json index cf3792dff..21706664b 100644 --- a/composer.json +++ b/composer.json @@ -59,7 +59,7 @@ "psalm/plugin-symfony": "^5.0", "psalm/plugin-phpunit": "^0.18.4", "phpstan/phpstan": "^1.10", - "phpat/phpat": "dev-add-has_one_public_method", + "phpat/phpat": "^0.10.10", "phpmd/phpmd": "^2.14" }, "autoload": { @@ -83,11 +83,5 @@ "allow-plugins": { "ocramius/package-versions": true } - }, - "repositories": [ - { - "type": "vcs", - "url": "https://github.com/CodelyTV/phpat" - } - ] + } } diff --git a/composer.lock b/composer.lock index 3b7f90f50..c748430e1 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": "4b0709ec7581260bbd652ead9e882dbe", + "content-hash": "c4ef93baa380c9d0dc5e2107e7a37d90", "packages": [ { "name": "brick/math", @@ -7299,16 +7299,16 @@ }, { "name": "phpat/phpat", - "version": "dev-add-has_one_public_method", + "version": "0.10.10", "source": { "type": "git", - "url": "https://github.com/CodelyTV/phpat.git", - "reference": "5d530db9735aa52ca702db9e6d91493b1e06c990" + "url": "https://github.com/carlosas/phpat.git", + "reference": "80004c07ba5972c36758e942a95d11cc9c298e98" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CodelyTV/phpat/zipball/5d530db9735aa52ca702db9e6d91493b1e06c990", - "reference": "5d530db9735aa52ca702db9e6d91493b1e06c990", + "url": "https://api.github.com/repos/carlosas/phpat/zipball/80004c07ba5972c36758e942a95d11cc9c298e98", + "reference": "80004c07ba5972c36758e942a95d11cc9c298e98", "shasum": "" }, "require": { @@ -7330,18 +7330,14 @@ } }, "autoload": { - "psr-4": { - "PHPat\\": "src/" - }, "files": [ "helpers.php" - ] - }, - "autoload-dev": { + ], "psr-4": { - "Tests\\PHPat\\": "tests/" + "PHPat\\": "src/" } }, + "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -7353,9 +7349,10 @@ ], "description": "PHP Architecture Tester", "support": { - "source": "https://github.com/CodelyTV/phpat/tree/add-has_one_public_method" + "issues": "https://github.com/carlosas/phpat/issues", + "source": "https://github.com/carlosas/phpat/tree/0.10.10" }, - "time": "2023-10-03T14:53:59+00:00" + "time": "2023-10-05T14:16:47+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -10723,8 +10720,7 @@ "aliases": [], "minimum-stability": "RC", "stability-flags": { - "roave/security-advisories": 20, - "phpat/phpat": 20 + "roave/security-advisories": 20 }, "prefer-stable": false, "prefer-lowest": false, From 3f82a01f98afe6bed5d41b2d3826f7c0dbc5dd91 Mon Sep 17 00:00:00 2001 From: Juan Palacios Iglesias <134798698+Juanpalacios08@users.noreply.github.com> Date: Tue, 17 Oct 2023 10:39:37 +0200 Subject: [PATCH 26/40] fix: Link to "DDD y CQRS: Preguntas Frecuentes" (#366) * fix: Link to "DDD y CQRS: Preguntas Frecuentes" * fix: Correct link to "DDD y CQRS: Preguntas Frecuentes" (codelyTv domain) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5cb549a7c..9fb85dcca 100644 --- a/README.md +++ b/README.md @@ -147,7 +147,7 @@ some guidelines feel free to contact us :) ## 🤩 Extra -This code was shown in the [From framework coupled code to #microservices through #DDD](http://codely.tv/blog/screencasts/codigo-acoplado-framework-microservicios-ddd) talk and doubts where answered in the [DDD y CQRS: Preguntas Frecuentes](http://codely.tv/screencasts/ddd-cqrs-preguntas-frecuentes/) video. +This code was shown in the [From framework coupled code to #microservices through #DDD](http://codely.tv/blog/screencasts/codigo-acoplado-framework-microservicios-ddd) talk and doubts where answered in the [DDD y CQRS: Preguntas Frecuentes](https://codely.com/blog/ddd-cqrs-preguntas-frecuentes) video. 🎥 Used in the CodelyTV Pro courses: From 805b6fff9b49d61f7a3dc78ba0a8526a52cf14dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Mon, 23 Oct 2023 11:22:04 +0200 Subject: [PATCH 27/40] feat: add codely coding style rules --- composer.json | 3 +- composer.lock | 37 +++++++++++++++- ecs.php | 115 +------------------------------------------------- 3 files changed, 40 insertions(+), 115 deletions(-) diff --git a/composer.json b/composer.json index 21706664b..641ccbc4c 100644 --- a/composer.json +++ b/composer.json @@ -60,7 +60,8 @@ "psalm/plugin-phpunit": "^0.18.4", "phpstan/phpstan": "^1.10", "phpat/phpat": "^0.10.10", - "phpmd/phpmd": "^2.14" + "phpmd/phpmd": "^2.14", + "codelytv/coding-style": "^0.9.0" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index c748430e1..19aa3da84 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": "c4ef93baa380c9d0dc5e2107e7a37d90", + "content-hash": "672d40e7ce6751fab2f182692aa96f94", "packages": [ { "name": "brick/math", @@ -6062,6 +6062,41 @@ }, "time": "2022-03-30T09:27:43+00:00" }, + { + "name": "codelytv/coding-style", + "version": "0.9.0", + "source": { + "type": "git", + "url": "https://github.com/CodelyTV/php-coding_style-codely.git", + "reference": "521ca89d79d0182cf14b4a3cc46f0a6a69b1a7ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CodelyTV/php-coding_style-codely/zipball/521ca89d79d0182cf14b4a3cc46f0a6a69b1a7ae", + "reference": "521ca89d79d0182cf14b4a3cc46f0a6a69b1a7ae", + "shasum": "" + }, + "require": { + "symplify/easy-coding-standard": "^12.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Codelytv\\CodingStyle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "description": "PHP Coding Style rules we use in Codely", + "keywords": [ + "Code style", + "static analysis" + ], + "support": { + "issues": "https://github.com/CodelyTV/php-coding_style-codely/issues", + "source": "https://github.com/CodelyTV/php-coding_style-codely/tree/0.9.0" + }, + "time": "2023-10-23T09:08:28+00:00" + }, { "name": "composer/package-versions-deprecated", "version": "1.11.99.5", diff --git a/ecs.php b/ecs.php index 62c8f5208..97f55586a 100644 --- a/ecs.php +++ b/ecs.php @@ -2,57 +2,9 @@ declare(strict_types=1); -use PhpCsFixer\Fixer\ArrayNotation\ArraySyntaxFixer; -use PhpCsFixer\Fixer\ArrayNotation\TrimArraySpacesFixer; -use PhpCsFixer\Fixer\Basic\SingleLineEmptyBodyFixer; -use PhpCsFixer\Fixer\Casing\ClassReferenceNameCasingFixer; -use PhpCsFixer\Fixer\Casing\LowercaseStaticReferenceFixer; -use PhpCsFixer\Fixer\Casing\MagicMethodCasingFixer; -use PhpCsFixer\Fixer\Casing\NativeFunctionCasingFixer; -use PhpCsFixer\Fixer\Casing\NativeFunctionTypeDeclarationCasingFixer; -use PhpCsFixer\Fixer\CastNotation\CastSpacesFixer; +use Codelytv\CodingStyle\CodelyRules; use PhpCsFixer\Fixer\ClassNotation\FinalClassFixer; -use PhpCsFixer\Fixer\ClassNotation\FinalPublicMethodForAbstractClassFixer; -use PhpCsFixer\Fixer\ClassNotation\NoBlankLinesAfterClassOpeningFixer; -use PhpCsFixer\Fixer\ClassNotation\NoNullPropertyInitializationFixer; -use PhpCsFixer\Fixer\ClassNotation\NoUnneededFinalMethodFixer; -use PhpCsFixer\Fixer\ClassNotation\OrderedTypesFixer; -use PhpCsFixer\Fixer\ClassNotation\ProtectedToPrivateFixer; -use PhpCsFixer\Fixer\ClassNotation\SelfAccessorFixer; -use PhpCsFixer\Fixer\ClassNotation\SelfStaticAccessorFixer; -use PhpCsFixer\Fixer\ClassNotation\VisibilityRequiredFixer; -use PhpCsFixer\Fixer\ClassUsage\DateTimeImmutableFixer; -use PhpCsFixer\Fixer\ControlStructure\NoUnneededControlParenthesesFixer; -use PhpCsFixer\Fixer\ControlStructure\NoUnneededCurlyBracesFixer; -use PhpCsFixer\Fixer\ControlStructure\NoUselessElseFixer; -use PhpCsFixer\Fixer\ControlStructure\SimplifiedIfReturnFixer; -use PhpCsFixer\Fixer\ControlStructure\TrailingCommaInMultilineFixer; -use PhpCsFixer\Fixer\ControlStructure\YodaStyleFixer; -use PhpCsFixer\Fixer\Import\FullyQualifiedStrictTypesFixer; -use PhpCsFixer\Fixer\Import\GlobalNamespaceImportFixer; -use PhpCsFixer\Fixer\Import\NoLeadingImportSlashFixer; -use PhpCsFixer\Fixer\Import\NoUnusedImportsFixer; -use PhpCsFixer\Fixer\Operator\AssignNullCoalescingToCoalesceEqualFixer; -use PhpCsFixer\Fixer\Operator\NoUselessConcatOperatorFixer; -use PhpCsFixer\Fixer\Operator\NoUselessNullsafeOperatorFixer; -use PhpCsFixer\Fixer\Operator\ObjectOperatorWithoutWhitespaceFixer; -use PhpCsFixer\Fixer\Operator\TernaryToElvisOperatorFixer; -use PhpCsFixer\Fixer\Operator\TernaryToNullCoalescingFixer; -use PhpCsFixer\Fixer\PhpUnit\PhpUnitConstructFixer; -use PhpCsFixer\Fixer\PhpUnit\PhpUnitDedicateAssertFixer; -use PhpCsFixer\Fixer\PhpUnit\PhpUnitDedicateAssertInternalTypeFixer; -use PhpCsFixer\Fixer\PhpUnit\PhpUnitExpectationFixer; -use PhpCsFixer\Fixer\PhpUnit\PhpUnitMethodCasingFixer; -use PhpCsFixer\Fixer\Strict\DeclareStrictTypesFixer; -use PhpCsFixer\Fixer\Strict\StrictComparisonFixer; -use PhpCsFixer\Fixer\StringNotation\SingleQuoteFixer; -use PhpCsFixer\Fixer\Whitespace\StatementIndentationFixer; -use PhpCsFixer\Fixer\Whitespace\TypeDeclarationSpacesFixer; -use PhpCsFixer\Fixer\Whitespace\TypesSpacesFixer; -use Symplify\CodingStandard\Fixer\LineLength\LineLengthFixer; -use Symplify\CodingStandard\Fixer\Strict\BlankLineAfterStrictTypesFixer; use Symplify\EasyCodingStandard\Config\ECSConfig; -use Symplify\EasyCodingStandard\ValueObject\Set\SetList; return function (ECSConfig $ecsConfig): void { $ecsConfig->paths([ @@ -61,70 +13,7 @@ __DIR__ . '/tests', ]); - $ecsConfig->sets([SetList::PSR_12]); - - $ecsConfig->rules([ - // Imports - NoUnusedImportsFixer::class, - FullyQualifiedStrictTypesFixer::class, - GlobalNamespaceImportFixer::class, - NoLeadingImportSlashFixer::class, - // Arrays - TrimArraySpacesFixer::class, - // Blank lines - BlankLineAfterStrictTypesFixer::class, - NoBlankLinesAfterClassOpeningFixer::class, - // Spacing - SingleLineEmptyBodyFixer::class, - CastSpacesFixer::class, - TypeDeclarationSpacesFixer::class, - TypesSpacesFixer::class, - // Casing - ClassReferenceNameCasingFixer::class, - LowercaseStaticReferenceFixer::class, - MagicMethodCasingFixer::class, - NativeFunctionCasingFixer::class, - NativeFunctionTypeDeclarationCasingFixer::class, - // Architecture - FinalClassFixer::class, - FinalPublicMethodForAbstractClassFixer::class, - ProtectedToPrivateFixer::class, - VisibilityRequiredFixer::class, - DateTimeImmutableFixer::class, - NoUselessElseFixer::class, - // Operator - AssignNullCoalescingToCoalesceEqualFixer::class, - NoUselessConcatOperatorFixer::class, - NoUselessNullsafeOperatorFixer::class, - ObjectOperatorWithoutWhitespaceFixer::class, - TernaryToElvisOperatorFixer::class, - TernaryToNullCoalescingFixer::class, - // Testing - PhpUnitConstructFixer::class, - PhpUnitDedicateAssertFixer::class, - PhpUnitDedicateAssertInternalTypeFixer::class, - PhpUnitExpectationFixer::class, - // Other - LineLengthFixer::class, - NoNullPropertyInitializationFixer::class, - NoUnneededFinalMethodFixer::class, - SelfAccessorFixer::class, - SelfStaticAccessorFixer::class, - NoUnneededControlParenthesesFixer::class, - NoUnneededCurlyBracesFixer::class, - SimplifiedIfReturnFixer::class, - TrailingCommaInMultilineFixer::class, - DeclareStrictTypesFixer::class, - StrictComparisonFixer::class, - SingleQuoteFixer::class, - StatementIndentationFixer::class, - ]); - - $ecsConfig->ruleWithConfiguration(ArraySyntaxFixer::class, ['syntax' => 'short']); - $ecsConfig->ruleWithConfiguration(LineLengthFixer::class, [LineLengthFixer::LINE_LENGTH => 120]); - $ecsConfig->ruleWithConfiguration(YodaStyleFixer::class, ['equal' => false, 'identical' => false, 'less_and_greater' => false]); - $ecsConfig->ruleWithConfiguration(PhpUnitMethodCasingFixer::class, ['case' => PhpUnitMethodCasingFixer::SNAKE_CASE]); - $ecsConfig->ruleWithConfiguration(OrderedTypesFixer::class, ['null_adjustment' => 'always_last']); + $ecsConfig->sets([CodelyRules::CODING_STYLE]); $ecsConfig->skip([ FinalClassFixer::class => [ From b5a9f068e60a2976c80bc32fce8190dbea1980e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Mon, 23 Oct 2023 12:07:53 +0200 Subject: [PATCH 28/40] feat: update codely coding standard (#367) --- apps/backoffice/backend/config/bundles.php | 6 +- apps/backoffice/backend/public/index.php | 14 +- .../backend/src/BackofficeBackendKernel.php | 58 ++-- .../Courses/CoursesGetController.php | 66 ++-- .../HealthCheck/HealthCheckGetController.php | 16 +- .../Controller/Metrics/MetricsController.php | 14 +- apps/backoffice/frontend/config/bundles.php | 8 +- apps/backoffice/frontend/public/index.php | 14 +- .../frontend/src/BackofficeFrontendKernel.php | 58 ++-- .../ImportCoursesToElasticsearchCommand.php | 28 +- .../Courses/CoursesGetWebController.php | 36 +-- .../Courses/CoursesPostWebController.php | 88 +++--- .../HealthCheck/HealthCheckGetController.php | 16 +- .../Controller/Home/HomeGetWebController.php | 25 +- .../Controller/Metrics/MetricsController.php | 14 +- apps/bootstrap.php | 2 +- apps/mooc/backend/config/bundles.php | 6 +- apps/mooc/backend/public/index.php | 14 +- .../MySql/ConsumeMySqlDomainEventsCommand.php | 76 ++--- .../RabbitMq/ConfigureRabbitMqCommand.php | 42 +-- .../ConsumeRabbitMqDomainEventsCommand.php | 76 ++--- ...SupervisorRabbitMqConsumerFilesCommand.php | 94 +++--- .../Courses/CoursesPutController.php | 30 +- .../CoursesCounterGetController.php | 32 +- .../HealthCheck/HealthCheckGetController.php | 20 +- .../Controller/Metrics/MetricsController.php | 14 +- apps/mooc/backend/src/MoocBackendKernel.php | 58 ++-- composer.json | 2 +- composer.lock | 23 +- .../Application/Store/DomainEventStorer.php | 20 +- .../Store/StoreDomainEventOnOccurred.php | 26 +- .../Domain/AnalyticsDomainEvent.php | 12 +- .../Domain/AnalyticsDomainEventBody.php | 10 +- .../Domain/DomainEventsRepository.php | 2 +- .../Authenticate/AuthenticateUserCommand.php | 18 +- .../AuthenticateUserCommandHandler.php | 14 +- .../Authenticate/UserAuthenticator.php | 30 +- src/Backoffice/Auth/Domain/AuthPassword.php | 8 +- src/Backoffice/Auth/Domain/AuthRepository.php | 2 +- src/Backoffice/Auth/Domain/AuthUser.php | 18 +- .../Auth/Domain/InvalidAuthCredentials.php | 8 +- .../Auth/Domain/InvalidAuthUsername.php | 8 +- .../Persistence/InMemoryAuthRepository.php | 18 +- .../Application/BackofficeCourseResponse.php | 26 +- .../Application/BackofficeCoursesResponse.php | 18 +- .../Create/BackofficeCourseCreator.php | 10 +- .../CreateBackofficeCourseOnCourseCreated.php | 18 +- .../AllBackofficeCoursesSearcher.php | 26 +- ...SearchAllBackofficeCoursesQueryHandler.php | 10 +- .../BackofficeCoursesByCriteriaSearcher.php | 34 +-- ...SearchBackofficeCoursesByCriteriaQuery.php | 64 ++-- ...ackofficeCoursesByCriteriaQueryHandler.php | 14 +- .../Courses/Domain/BackofficeCourse.php | 60 ++-- .../Domain/BackofficeCourseRepository.php | 6 +- ...lasticsearchBackofficeCourseRepository.php | 48 +-- ...nMemoryCacheBackofficeCourseRepository.php | 58 ++-- .../MySqlBackofficeCourseRepository.php | 26 +- .../Application/Create/CourseCreator.php | 14 +- .../Create/CreateCourseCommand.php | 26 +- .../Create/CreateCourseCommandHandler.php | 16 +- .../Courses/Application/Find/CourseFinder.php | 18 +- .../Application/Update/CourseRenamer.php | 24 +- src/Mooc/Courses/Domain/Course.php | 46 +-- .../Domain/CourseCreatedDomainEvent.php | 82 ++--- src/Mooc/Courses/Domain/CourseNotExist.php | 24 +- src/Mooc/Courses/Domain/CourseRepository.php | 4 +- .../Persistence/Doctrine/CourseIdType.php | 8 +- .../Persistence/DoctrineCourseRepository.php | 16 +- .../Persistence/FileCourseRepository.php | 30 +- .../Application/Find/CoursesCounterFinder.php | 18 +- .../Find/CoursesCounterResponse.php | 10 +- .../Find/FindCoursesCounterQueryHandler.php | 10 +- .../Increment/CoursesCounterIncrementer.php | 44 +-- ...IncrementCoursesCounterOnCourseCreated.php | 20 +- .../CoursesCounter/Domain/CoursesCounter.php | 98 +++--- .../CoursesCounterIncrementedDomainEvent.php | 52 ++-- .../Domain/CoursesCounterNotExist.php | 8 +- .../Domain/CoursesCounterRepository.php | 4 +- .../Domain/CoursesCounterTotal.php | 16 +- .../Doctrine/CourseCounterIdType.php | 8 +- .../Persistence/Doctrine/CourseIdsType.php | 42 +-- .../DoctrineCoursesCounterRepository.php | 16 +- src/Mooc/Shared/Domain/Videos/VideoUrl.php | 22 +- .../Doctrine/DbalTypesSearcher.php | 112 +++---- .../Doctrine/DoctrinePrefixesSearcher.php | 78 ++--- .../Doctrine/MoocEntityManagerFactory.php | 42 +-- .../Application/Create/CreateVideoCommand.php | 64 ++-- .../Create/CreateVideoCommandHandler.php | 20 +- .../Application/Create/VideoCreator.php | 14 +- .../Application/Find/FindVideoQuery.php | 10 +- .../Find/FindVideoQueryHandler.php | 22 +- .../Videos/Application/Find/VideoFinder.php | 18 +- .../Videos/Application/Find/VideoResponse.php | 14 +- .../Find/VideoResponseConverter.php | 20 +- .../Application/Trim/TrimVideoCommand.php | 26 +- .../Trim/TrimVideoCommandHandler.php | 14 +- .../Videos/Application/Trim/VideoTrimmer.php | 2 +- .../Application/Update/VideoTitleUpdater.php | 22 +- src/Mooc/Videos/Domain/Video.php | 94 +++--- .../Videos/Domain/VideoCreatedDomainEvent.php | 80 ++--- src/Mooc/Videos/Domain/VideoFinder.php | 18 +- src/Mooc/Videos/Domain/VideoNotFound.php | 24 +- src/Mooc/Videos/Domain/VideoRepository.php | 6 +- src/Mooc/Videos/Domain/VideoType.php | 4 +- src/Mooc/Videos/Domain/Videos.php | 8 +- .../Persistence/Doctrine/VideoIdType.php | 8 +- .../Persistence/VideoRepositoryMySql.php | 50 +-- src/Shared/Domain/Aggregate/AggregateRoot.php | 22 +- src/Shared/Domain/Assert.php | 26 +- src/Shared/Domain/Bus/Command/CommandBus.php | 2 +- src/Shared/Domain/Bus/Event/DomainEvent.php | 68 ++--- .../Bus/Event/DomainEventSubscriber.php | 2 +- src/Shared/Domain/Bus/Event/EventBus.php | 2 +- src/Shared/Domain/Bus/Query/QueryBus.php | 2 +- src/Shared/Domain/Collection.php | 42 +-- src/Shared/Domain/Criteria/Criteria.php | 104 +++---- src/Shared/Domain/Criteria/Filter.php | 68 ++--- src/Shared/Domain/Criteria/FilterOperator.php | 20 +- src/Shared/Domain/Criteria/Filters.php | 70 ++--- src/Shared/Domain/Criteria/Order.php | 78 ++--- src/Shared/Domain/Criteria/OrderType.php | 14 +- src/Shared/Domain/DomainError.php | 12 +- src/Shared/Domain/Logger.php | 6 +- src/Shared/Domain/Monitoring.php | 10 +- src/Shared/Domain/RandomNumberGenerator.php | 2 +- src/Shared/Domain/SecondsInterval.php | 28 +- src/Shared/Domain/Utils.php | 152 +++++----- src/Shared/Domain/UuidGenerator.php | 2 +- .../Domain/ValueObject/IntValueObject.php | 18 +- .../Domain/ValueObject/StringValueObject.php | 10 +- src/Shared/Domain/ValueObject/Uuid.php | 62 ++-- .../Bus/CallableFirstParameterExtractor.php | 122 ++++---- .../Bus/Command/CommandNotRegisteredError.php | 10 +- .../Bus/Command/InMemorySymfonyCommandBus.php | 42 +-- .../Bus/Event/DomainEventJsonDeserializer.php | 26 +- .../Bus/Event/DomainEventJsonSerializer.php | 28 +- .../Bus/Event/DomainEventMapping.php | 56 ++-- .../Event/DomainEventSubscriberLocator.php | 66 ++-- .../InMemory/InMemorySymfonyEventBus.php | 40 +-- .../MySqlDoctrineDomainEventsConsumer.php | 80 ++--- .../Bus/Event/MySql/MySqlDoctrineEventBus.php | 58 ++-- .../Bus/Event/RabbitMq/RabbitMqConfigurer.php | 168 +++++----- .../Bus/Event/RabbitMq/RabbitMqConnection.php | 108 +++---- .../RabbitMq/RabbitMqDomainEventsConsumer.php | 148 ++++----- .../Bus/Event/RabbitMq/RabbitMqEventBus.php | 78 ++--- .../RabbitMqExchangeNameFormatter.php | 16 +- .../RabbitMq/RabbitMqQueueNameFormatter.php | 60 ++-- .../WithPrometheusMonitoringEventBus.php | 38 +-- .../Bus/Query/InMemorySymfonyQueryBus.php | 40 ++- .../Bus/Query/QueryNotRegisteredError.php | 10 +- .../Doctrine/DatabaseConnections.php | 32 +- .../Dbal/DbalCustomTypesRegistrar.php | 30 +- .../Doctrine/Dbal/DoctrineCustomType.php | 2 +- .../Doctrine/DoctrineEntityManagerFactory.php | 124 ++++---- .../Elasticsearch/ElasticsearchClient.php | 38 +-- .../ElasticsearchClientFactory.php | 92 +++--- .../Infrastructure/Logger/MonologLogger.php | 26 +- .../Monitoring/PrometheusMonitor.php | 18 +- .../Doctrine/DoctrineCriteriaConverter.php | 164 +++++----- .../Doctrine/DoctrineRepository.php | 64 ++-- .../Persistence/Doctrine/UuidType.php | 48 +-- .../Elasticsearch/ElasticQueryGenerator.php | 80 ++--- .../ElasticsearchCriteriaConverter.php | 80 ++--- .../Elasticsearch/ElasticsearchRepository.php | 68 ++--- .../PhpRandomNumberGenerator.php | 8 +- .../Infrastructure/RamseyUuidGenerator.php | 8 +- .../Symfony/AddJsonBodyToRequestListener.php | 48 +-- .../Infrastructure/Symfony/ApiController.php | 44 +-- .../Symfony/ApiExceptionListener.php | 64 ++-- .../ApiExceptionsHttpStatusCodeMapping.php | 42 +-- .../Symfony/BasicHttpAuthMiddleware.php | 86 +++--- .../Infrastructure/Symfony/FlashSession.php | 60 ++-- .../Infrastructure/Symfony/WebController.php | 92 +++--- .../AuthenticateUserCommandHandlerTest.php | 64 ++-- .../AuthenticateUserCommandMother.php | 18 +- .../Auth/AuthModuleUnitTestCase.php | 26 +- .../Auth/Domain/AuthPasswordMother.php | 8 +- .../Backoffice/Auth/Domain/AuthUserMother.php | 22 +- .../Auth/Domain/AuthUsernameMother.php | 8 +- ...iceCoursesModuleInfrastructureTestCase.php | 16 +- .../Domain/BackofficeCourseCriteriaMother.php | 24 +- .../Courses/Domain/BackofficeCourseMother.php | 16 +- ...icsearchBackofficeCourseRepositoryTest.php | 87 +++--- .../MySqlBackofficeCourseRepositoryTest.php | 80 ++--- ...ackofficeContextInfrastructureTestCase.php | 26 +- .../PhpUnit/BackofficeEnvironmentArranger.php | 14 +- .../Create/CreateCourseCommandHandlerTest.php | 32 +- .../Create/CreateCourseCommandMother.php | 22 +- .../Application/Update/CourseRenamerTest.php | 50 +-- .../CoursesModuleInfrastructureTestCase.php | 8 +- .../Courses/CoursesModuleUnitTestCase.php | 42 +-- .../Domain/CourseCreatedDomainEventMother.php | 30 +- .../Courses/Domain/CourseDurationMother.php | 24 +- tests/Mooc/Courses/Domain/CourseIdMother.php | 8 +- tests/Mooc/Courses/Domain/CourseMother.php | 38 +-- .../Mooc/Courses/Domain/CourseNameMother.php | 8 +- .../Persistence/CourseRepositoryTest.php | 36 +-- .../Find/CoursesCounterResponseMother.php | 8 +- .../FindCoursesCounterQueryHandlerTest.php | 44 +-- ...ementCoursesCounterOnCourseCreatedTest.php | 86 +++--- .../CoursesCounterModuleUnitTestCase.php | 40 +-- .../Domain/CoursesCounterIdMother.php | 8 +- ...sesCounterIncrementedDomainEventMother.php | 26 +- .../Domain/CoursesCounterMother.php | 48 ++- .../Domain/CoursesCounterTotalMother.php | 24 +- tests/Mooc/MoocArchitectureTest.php | 80 ++--- .../MoocContextInfrastructureTestCase.php | 32 +- .../PhpUnit/MoocEnvironmentArranger.php | 12 +- .../Shared/Domain/Criteria/CriteriaMother.php | 24 +- .../Domain/Criteria/FilterFieldMother.php | 8 +- tests/Shared/Domain/Criteria/FilterMother.php | 54 ++-- .../Domain/Criteria/FilterValueMother.php | 8 +- .../Shared/Domain/Criteria/FiltersMother.php | 26 +- .../Shared/Domain/Criteria/OrderByMother.php | 8 +- tests/Shared/Domain/Criteria/OrderMother.php | 24 +- tests/Shared/Domain/DuplicatorMother.php | 30 +- tests/Shared/Domain/IntegerMother.php | 24 +- tests/Shared/Domain/MotherCreator.php | 10 +- tests/Shared/Domain/RandomElementPicker.php | 8 +- tests/Shared/Domain/Repeater.php | 16 +- tests/Shared/Domain/TestUtils.php | 28 +- tests/Shared/Domain/UuidMother.php | 8 +- tests/Shared/Domain/WordMother.php | 8 +- .../Infrastructure/ArchitectureTest.php | 34 +-- .../Arranger/EnvironmentArranger.php | 4 +- .../Infrastructure/Behat/ApiContext.php | 184 +++++------ .../Behat/ApplicationFeatureContext.php | 38 +-- .../Command/InMemorySymfonyCommandBusTest.php | 78 ++--- .../Event/MySql/MySqlDoctrineEventBusTest.php | 67 ++-- .../Event/RabbitMq/RabbitMqEventBusTest.php | 287 +++++++++--------- .../TestAllWorksOnRabbitMqEventsPublished.php | 10 +- .../Infrastructure/Bus/Query/FakeResponse.php | 10 +- .../Bus/Query/InMemorySymfonyQueryBusTest.php | 78 ++--- .../ConstantRandomNumberGenerator.php | 8 +- .../Doctrine/MySqlDatabaseCleaner.php | 40 +-- .../Elastic/ElasticDatabaseCleaner.php | 24 +- .../Shared/Infrastructure/Mink/MinkHelper.php | 150 +++++---- .../Mink/MinkSessionRequestHelper.php | 26 +- .../Mockery/CodelyTvMatcherIsSimilar.php | 28 +- .../AggregateRootArraySimilarComparator.php | 62 ++-- .../AggregateRootSimilarComparator.php | 118 +++---- .../Comparator/DateTimeSimilarComparator.php | 70 ++--- .../DateTimeStringSimilarComparator.php | 92 +++--- .../DomainEventArraySimilarComparator.php | 62 ++-- .../DomainEventSimilarComparator.php | 120 ++++---- .../CodelyTvConstraintIsSimilar.php | 78 ++--- .../PhpUnit/InfrastructureTestCase.php | 80 ++--- .../Infrastructure/PhpUnit/UnitTestCase.php | 164 +++++----- tests/Shared/SharedArchitectureTest.php | 80 ++--- 249 files changed, 4856 insertions(+), 4877 deletions(-) diff --git a/apps/backoffice/backend/config/bundles.php b/apps/backoffice/backend/config/bundles.php index 8455bba43..15c297c9f 100644 --- a/apps/backoffice/backend/config/bundles.php +++ b/apps/backoffice/backend/config/bundles.php @@ -3,7 +3,7 @@ declare(strict_types=1); return [ - Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], - FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['test' => true], - // WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] + Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], + FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['test' => true], + // WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] ]; diff --git a/apps/backoffice/backend/public/index.php b/apps/backoffice/backend/public/index.php index 56a52ea14..45fd7eab5 100644 --- a/apps/backoffice/backend/public/index.php +++ b/apps/backoffice/backend/public/index.php @@ -9,20 +9,20 @@ require dirname(__DIR__) . '/../../bootstrap.php'; if ($_SERVER['APP_DEBUG']) { - umask(0000); + umask(0000); - Debug::enable(); + Debug::enable(); } if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? $_ENV['TRUSTED_PROXIES'] ?? false) { - Request::setTrustedProxies( - explode(',', $trustedProxies), - Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO - ); + Request::setTrustedProxies( + explode(',', $trustedProxies), + Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO + ); } if ($trustedHosts = $_SERVER['TRUSTED_HOSTS'] ?? $_ENV['TRUSTED_HOSTS'] ?? false) { - Request::setTrustedHosts([$trustedHosts]); + Request::setTrustedHosts([$trustedHosts]); } $kernel = new BackofficeBackendKernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); diff --git a/apps/backoffice/backend/src/BackofficeBackendKernel.php b/apps/backoffice/backend/src/BackofficeBackendKernel.php index 9e25fc2cc..793ede8c0 100644 --- a/apps/backoffice/backend/src/BackofficeBackendKernel.php +++ b/apps/backoffice/backend/src/BackofficeBackendKernel.php @@ -14,33 +14,33 @@ class BackofficeBackendKernel extends Kernel { - use MicroKernelTrait; - - private const CONFIG_EXTS = '.{xml,yaml}'; - - public function registerBundles(): iterable - { - $contents = require $this->getProjectDir() . '/config/bundles.php'; - foreach ($contents as $class => $envs) { - if ($envs[$this->environment] ?? $envs['all'] ?? false) { - yield new $class(); - } - } - } - - public function getProjectDir(): string - { - return dirname(__DIR__); - } - - protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void - { - $container->addResource(new FileResource($this->getProjectDir() . '/config/bundles.php')); - $container->setParameter('container.dumper.inline_class_loader', true); - $confDir = $this->getProjectDir() . '/config'; - - $loader->load($confDir . '/services' . self::CONFIG_EXTS, 'glob'); - $loader->load($confDir . '/services_' . $this->environment . self::CONFIG_EXTS, 'glob'); - $loader->load($confDir . '/services/*' . self::CONFIG_EXTS, 'glob'); - } + use MicroKernelTrait; + + private const CONFIG_EXTS = '.{xml,yaml}'; + + public function registerBundles(): iterable + { + $contents = require $this->getProjectDir() . '/config/bundles.php'; + foreach ($contents as $class => $envs) { + if ($envs[$this->environment] ?? $envs['all'] ?? false) { + yield new $class(); + } + } + } + + public function getProjectDir(): string + { + return dirname(__DIR__); + } + + protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void + { + $container->addResource(new FileResource($this->getProjectDir() . '/config/bundles.php')); + $container->setParameter('container.dumper.inline_class_loader', true); + $confDir = $this->getProjectDir() . '/config'; + + $loader->load($confDir . '/services' . self::CONFIG_EXTS, 'glob'); + $loader->load($confDir . '/services_' . $this->environment . self::CONFIG_EXTS, 'glob'); + $loader->load($confDir . '/services/*' . self::CONFIG_EXTS, 'glob'); + } } diff --git a/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php b/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php index 11e060683..4fcf89a26 100644 --- a/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php +++ b/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php @@ -15,37 +15,37 @@ final readonly class CoursesGetController { - public function __construct(private QueryBus $queryBus) {} - - public function __invoke(Request $request): JsonResponse - { - $orderBy = $request->query->get('order_by'); - $order = $request->query->get('order'); - $limit = $request->query->get('limit'); - $offset = $request->query->get('offset'); - - /** @var BackofficeCoursesResponse $response */ - $response = $this->queryBus->ask( - new SearchBackofficeCoursesByCriteriaQuery( - (array) $request->query->get('filters'), - $orderBy, - $order, - $limit === null ? null : (int) $limit, - $offset === null ? null : (int) $offset - ) - ); - - return new JsonResponse( - map( - fn (BackofficeCourseResponse $course): array => [ - 'id' => $course->id(), - 'name' => $course->name(), - 'duration' => $course->duration(), - ], - $response->courses() - ), - 200, - ['Access-Control-Allow-Origin' => '*'] - ); - } + public function __construct(private QueryBus $queryBus) {} + + public function __invoke(Request $request): JsonResponse + { + $orderBy = $request->query->get('order_by'); + $order = $request->query->get('order'); + $limit = $request->query->get('limit'); + $offset = $request->query->get('offset'); + + /** @var BackofficeCoursesResponse $response */ + $response = $this->queryBus->ask( + new SearchBackofficeCoursesByCriteriaQuery( + (array) $request->query->get('filters'), + $orderBy, + $order, + $limit === null ? null : (int) $limit, + $offset === null ? null : (int) $offset + ) + ); + + return new JsonResponse( + map( + fn (BackofficeCourseResponse $course): array => [ + 'id' => $course->id(), + 'name' => $course->name(), + 'duration' => $course->duration(), + ], + $response->courses() + ), + 200, + ['Access-Control-Allow-Origin' => '*'] + ); + } } diff --git a/apps/backoffice/backend/src/Controller/HealthCheck/HealthCheckGetController.php b/apps/backoffice/backend/src/Controller/HealthCheck/HealthCheckGetController.php index af32d30ea..fe2256009 100644 --- a/apps/backoffice/backend/src/Controller/HealthCheck/HealthCheckGetController.php +++ b/apps/backoffice/backend/src/Controller/HealthCheck/HealthCheckGetController.php @@ -9,12 +9,12 @@ final class HealthCheckGetController { - public function __invoke(Request $request): JsonResponse - { - return new JsonResponse( - [ - 'backoffice-backend' => 'ok', - ] - ); - } + public function __invoke(Request $request): JsonResponse + { + return new JsonResponse( + [ + 'backoffice-backend' => 'ok', + ] + ); + } } diff --git a/apps/backoffice/backend/src/Controller/Metrics/MetricsController.php b/apps/backoffice/backend/src/Controller/Metrics/MetricsController.php index 21a639d9f..e0ae59059 100644 --- a/apps/backoffice/backend/src/Controller/Metrics/MetricsController.php +++ b/apps/backoffice/backend/src/Controller/Metrics/MetricsController.php @@ -11,13 +11,13 @@ final readonly class MetricsController { - public function __construct(private PrometheusMonitor $monitor) {} + public function __construct(private PrometheusMonitor $monitor) {} - public function __invoke(Request $request): Response - { - $renderer = new RenderTextFormat(); - $result = $renderer->render($this->monitor->registry()->getMetricFamilySamples()); + public function __invoke(Request $request): Response + { + $renderer = new RenderTextFormat(); + $result = $renderer->render($this->monitor->registry()->getMetricFamilySamples()); - return new Response($result, 200, ['Content-Type' => RenderTextFormat::MIME_TYPE]); - } + return new Response($result, 200, ['Content-Type' => RenderTextFormat::MIME_TYPE]); + } } diff --git a/apps/backoffice/frontend/config/bundles.php b/apps/backoffice/frontend/config/bundles.php index 0a87a7689..ef8009558 100644 --- a/apps/backoffice/frontend/config/bundles.php +++ b/apps/backoffice/frontend/config/bundles.php @@ -3,8 +3,8 @@ declare(strict_types=1); return [ - Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], - FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['test' => true], - Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], - // WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] + Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], + FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['test' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + // WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] ]; diff --git a/apps/backoffice/frontend/public/index.php b/apps/backoffice/frontend/public/index.php index 2b5d9b2d3..6dd7c188e 100644 --- a/apps/backoffice/frontend/public/index.php +++ b/apps/backoffice/frontend/public/index.php @@ -9,20 +9,20 @@ require dirname(__DIR__) . '/../../bootstrap.php'; if ($_SERVER['APP_DEBUG']) { - umask(0000); + umask(0000); - Debug::enable(); + Debug::enable(); } if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? $_ENV['TRUSTED_PROXIES'] ?? false) { - Request::setTrustedProxies( - explode(',', $trustedProxies), - Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO - ); + Request::setTrustedProxies( + explode(',', $trustedProxies), + Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO + ); } if ($trustedHosts = $_SERVER['TRUSTED_HOSTS'] ?? $_ENV['TRUSTED_HOSTS'] ?? false) { - Request::setTrustedHosts([$trustedHosts]); + Request::setTrustedHosts([$trustedHosts]); } $kernel = new BackofficeFrontendKernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); diff --git a/apps/backoffice/frontend/src/BackofficeFrontendKernel.php b/apps/backoffice/frontend/src/BackofficeFrontendKernel.php index 650c7d02b..28852a38a 100644 --- a/apps/backoffice/frontend/src/BackofficeFrontendKernel.php +++ b/apps/backoffice/frontend/src/BackofficeFrontendKernel.php @@ -14,33 +14,33 @@ class BackofficeFrontendKernel extends Kernel { - use MicroKernelTrait; - - private const CONFIG_EXTS = '.{xml,yaml}'; - - public function registerBundles(): iterable - { - $contents = require $this->getProjectDir() . '/config/bundles.php'; - foreach ($contents as $class => $envs) { - if ($envs[$this->environment] ?? $envs['all'] ?? false) { - yield new $class(); - } - } - } - - public function getProjectDir(): string - { - return dirname(__DIR__); - } - - protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void - { - $container->addResource(new FileResource($this->getProjectDir() . '/config/bundles.php')); - $container->setParameter('container.dumper.inline_class_loader', true); - $confDir = $this->getProjectDir() . '/config'; - - $loader->load($confDir . '/services' . self::CONFIG_EXTS, 'glob'); - $loader->load($confDir . '/services_' . $this->environment . self::CONFIG_EXTS, 'glob'); - $loader->load($confDir . '/services/*' . self::CONFIG_EXTS, 'glob'); - } + use MicroKernelTrait; + + private const CONFIG_EXTS = '.{xml,yaml}'; + + public function registerBundles(): iterable + { + $contents = require $this->getProjectDir() . '/config/bundles.php'; + foreach ($contents as $class => $envs) { + if ($envs[$this->environment] ?? $envs['all'] ?? false) { + yield new $class(); + } + } + } + + public function getProjectDir(): string + { + return dirname(__DIR__); + } + + protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void + { + $container->addResource(new FileResource($this->getProjectDir() . '/config/bundles.php')); + $container->setParameter('container.dumper.inline_class_loader', true); + $confDir = $this->getProjectDir() . '/config'; + + $loader->load($confDir . '/services' . self::CONFIG_EXTS, 'glob'); + $loader->load($confDir . '/services_' . $this->environment . self::CONFIG_EXTS, 'glob'); + $loader->load($confDir . '/services/*' . self::CONFIG_EXTS, 'glob'); + } } diff --git a/apps/backoffice/frontend/src/Command/ImportCoursesToElasticsearchCommand.php b/apps/backoffice/frontend/src/Command/ImportCoursesToElasticsearchCommand.php index 62948247d..c27dd2396 100644 --- a/apps/backoffice/frontend/src/Command/ImportCoursesToElasticsearchCommand.php +++ b/apps/backoffice/frontend/src/Command/ImportCoursesToElasticsearchCommand.php @@ -12,21 +12,21 @@ final class ImportCoursesToElasticsearchCommand extends Command { - public function __construct( - private readonly MySqlBackofficeCourseRepository $mySqlRepository, - private readonly ElasticsearchBackofficeCourseRepository $elasticRepository - ) { - parent::__construct(); - } + public function __construct( + private readonly MySqlBackofficeCourseRepository $mySqlRepository, + private readonly ElasticsearchBackofficeCourseRepository $elasticRepository + ) { + parent::__construct(); + } - public function execute(InputInterface $input, OutputInterface $output): int - { - $courses = $this->mySqlRepository->searchAll(); + public function execute(InputInterface $input, OutputInterface $output): int + { + $courses = $this->mySqlRepository->searchAll(); - foreach ($courses as $course) { - $this->elasticRepository->save($course); - } + foreach ($courses as $course) { + $this->elasticRepository->save($course); + } - return 0; - } + return 0; + } } diff --git a/apps/backoffice/frontend/src/Controller/Courses/CoursesGetWebController.php b/apps/backoffice/frontend/src/Controller/Courses/CoursesGetWebController.php index 6bd5b5d78..a9604d1b2 100644 --- a/apps/backoffice/frontend/src/Controller/Courses/CoursesGetWebController.php +++ b/apps/backoffice/frontend/src/Controller/Courses/CoursesGetWebController.php @@ -13,24 +13,24 @@ final class CoursesGetWebController extends WebController { - public function __invoke(Request $request): Response - { - /** @var CoursesCounterResponse $coursesCounterResponse */ - $coursesCounterResponse = $this->ask(new FindCoursesCounterQuery()); + public function __invoke(Request $request): Response + { + /** @var CoursesCounterResponse $coursesCounterResponse */ + $coursesCounterResponse = $this->ask(new FindCoursesCounterQuery()); - return $this->render( - 'pages/courses/courses.html.twig', - [ - 'title' => 'Courses', - 'description' => 'Courses CodelyTV - Backoffice', - 'courses_counter' => $coursesCounterResponse->total(), - 'new_course_id' => SimpleUuid::random()->value(), - ] - ); - } + return $this->render( + 'pages/courses/courses.html.twig', + [ + 'title' => 'Courses', + 'description' => 'Courses CodelyTV - Backoffice', + 'courses_counter' => $coursesCounterResponse->total(), + 'new_course_id' => SimpleUuid::random()->value(), + ] + ); + } - protected function exceptions(): array - { - return []; - } + protected function exceptions(): array + { + return []; + } } diff --git a/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php b/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php index 22e168f8d..625d2a1d0 100644 --- a/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php +++ b/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php @@ -14,48 +14,48 @@ final class CoursesPostWebController extends WebController { - public function __invoke(Request $request): RedirectResponse - { - $validationErrors = $this->validateRequest($request); - - return $validationErrors->count() - ? $this->redirectWithErrors('courses_get', $validationErrors, $request) - : $this->createCourse($request); - } - - protected function exceptions(): array - { - return []; - } - - private function validateRequest(Request $request): ConstraintViolationListInterface - { - $constraint = new Assert\Collection( - [ - 'id' => new Assert\Uuid(), - 'name' => [new Assert\NotBlank(), new Assert\Length(['min' => 1, 'max' => 255])], - 'duration' => [new Assert\NotBlank(), new Assert\Length(['min' => 4, 'max' => 100])], - ] - ); - - $input = $request->request->all(); - - return Validation::createValidator()->validate($input, $constraint); - } - - private function createCourse(Request $request): RedirectResponse - { - $this->dispatch( - new CreateCourseCommand( - (string) $request->request->get('id'), - (string) $request->request->get('name'), - (string) $request->request->get('duration') - ) - ); - - return $this->redirectWithMessage( - 'courses_get', - sprintf('Feliciades, el curso %s ha sido creado!', $request->request->getAlpha('name')) - ); - } + public function __invoke(Request $request): RedirectResponse + { + $validationErrors = $this->validateRequest($request); + + return $validationErrors->count() + ? $this->redirectWithErrors('courses_get', $validationErrors, $request) + : $this->createCourse($request); + } + + protected function exceptions(): array + { + return []; + } + + private function validateRequest(Request $request): ConstraintViolationListInterface + { + $constraint = new Assert\Collection( + [ + 'id' => new Assert\Uuid(), + 'name' => [new Assert\NotBlank(), new Assert\Length(['min' => 1, 'max' => 255])], + 'duration' => [new Assert\NotBlank(), new Assert\Length(['min' => 4, 'max' => 100])], + ] + ); + + $input = $request->request->all(); + + return Validation::createValidator()->validate($input, $constraint); + } + + private function createCourse(Request $request): RedirectResponse + { + $this->dispatch( + new CreateCourseCommand( + (string) $request->request->get('id'), + (string) $request->request->get('name'), + (string) $request->request->get('duration') + ) + ); + + return $this->redirectWithMessage( + 'courses_get', + sprintf('Feliciades, el curso %s ha sido creado!', $request->request->getAlpha('name')) + ); + } } diff --git a/apps/backoffice/frontend/src/Controller/HealthCheck/HealthCheckGetController.php b/apps/backoffice/frontend/src/Controller/HealthCheck/HealthCheckGetController.php index 19c48acb4..a38a47d39 100644 --- a/apps/backoffice/frontend/src/Controller/HealthCheck/HealthCheckGetController.php +++ b/apps/backoffice/frontend/src/Controller/HealthCheck/HealthCheckGetController.php @@ -9,12 +9,12 @@ final class HealthCheckGetController { - public function __invoke(Request $request): JsonResponse - { - return new JsonResponse( - [ - 'backoffice-frontend' => 'ok', - ] - ); - } + public function __invoke(Request $request): JsonResponse + { + return new JsonResponse( + [ + 'backoffice-frontend' => 'ok', + ] + ); + } } diff --git a/apps/backoffice/frontend/src/Controller/Home/HomeGetWebController.php b/apps/backoffice/frontend/src/Controller/Home/HomeGetWebController.php index 757747ac0..b318f388a 100644 --- a/apps/backoffice/frontend/src/Controller/Home/HomeGetWebController.php +++ b/apps/backoffice/frontend/src/Controller/Home/HomeGetWebController.php @@ -10,19 +10,16 @@ final class HomeGetWebController extends WebController { - public function __invoke(Request $request): Response - { - return $this->render( - 'pages/home.html.twig', - [ - 'title' => 'Welcome', - 'description' => 'CodelyTV - Backoffice', - ] - ); - } + public function __invoke(Request $request): Response + { + return $this->render('pages/home.html.twig', [ + 'title' => 'Welcome', + 'description' => 'CodelyTV - Backoffice', + ]); + } - protected function exceptions(): array - { - return []; - } + protected function exceptions(): array + { + return []; + } } diff --git a/apps/backoffice/frontend/src/Controller/Metrics/MetricsController.php b/apps/backoffice/frontend/src/Controller/Metrics/MetricsController.php index 1a853490c..a10a699ea 100644 --- a/apps/backoffice/frontend/src/Controller/Metrics/MetricsController.php +++ b/apps/backoffice/frontend/src/Controller/Metrics/MetricsController.php @@ -11,13 +11,13 @@ final readonly class MetricsController { - public function __construct(private PrometheusMonitor $monitor) {} + public function __construct(private PrometheusMonitor $monitor) {} - public function __invoke(Request $request): Response - { - $renderer = new RenderTextFormat(); - $result = $renderer->render($this->monitor->registry()->getMetricFamilySamples()); + public function __invoke(Request $request): Response + { + $renderer = new RenderTextFormat(); + $result = $renderer->render($this->monitor->registry()->getMetricFamilySamples()); - return new Response($result, 200, ['Content-Type' => RenderTextFormat::MIME_TYPE]); - } + return new Response($result, 200, ['Content-Type' => RenderTextFormat::MIME_TYPE]); + } } diff --git a/apps/bootstrap.php b/apps/bootstrap.php index 6d66dea9d..8edbfc3b1 100644 --- a/apps/bootstrap.php +++ b/apps/bootstrap.php @@ -14,4 +14,4 @@ $_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = ($_SERVER['APP_ENV'] ?? $_ENV['APP_ENV'] ?? null) ?: 'dev'; $_SERVER['APP_DEBUG'] ??= $_ENV['APP_DEBUG'] ?? $_SERVER['APP_ENV'] !== 'prod'; $_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = - (int) $_SERVER['APP_DEBUG'] || filter_var($_SERVER['APP_DEBUG'], FILTER_VALIDATE_BOOLEAN) ? '1' : '0'; + (int) $_SERVER['APP_DEBUG'] || filter_var($_SERVER['APP_DEBUG'], FILTER_VALIDATE_BOOLEAN) ? '1' : '0'; diff --git a/apps/mooc/backend/config/bundles.php b/apps/mooc/backend/config/bundles.php index 8455bba43..15c297c9f 100644 --- a/apps/mooc/backend/config/bundles.php +++ b/apps/mooc/backend/config/bundles.php @@ -3,7 +3,7 @@ declare(strict_types=1); return [ - Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], - FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['test' => true], - // WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] + Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], + FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['test' => true], + // WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] ]; diff --git a/apps/mooc/backend/public/index.php b/apps/mooc/backend/public/index.php index 4269b3810..b8655fe09 100644 --- a/apps/mooc/backend/public/index.php +++ b/apps/mooc/backend/public/index.php @@ -9,20 +9,20 @@ require dirname(__DIR__) . '/../../bootstrap.php'; if ($_SERVER['APP_DEBUG']) { - umask(0000); + umask(0000); - Debug::enable(); + Debug::enable(); } if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? $_ENV['TRUSTED_PROXIES'] ?? false) { - Request::setTrustedProxies( - explode(',', $trustedProxies), - Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO - ); + Request::setTrustedProxies( + explode(',', $trustedProxies), + Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO + ); } if ($trustedHosts = $_SERVER['TRUSTED_HOSTS'] ?? $_ENV['TRUSTED_HOSTS'] ?? false) { - Request::setTrustedHosts([$trustedHosts]); + Request::setTrustedHosts([$trustedHosts]); } $kernel = new MoocBackendKernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); diff --git a/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php b/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php index 5ce3765b6..359264a69 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php @@ -17,42 +17,42 @@ final class ConsumeMySqlDomainEventsCommand extends Command { - protected static $defaultName = 'codelytv:domain-events:mysql:consume'; - - public function __construct( - private readonly MySqlDoctrineDomainEventsConsumer $consumer, - private readonly DatabaseConnections $connections, - private readonly DomainEventSubscriberLocator $subscriberLocator - ) { - parent::__construct(); - } - - protected function configure(): void - { - $this - ->setDescription('Consume domain events from MySql') - ->addArgument('quantity', InputArgument::REQUIRED, 'Quantity of events to process'); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $quantityEventsToProcess = (int) $input->getArgument('quantity'); - - $consumer = pipe($this->consumer(), fn () => $this->connections->clear()); - - $this->consumer->consume($consumer, $quantityEventsToProcess); - - return 0; - } - - private function consumer(): callable - { - return function (DomainEvent $domainEvent): void { - $subscribers = $this->subscriberLocator->allSubscribedTo($domainEvent::class); - - foreach ($subscribers as $subscriber) { - $subscriber($domainEvent); - } - }; - } + protected static $defaultName = 'codelytv:domain-events:mysql:consume'; + + public function __construct( + private readonly MySqlDoctrineDomainEventsConsumer $consumer, + private readonly DatabaseConnections $connections, + private readonly DomainEventSubscriberLocator $subscriberLocator + ) { + parent::__construct(); + } + + protected function configure(): void + { + $this + ->setDescription('Consume domain events from MySql') + ->addArgument('quantity', InputArgument::REQUIRED, 'Quantity of events to process'); + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $quantityEventsToProcess = (int) $input->getArgument('quantity'); + + $consumer = pipe($this->consumer(), fn () => $this->connections->clear()); + + $this->consumer->consume($consumer, $quantityEventsToProcess); + + return 0; + } + + private function consumer(): callable + { + return function (DomainEvent $domainEvent): void { + $subscribers = $this->subscriberLocator->allSubscribedTo($domainEvent::class); + + foreach ($subscribers as $subscriber) { + $subscriber($domainEvent); + } + }; + } } diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php index 876cda3b3..e42c35ba6 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php @@ -12,25 +12,25 @@ final class ConfigureRabbitMqCommand extends Command { - protected static $defaultName = 'codelytv:domain-events:rabbitmq:configure'; - - public function __construct( - private readonly RabbitMqConfigurer $configurer, - private readonly string $exchangeName, - private readonly Traversable $subscribers - ) { - parent::__construct(); - } - - protected function configure(): void - { - $this->setDescription('Configure the RabbitMQ to allow publish & consume domain events'); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $this->configurer->configure($this->exchangeName, ...iterator_to_array($this->subscribers)); - - return 0; - } + protected static $defaultName = 'codelytv:domain-events:rabbitmq:configure'; + + public function __construct( + private readonly RabbitMqConfigurer $configurer, + private readonly string $exchangeName, + private readonly Traversable $subscribers + ) { + parent::__construct(); + } + + protected function configure(): void + { + $this->setDescription('Configure the RabbitMQ to allow publish & consume domain events'); + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $this->configurer->configure($this->exchangeName, ...iterator_to_array($this->subscribers)); + + return 0; + } } diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php index 802f79b22..856f40b04 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php @@ -16,42 +16,42 @@ final class ConsumeRabbitMqDomainEventsCommand extends Command { - protected static $defaultName = 'codelytv:domain-events:rabbitmq:consume'; - - public function __construct( - private readonly RabbitMqDomainEventsConsumer $consumer, - private readonly DatabaseConnections $connections, - private readonly DomainEventSubscriberLocator $locator - ) { - parent::__construct(); - } - - protected function configure(): void - { - $this - ->setDescription('Consume domain events from the RabbitMQ') - ->addArgument('queue', InputArgument::REQUIRED, 'Queue name') - ->addArgument('quantity', InputArgument::REQUIRED, 'Quantity of events to process'); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $queueName = $input->getArgument('queue'); - $eventsToProcess = (int) $input->getArgument('quantity'); - - repeat($this->consumer($queueName), $eventsToProcess); - - return 0; - } - - private function consumer(string $queueName): callable - { - return function () use ($queueName): void { - $subscriber = $this->locator->withRabbitMqQueueNamed($queueName); - - $this->consumer->consume($subscriber, $queueName); - - $this->connections->clear(); - }; - } + protected static $defaultName = 'codelytv:domain-events:rabbitmq:consume'; + + public function __construct( + private readonly RabbitMqDomainEventsConsumer $consumer, + private readonly DatabaseConnections $connections, + private readonly DomainEventSubscriberLocator $locator + ) { + parent::__construct(); + } + + protected function configure(): void + { + $this + ->setDescription('Consume domain events from the RabbitMQ') + ->addArgument('queue', InputArgument::REQUIRED, 'Queue name') + ->addArgument('quantity', InputArgument::REQUIRED, 'Quantity of events to process'); + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $queueName = $input->getArgument('queue'); + $eventsToProcess = (int) $input->getArgument('quantity'); + + repeat($this->consumer($queueName), $eventsToProcess); + + return 0; + } + + private function consumer(string $queueName): callable + { + return function () use ($queueName): void { + $subscriber = $this->locator->withRabbitMqQueueNamed($queueName); + + $this->consumer->consume($subscriber, $queueName); + + $this->connections->clear(); + }; + } } diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php index 9bd14493a..f806d57da 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php @@ -16,57 +16,57 @@ final class GenerateSupervisorRabbitMqConsumerFilesCommand extends Command { - private const EVENTS_TO_PROCESS_AT_TIME = 200; - private const NUMBERS_OF_PROCESSES_PER_SUBSCRIBER = 1; - private const SUPERVISOR_PATH = __DIR__ . '/../../../../build/supervisor'; - protected static $defaultName = 'codelytv:domain-events:rabbitmq:generate-supervisor-files'; + private const EVENTS_TO_PROCESS_AT_TIME = 200; + private const NUMBERS_OF_PROCESSES_PER_SUBSCRIBER = 1; + private const SUPERVISOR_PATH = __DIR__ . '/../../../../build/supervisor'; + protected static $defaultName = 'codelytv:domain-events:rabbitmq:generate-supervisor-files'; - public function __construct(private readonly DomainEventSubscriberLocator $locator) - { - parent::__construct(); - } + public function __construct(private readonly DomainEventSubscriberLocator $locator) + { + parent::__construct(); + } - protected function configure(): void - { - $this - ->setDescription('Generate the supervisor configuration for every RabbitMQ subscriber') - ->addArgument('command-path', InputArgument::OPTIONAL, 'Path on this is gonna be deployed', '/var/www'); - } + protected function configure(): void + { + $this + ->setDescription('Generate the supervisor configuration for every RabbitMQ subscriber') + ->addArgument('command-path', InputArgument::OPTIONAL, 'Path on this is gonna be deployed', '/var/www'); + } - protected function execute(InputInterface $input, OutputInterface $output): int - { - $path = $input->getArgument('command-path'); + protected function execute(InputInterface $input, OutputInterface $output): int + { + $path = $input->getArgument('command-path'); - each($this->configCreator($path), $this->locator->all()); + each($this->configCreator($path), $this->locator->all()); - return 0; - } + return 0; + } - private function configCreator(string $path): callable - { - return function (DomainEventSubscriber $subscriber) use ($path): void { - $queueName = RabbitMqQueueNameFormatter::format($subscriber); - $subscriberName = RabbitMqQueueNameFormatter::shortFormat($subscriber); + private function configCreator(string $path): callable + { + return function (DomainEventSubscriber $subscriber) use ($path): void { + $queueName = RabbitMqQueueNameFormatter::format($subscriber); + $subscriberName = RabbitMqQueueNameFormatter::shortFormat($subscriber); - $fileContent = str_replace( - ['{subscriber_name}', '{queue_name}', '{path}', '{processes}', '{events_to_process}', ], - [ - $subscriberName, - $queueName, - $path, - self::NUMBERS_OF_PROCESSES_PER_SUBSCRIBER, - self::EVENTS_TO_PROCESS_AT_TIME, - ], - $this->template() - ); + $fileContent = str_replace( + ['{subscriber_name}', '{queue_name}', '{path}', '{processes}', '{events_to_process}', ], + [ + $subscriberName, + $queueName, + $path, + self::NUMBERS_OF_PROCESSES_PER_SUBSCRIBER, + self::EVENTS_TO_PROCESS_AT_TIME, + ], + $this->template() + ); - file_put_contents($this->fileName($subscriberName), $fileContent); - }; - } + file_put_contents($this->fileName($subscriberName), $fileContent); + }; + } - private function template(): string - { - return <<dispatch( - new CreateCourseCommand( - $id, - (string) $request->request->get('name'), - (string) $request->request->get('duration') - ) - ); + public function __invoke(string $id, Request $request): Response + { + $this->dispatch( + new CreateCourseCommand( + $id, + (string) $request->request->get('name'), + (string) $request->request->get('duration') + ) + ); - return new Response('', Response::HTTP_CREATED); - } + return new Response('', Response::HTTP_CREATED); + } - protected function exceptions(): array - { - return []; - } + protected function exceptions(): array + { + return []; + } } diff --git a/apps/mooc/backend/src/Controller/CoursesCounter/CoursesCounterGetController.php b/apps/mooc/backend/src/Controller/CoursesCounter/CoursesCounterGetController.php index 22df95571..0fb94b6ff 100644 --- a/apps/mooc/backend/src/Controller/CoursesCounter/CoursesCounterGetController.php +++ b/apps/mooc/backend/src/Controller/CoursesCounter/CoursesCounterGetController.php @@ -13,22 +13,22 @@ final class CoursesCounterGetController extends ApiController { - public function __invoke(): JsonResponse - { - /** @var CoursesCounterResponse $response */ - $response = $this->ask(new FindCoursesCounterQuery()); + public function __invoke(): JsonResponse + { + /** @var CoursesCounterResponse $response */ + $response = $this->ask(new FindCoursesCounterQuery()); - return new JsonResponse( - [ - 'total' => $response->total(), - ] - ); - } + return new JsonResponse( + [ + 'total' => $response->total(), + ] + ); + } - protected function exceptions(): array - { - return [ - CoursesCounterNotExist::class => Response::HTTP_NOT_FOUND, - ]; - } + protected function exceptions(): array + { + return [ + CoursesCounterNotExist::class => Response::HTTP_NOT_FOUND, + ]; + } } diff --git a/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php b/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php index d500d03bb..1c20feae2 100644 --- a/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php +++ b/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php @@ -10,15 +10,15 @@ final readonly class HealthCheckGetController { - public function __construct(private RandomNumberGenerator $generator) {} + public function __construct(private RandomNumberGenerator $generator) {} - public function __invoke(Request $request): JsonResponse - { - return new JsonResponse( - [ - 'mooc-backend' => 'ok', - 'rand' => $this->generator->generate(), - ] - ); - } + public function __invoke(Request $request): JsonResponse + { + return new JsonResponse( + [ + 'mooc-backend' => 'ok', + 'rand' => $this->generator->generate(), + ] + ); + } } diff --git a/apps/mooc/backend/src/Controller/Metrics/MetricsController.php b/apps/mooc/backend/src/Controller/Metrics/MetricsController.php index 18619a02c..9db1cebc2 100644 --- a/apps/mooc/backend/src/Controller/Metrics/MetricsController.php +++ b/apps/mooc/backend/src/Controller/Metrics/MetricsController.php @@ -11,13 +11,13 @@ final readonly class MetricsController { - public function __construct(private PrometheusMonitor $monitor) {} + public function __construct(private PrometheusMonitor $monitor) {} - public function __invoke(Request $request): Response - { - $renderer = new RenderTextFormat(); - $result = $renderer->render($this->monitor->registry()->getMetricFamilySamples()); + public function __invoke(Request $request): Response + { + $renderer = new RenderTextFormat(); + $result = $renderer->render($this->monitor->registry()->getMetricFamilySamples()); - return new Response($result, 200, ['Content-Type' => RenderTextFormat::MIME_TYPE]); - } + return new Response($result, 200, ['Content-Type' => RenderTextFormat::MIME_TYPE]); + } } diff --git a/apps/mooc/backend/src/MoocBackendKernel.php b/apps/mooc/backend/src/MoocBackendKernel.php index 9a5b3e1bc..afc22aca7 100644 --- a/apps/mooc/backend/src/MoocBackendKernel.php +++ b/apps/mooc/backend/src/MoocBackendKernel.php @@ -14,33 +14,33 @@ class MoocBackendKernel extends Kernel { - use MicroKernelTrait; - - private const CONFIG_EXTS = '.{xml,yaml}'; - - public function registerBundles(): iterable - { - $contents = require $this->getProjectDir() . '/config/bundles.php'; - foreach ($contents as $class => $envs) { - if ($envs[$this->environment] ?? $envs['all'] ?? false) { - yield new $class(); - } - } - } - - public function getProjectDir(): string - { - return dirname(__DIR__); - } - - protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void - { - $container->addResource(new FileResource($this->getProjectDir() . '/config/bundles.php')); - $container->setParameter('container.dumper.inline_class_loader', true); - $confDir = $this->getProjectDir() . '/config'; - - $loader->load($confDir . '/services' . self::CONFIG_EXTS, 'glob'); - $loader->load($confDir . '/services_' . $this->environment . self::CONFIG_EXTS, 'glob'); - $loader->load($confDir . '/services/*' . self::CONFIG_EXTS, 'glob'); - } + use MicroKernelTrait; + + private const CONFIG_EXTS = '.{xml,yaml}'; + + public function registerBundles(): iterable + { + $contents = require $this->getProjectDir() . '/config/bundles.php'; + foreach ($contents as $class => $envs) { + if ($envs[$this->environment] ?? $envs['all'] ?? false) { + yield new $class(); + } + } + } + + public function getProjectDir(): string + { + return dirname(__DIR__); + } + + protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void + { + $container->addResource(new FileResource($this->getProjectDir() . '/config/bundles.php')); + $container->setParameter('container.dumper.inline_class_loader', true); + $confDir = $this->getProjectDir() . '/config'; + + $loader->load($confDir . '/services' . self::CONFIG_EXTS, 'glob'); + $loader->load($confDir . '/services_' . $this->environment . self::CONFIG_EXTS, 'glob'); + $loader->load($confDir . '/services/*' . self::CONFIG_EXTS, 'glob'); + } } diff --git a/composer.json b/composer.json index 641ccbc4c..a616f67eb 100644 --- a/composer.json +++ b/composer.json @@ -61,7 +61,7 @@ "phpstan/phpstan": "^1.10", "phpat/phpat": "^0.10.10", "phpmd/phpmd": "^2.14", - "codelytv/coding-style": "^0.9.0" + "codelytv/coding-style": "^1.0" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index 19aa3da84..7f2369ac4 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": "672d40e7ce6751fab2f182692aa96f94", + "content-hash": "ba195cf69db5f97d61146955643ca749", "packages": [ { "name": "brick/math", @@ -6064,16 +6064,16 @@ }, { "name": "codelytv/coding-style", - "version": "0.9.0", + "version": "1.0.0", "source": { "type": "git", "url": "https://github.com/CodelyTV/php-coding_style-codely.git", - "reference": "521ca89d79d0182cf14b4a3cc46f0a6a69b1a7ae" + "reference": "6aa1ff99eb1ac817dbf2be6bf3288b7925784e9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CodelyTV/php-coding_style-codely/zipball/521ca89d79d0182cf14b4a3cc46f0a6a69b1a7ae", - "reference": "521ca89d79d0182cf14b4a3cc46f0a6a69b1a7ae", + "url": "https://api.github.com/repos/CodelyTV/php-coding_style-codely/zipball/6aa1ff99eb1ac817dbf2be6bf3288b7925784e9d", + "reference": "6aa1ff99eb1ac817dbf2be6bf3288b7925784e9d", "shasum": "" }, "require": { @@ -6086,6 +6086,9 @@ } }, "notification-url": "https://packagist.org/downloads/", + "license": [ + "AGPL-3.0-or-later" + ], "description": "PHP Coding Style rules we use in Codely", "keywords": [ "Code style", @@ -6093,9 +6096,15 @@ ], "support": { "issues": "https://github.com/CodelyTV/php-coding_style-codely/issues", - "source": "https://github.com/CodelyTV/php-coding_style-codely/tree/0.9.0" + "source": "https://github.com/CodelyTV/php-coding_style-codely/tree/1.0.0" }, - "time": "2023-10-23T09:08:28+00:00" + "funding": [ + { + "url": "https://bit.ly/CodelyTvPro", + "type": "custom" + } + ], + "time": "2023-10-23T09:55:18+00:00" }, { "name": "composer/package-versions-deprecated", diff --git a/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php b/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php index e5205d311..22dfbb7ba 100644 --- a/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php +++ b/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php @@ -13,16 +13,16 @@ final readonly class DomainEventStorer { - public function __construct(private DomainEventsRepository $repository) {} + public function __construct(private DomainEventsRepository $repository) {} - public function store( - AnalyticsDomainEventId $id, - AnalyticsDomainEventAggregateId $aggregateId, - AnalyticsDomainEventName $name, - AnalyticsDomainEventBody $body - ): void { - $domainEvent = new AnalyticsDomainEvent($id, $aggregateId, $name, $body); + public function store( + AnalyticsDomainEventId $id, + AnalyticsDomainEventAggregateId $aggregateId, + AnalyticsDomainEventName $name, + AnalyticsDomainEventBody $body + ): void { + $domainEvent = new AnalyticsDomainEvent($id, $aggregateId, $name, $body); - $this->repository->save($domainEvent); - } + $this->repository->save($domainEvent); + } } diff --git a/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php b/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php index 011a0abe7..5607d45ce 100644 --- a/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php +++ b/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php @@ -13,20 +13,20 @@ final readonly class StoreDomainEventOnOccurred implements DomainEventSubscriber { - public function __construct(private DomainEventStorer $storer) {} + public function __construct(private DomainEventStorer $storer) {} - public static function subscribedTo(): array - { - return [DomainEvent::class]; - } + public static function subscribedTo(): array + { + return [DomainEvent::class]; + } - public function __invoke(DomainEvent $event): void - { - $id = new AnalyticsDomainEventId($event->eventId()); - $aggregateId = new AnalyticsDomainEventAggregateId($event->aggregateId()); - $name = new AnalyticsDomainEventName($event::eventName()); - $body = new AnalyticsDomainEventBody($event->toPrimitives()); + public function __invoke(DomainEvent $event): void + { + $id = new AnalyticsDomainEventId($event->eventId()); + $aggregateId = new AnalyticsDomainEventAggregateId($event->aggregateId()); + $name = new AnalyticsDomainEventName($event::eventName()); + $body = new AnalyticsDomainEventBody($event->toPrimitives()); - $this->storer->store($id, $aggregateId, $name, $body); - } + $this->storer->store($id, $aggregateId, $name, $body); + } } diff --git a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php index 0297eb90c..db3fe917e 100644 --- a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php +++ b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php @@ -6,10 +6,10 @@ final readonly class AnalyticsDomainEvent { - public function __construct( - private AnalyticsDomainEventId $id, - private AnalyticsDomainEventAggregateId $aggregateId, - private AnalyticsDomainEventName $name, - private AnalyticsDomainEventBody $body - ) {} + public function __construct( + private AnalyticsDomainEventId $id, + private AnalyticsDomainEventAggregateId $aggregateId, + private AnalyticsDomainEventName $name, + private AnalyticsDomainEventBody $body + ) {} } diff --git a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php index 1f5b227f1..65bbb6c03 100644 --- a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php +++ b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php @@ -6,10 +6,10 @@ final readonly class AnalyticsDomainEventBody { - public function __construct(private array $value) {} + public function __construct(private array $value) {} - public function value(): array - { - return $this->value; - } + public function value(): array + { + return $this->value; + } } diff --git a/src/Analytics/DomainEvents/Domain/DomainEventsRepository.php b/src/Analytics/DomainEvents/Domain/DomainEventsRepository.php index 028572b7d..655b450d0 100644 --- a/src/Analytics/DomainEvents/Domain/DomainEventsRepository.php +++ b/src/Analytics/DomainEvents/Domain/DomainEventsRepository.php @@ -6,5 +6,5 @@ interface DomainEventsRepository { - public function save(AnalyticsDomainEvent $event): void; + public function save(AnalyticsDomainEvent $event): void; } diff --git a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php index 320a2ae48..3ca7806a0 100644 --- a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php +++ b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php @@ -8,15 +8,15 @@ final readonly class AuthenticateUserCommand implements Command { - public function __construct(private string $username, private string $password) {} + public function __construct(private string $username, private string $password) {} - public function username(): string - { - return $this->username; - } + public function username(): string + { + return $this->username; + } - public function password(): string - { - return $this->password; - } + public function password(): string + { + return $this->password; + } } diff --git a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php index 9d4d53c7b..6278c023d 100644 --- a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php +++ b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php @@ -10,13 +10,13 @@ final readonly class AuthenticateUserCommandHandler implements CommandHandler { - public function __construct(private UserAuthenticator $authenticator) {} + public function __construct(private UserAuthenticator $authenticator) {} - public function __invoke(AuthenticateUserCommand $command): void - { - $username = new AuthUsername($command->username()); - $password = new AuthPassword($command->password()); + public function __invoke(AuthenticateUserCommand $command): void + { + $username = new AuthUsername($command->username()); + $password = new AuthPassword($command->password()); - $this->authenticator->authenticate($username, $password); - } + $this->authenticator->authenticate($username, $password); + } } diff --git a/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php b/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php index 149b30029..99bcf5dfe 100644 --- a/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php +++ b/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php @@ -13,23 +13,23 @@ final readonly class UserAuthenticator { - public function __construct(private AuthRepository $repository) {} + public function __construct(private AuthRepository $repository) {} - public function authenticate(AuthUsername $username, AuthPassword $password): void - { - $auth = $this->repository->search($username); + public function authenticate(AuthUsername $username, AuthPassword $password): void + { + $auth = $this->repository->search($username); - if ($auth === null) { - throw new InvalidAuthUsername($username); - } + if ($auth === null) { + throw new InvalidAuthUsername($username); + } - $this->ensureCredentialsAreValid($auth, $password); - } + $this->ensureCredentialsAreValid($auth, $password); + } - private function ensureCredentialsAreValid(AuthUser $auth, AuthPassword $password): void - { - if (!$auth->passwordMatches($password)) { - throw new InvalidAuthCredentials($auth->username()); - } - } + private function ensureCredentialsAreValid(AuthUser $auth, AuthPassword $password): void + { + if (!$auth->passwordMatches($password)) { + throw new InvalidAuthCredentials($auth->username()); + } + } } diff --git a/src/Backoffice/Auth/Domain/AuthPassword.php b/src/Backoffice/Auth/Domain/AuthPassword.php index 9437c09f8..ec76483a7 100644 --- a/src/Backoffice/Auth/Domain/AuthPassword.php +++ b/src/Backoffice/Auth/Domain/AuthPassword.php @@ -8,8 +8,8 @@ final class AuthPassword extends StringValueObject { - public function isEquals(self $other): bool - { - return $this->value() === $other->value(); - } + public function isEquals(self $other): bool + { + return $this->value() === $other->value(); + } } diff --git a/src/Backoffice/Auth/Domain/AuthRepository.php b/src/Backoffice/Auth/Domain/AuthRepository.php index ac1bf2334..49088ecd2 100644 --- a/src/Backoffice/Auth/Domain/AuthRepository.php +++ b/src/Backoffice/Auth/Domain/AuthRepository.php @@ -6,5 +6,5 @@ interface AuthRepository { - public function search(AuthUsername $username): ?AuthUser; + public function search(AuthUsername $username): ?AuthUser; } diff --git a/src/Backoffice/Auth/Domain/AuthUser.php b/src/Backoffice/Auth/Domain/AuthUser.php index 99b0e97e8..5be0b4b51 100644 --- a/src/Backoffice/Auth/Domain/AuthUser.php +++ b/src/Backoffice/Auth/Domain/AuthUser.php @@ -6,15 +6,15 @@ final readonly class AuthUser { - public function __construct(private AuthUsername $username, private AuthPassword $password) {} + public function __construct(private AuthUsername $username, private AuthPassword $password) {} - public function passwordMatches(AuthPassword $password): bool - { - return $this->password->isEquals($password); - } + public function passwordMatches(AuthPassword $password): bool + { + return $this->password->isEquals($password); + } - public function username(): AuthUsername - { - return $this->username; - } + public function username(): AuthUsername + { + return $this->username; + } } diff --git a/src/Backoffice/Auth/Domain/InvalidAuthCredentials.php b/src/Backoffice/Auth/Domain/InvalidAuthCredentials.php index b5a87059f..1854118bd 100644 --- a/src/Backoffice/Auth/Domain/InvalidAuthCredentials.php +++ b/src/Backoffice/Auth/Domain/InvalidAuthCredentials.php @@ -8,8 +8,8 @@ final class InvalidAuthCredentials extends RuntimeException { - public function __construct(AuthUsername $username) - { - parent::__construct(sprintf('The credentials for <%s> are invalid', $username->value())); - } + public function __construct(AuthUsername $username) + { + parent::__construct(sprintf('The credentials for <%s> are invalid', $username->value())); + } } diff --git a/src/Backoffice/Auth/Domain/InvalidAuthUsername.php b/src/Backoffice/Auth/Domain/InvalidAuthUsername.php index c00e0b5f3..b120207cb 100644 --- a/src/Backoffice/Auth/Domain/InvalidAuthUsername.php +++ b/src/Backoffice/Auth/Domain/InvalidAuthUsername.php @@ -8,8 +8,8 @@ final class InvalidAuthUsername extends RuntimeException { - public function __construct(AuthUsername $username) - { - parent::__construct(sprintf('The user <%s> does not exists', $username->value())); - } + public function __construct(AuthUsername $username) + { + parent::__construct(sprintf('The user <%s> does not exists', $username->value())); + } } diff --git a/src/Backoffice/Auth/Infrastructure/Persistence/InMemoryAuthRepository.php b/src/Backoffice/Auth/Infrastructure/Persistence/InMemoryAuthRepository.php index eed7b9bd0..dea981f8a 100644 --- a/src/Backoffice/Auth/Infrastructure/Persistence/InMemoryAuthRepository.php +++ b/src/Backoffice/Auth/Infrastructure/Persistence/InMemoryAuthRepository.php @@ -13,15 +13,15 @@ final class InMemoryAuthRepository implements AuthRepository { - private const USERS = [ - 'javi' => 'barbitas', - 'rafa' => 'pelazo', - ]; + private const USERS = [ + 'javi' => 'barbitas', + 'rafa' => 'pelazo', + ]; - public function search(AuthUsername $username): ?AuthUser - { - $password = get($username->value(), self::USERS); + public function search(AuthUsername $username): ?AuthUser + { + $password = get($username->value(), self::USERS); - return $password !== null ? new AuthUser($username, new AuthPassword($password)) : null; - } + return $password !== null ? new AuthUser($username, new AuthPassword($password)) : null; + } } diff --git a/src/Backoffice/Courses/Application/BackofficeCourseResponse.php b/src/Backoffice/Courses/Application/BackofficeCourseResponse.php index 1b684f4af..d7984b858 100644 --- a/src/Backoffice/Courses/Application/BackofficeCourseResponse.php +++ b/src/Backoffice/Courses/Application/BackofficeCourseResponse.php @@ -6,20 +6,20 @@ final readonly class BackofficeCourseResponse { - public function __construct(private string $id, private string $name, private string $duration) {} + public function __construct(private string $id, private string $name, private string $duration) {} - public function id(): string - { - return $this->id; - } + public function id(): string + { + return $this->id; + } - public function name(): string - { - return $this->name; - } + public function name(): string + { + return $this->name; + } - public function duration(): string - { - return $this->duration; - } + public function duration(): string + { + return $this->duration; + } } diff --git a/src/Backoffice/Courses/Application/BackofficeCoursesResponse.php b/src/Backoffice/Courses/Application/BackofficeCoursesResponse.php index 973202782..489841794 100644 --- a/src/Backoffice/Courses/Application/BackofficeCoursesResponse.php +++ b/src/Backoffice/Courses/Application/BackofficeCoursesResponse.php @@ -8,15 +8,15 @@ final class BackofficeCoursesResponse implements Response { - private readonly array $courses; + private readonly array $courses; - public function __construct(BackofficeCourseResponse ...$courses) - { - $this->courses = $courses; - } + public function __construct(BackofficeCourseResponse ...$courses) + { + $this->courses = $courses; + } - public function courses(): array - { - return $this->courses; - } + public function courses(): array + { + return $this->courses; + } } diff --git a/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php b/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php index aaf185801..8493f6a46 100644 --- a/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php +++ b/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php @@ -9,10 +9,10 @@ final readonly class BackofficeCourseCreator { - public function __construct(private BackofficeCourseRepository $repository) {} + public function __construct(private BackofficeCourseRepository $repository) {} - public function create(string $id, string $name, string $duration): void - { - $this->repository->save(new BackofficeCourse($id, $name, $duration)); - } + public function create(string $id, string $name, string $duration): void + { + $this->repository->save(new BackofficeCourse($id, $name, $duration)); + } } diff --git a/src/Backoffice/Courses/Application/Create/CreateBackofficeCourseOnCourseCreated.php b/src/Backoffice/Courses/Application/Create/CreateBackofficeCourseOnCourseCreated.php index 7b67f9575..06ecd9541 100644 --- a/src/Backoffice/Courses/Application/Create/CreateBackofficeCourseOnCourseCreated.php +++ b/src/Backoffice/Courses/Application/Create/CreateBackofficeCourseOnCourseCreated.php @@ -9,15 +9,15 @@ final readonly class CreateBackofficeCourseOnCourseCreated implements DomainEventSubscriber { - public function __construct(private BackofficeCourseCreator $creator) {} + public function __construct(private BackofficeCourseCreator $creator) {} - public static function subscribedTo(): array - { - return [CourseCreatedDomainEvent::class]; - } + public static function subscribedTo(): array + { + return [CourseCreatedDomainEvent::class]; + } - public function __invoke(CourseCreatedDomainEvent $event): void - { - $this->creator->create($event->aggregateId(), $event->name(), $event->duration()); - } + public function __invoke(CourseCreatedDomainEvent $event): void + { + $this->creator->create($event->aggregateId(), $event->name(), $event->duration()); + } } diff --git a/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php b/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php index 8cae9cc1d..8cb541d64 100644 --- a/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php +++ b/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php @@ -13,19 +13,19 @@ final readonly class AllBackofficeCoursesSearcher { - public function __construct(private BackofficeCourseRepository $repository) {} + public function __construct(private BackofficeCourseRepository $repository) {} - public function searchAll(): BackofficeCoursesResponse - { - return new BackofficeCoursesResponse(...map($this->toResponse(), $this->repository->searchAll())); - } + public function searchAll(): BackofficeCoursesResponse + { + return new BackofficeCoursesResponse(...map($this->toResponse(), $this->repository->searchAll())); + } - private function toResponse(): callable - { - return static fn (BackofficeCourse $course): BackofficeCourseResponse => new BackofficeCourseResponse( - $course->id(), - $course->name(), - $course->duration() - ); - } + private function toResponse(): callable + { + return static fn (BackofficeCourse $course): BackofficeCourseResponse => new BackofficeCourseResponse( + $course->id(), + $course->name(), + $course->duration() + ); + } } diff --git a/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQueryHandler.php b/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQueryHandler.php index 7688fc8c3..552bb73a5 100644 --- a/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQueryHandler.php +++ b/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQueryHandler.php @@ -9,10 +9,10 @@ final readonly class SearchAllBackofficeCoursesQueryHandler implements QueryHandler { - public function __construct(private AllBackofficeCoursesSearcher $searcher) {} + public function __construct(private AllBackofficeCoursesSearcher $searcher) {} - public function __invoke(SearchAllBackofficeCoursesQuery $query): BackofficeCoursesResponse - { - return $this->searcher->searchAll(); - } + public function __invoke(SearchAllBackofficeCoursesQuery $query): BackofficeCoursesResponse + { + return $this->searcher->searchAll(); + } } diff --git a/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php b/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php index 07e09e980..4ed2280a4 100644 --- a/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php +++ b/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php @@ -16,21 +16,21 @@ final readonly class BackofficeCoursesByCriteriaSearcher { - public function __construct(private BackofficeCourseRepository $repository) {} - - public function search(Filters $filters, Order $order, ?int $limit, ?int $offset): BackofficeCoursesResponse - { - $criteria = new Criteria($filters, $order, $offset, $limit); - - return new BackofficeCoursesResponse(...map($this->toResponse(), $this->repository->matching($criteria))); - } - - private function toResponse(): callable - { - return static fn (BackofficeCourse $course): BackofficeCourseResponse => new BackofficeCourseResponse( - $course->id(), - $course->name(), - $course->duration() - ); - } + public function __construct(private BackofficeCourseRepository $repository) {} + + public function search(Filters $filters, Order $order, ?int $limit, ?int $offset): BackofficeCoursesResponse + { + $criteria = new Criteria($filters, $order, $offset, $limit); + + return new BackofficeCoursesResponse(...map($this->toResponse(), $this->repository->matching($criteria))); + } + + private function toResponse(): callable + { + return static fn (BackofficeCourse $course): BackofficeCourseResponse => new BackofficeCourseResponse( + $course->id(), + $course->name(), + $course->duration() + ); + } } diff --git a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQuery.php b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQuery.php index 87eb2a648..3833cd4e5 100644 --- a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQuery.php +++ b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQuery.php @@ -8,36 +8,36 @@ final readonly class SearchBackofficeCoursesByCriteriaQuery implements Query { - public function __construct( - private array $filters, - private ?string $orderBy, - private ?string $order, - private ?int $limit, - private ?int $offset - ) {} - - public function filters(): array - { - return $this->filters; - } - - public function orderBy(): ?string - { - return $this->orderBy; - } - - public function order(): ?string - { - return $this->order; - } - - public function limit(): ?int - { - return $this->limit; - } - - public function offset(): ?int - { - return $this->offset; - } + public function __construct( + private array $filters, + private ?string $orderBy, + private ?string $order, + private ?int $limit, + private ?int $offset + ) {} + + public function filters(): array + { + return $this->filters; + } + + public function orderBy(): ?string + { + return $this->orderBy; + } + + public function order(): ?string + { + return $this->order; + } + + public function limit(): ?int + { + return $this->limit; + } + + public function offset(): ?int + { + return $this->offset; + } } diff --git a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php index 4228431c0..9be731db6 100644 --- a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php +++ b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php @@ -11,13 +11,13 @@ final readonly class SearchBackofficeCoursesByCriteriaQueryHandler implements QueryHandler { - public function __construct(private BackofficeCoursesByCriteriaSearcher $searcher) {} + public function __construct(private BackofficeCoursesByCriteriaSearcher $searcher) {} - public function __invoke(SearchBackofficeCoursesByCriteriaQuery $query): BackofficeCoursesResponse - { - $filters = Filters::fromValues($query->filters()); - $order = Order::fromValues($query->orderBy(), $query->order()); + public function __invoke(SearchBackofficeCoursesByCriteriaQuery $query): BackofficeCoursesResponse + { + $filters = Filters::fromValues($query->filters()); + $order = Order::fromValues($query->orderBy(), $query->order()); - return $this->searcher->search($filters, $order, $query->limit(), $query->offset()); - } + return $this->searcher->search($filters, $order, $query->limit(), $query->offset()); + } } diff --git a/src/Backoffice/Courses/Domain/BackofficeCourse.php b/src/Backoffice/Courses/Domain/BackofficeCourse.php index 8bffd93a8..85bc4ea53 100644 --- a/src/Backoffice/Courses/Domain/BackofficeCourse.php +++ b/src/Backoffice/Courses/Domain/BackofficeCourse.php @@ -8,34 +8,34 @@ final class BackofficeCourse extends AggregateRoot { - public function __construct(private readonly string $id, private readonly string $name, private readonly string $duration) {} - - public static function fromPrimitives(array $primitives): self - { - return new self($primitives['id'], $primitives['name'], $primitives['duration']); - } - - public function toPrimitives(): array - { - return [ - 'id' => $this->id, - 'name' => $this->name, - 'duration' => $this->duration, - ]; - } - - public function id(): string - { - return $this->id; - } - - public function name(): string - { - return $this->name; - } - - public function duration(): string - { - return $this->duration; - } + public function __construct(private readonly string $id, private readonly string $name, private readonly string $duration) {} + + public static function fromPrimitives(array $primitives): self + { + return new self($primitives['id'], $primitives['name'], $primitives['duration']); + } + + public function toPrimitives(): array + { + return [ + 'id' => $this->id, + 'name' => $this->name, + 'duration' => $this->duration, + ]; + } + + public function id(): string + { + return $this->id; + } + + public function name(): string + { + return $this->name; + } + + public function duration(): string + { + return $this->duration; + } } diff --git a/src/Backoffice/Courses/Domain/BackofficeCourseRepository.php b/src/Backoffice/Courses/Domain/BackofficeCourseRepository.php index 1f8d82c40..815a0a6b3 100644 --- a/src/Backoffice/Courses/Domain/BackofficeCourseRepository.php +++ b/src/Backoffice/Courses/Domain/BackofficeCourseRepository.php @@ -8,9 +8,9 @@ interface BackofficeCourseRepository { - public function save(BackofficeCourse $course): void; + public function save(BackofficeCourse $course): void; - public function searchAll(): array; + public function searchAll(): array; - public function matching(Criteria $criteria): array; + public function matching(Criteria $criteria): array; } diff --git a/src/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepository.php b/src/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepository.php index be8074d61..3a359ce41 100644 --- a/src/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepository.php +++ b/src/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepository.php @@ -13,28 +13,28 @@ final class ElasticsearchBackofficeCourseRepository extends ElasticsearchRepository implements BackofficeCourseRepository { - public function save(BackofficeCourse $course): void - { - $this->persist($course->id(), $course->toPrimitives()); - } - - public function searchAll(): array - { - return map($this->toCourse(), $this->searchAllInElastic()); - } - - public function matching(Criteria $criteria): array - { - return map($this->toCourse(), $this->searchByCriteria($criteria)); - } - - protected function aggregateName(): string - { - return 'courses'; - } - - private function toCourse(): callable - { - return static fn (array $primitives): BackofficeCourse => BackofficeCourse::fromPrimitives($primitives); - } + public function save(BackofficeCourse $course): void + { + $this->persist($course->id(), $course->toPrimitives()); + } + + public function searchAll(): array + { + return map($this->toCourse(), $this->searchAllInElastic()); + } + + public function matching(Criteria $criteria): array + { + return map($this->toCourse(), $this->searchByCriteria($criteria)); + } + + protected function aggregateName(): string + { + return 'courses'; + } + + private function toCourse(): callable + { + return static fn (array $primitives): BackofficeCourse => BackofficeCourse::fromPrimitives($primitives); + } } diff --git a/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php b/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php index 4f892381d..d2d84c341 100644 --- a/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php +++ b/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php @@ -12,33 +12,33 @@ final class InMemoryCacheBackofficeCourseRepository implements BackofficeCourseRepository { - private static array $allCoursesCache = []; - private static array $matchingCache = []; - - public function __construct(private readonly BackofficeCourseRepository $repository) {} - - public function save(BackofficeCourse $course): void - { - $this->repository->save($course); - } - - public function searchAll(): array - { - return empty(self::$allCoursesCache) ? $this->searchAllAndFillCache() : self::$allCoursesCache; - } - - public function matching(Criteria $criteria): array - { - return get($criteria->serialize(), self::$matchingCache) ?: $this->searchMatchingAndFillCache($criteria); - } - - private function searchAllAndFillCache(): array - { - return self::$allCoursesCache = $this->repository->searchAll(); - } - - private function searchMatchingAndFillCache(Criteria $criteria): array - { - return self::$matchingCache[$criteria->serialize()] = $this->repository->matching($criteria); - } + private static array $allCoursesCache = []; + private static array $matchingCache = []; + + public function __construct(private readonly BackofficeCourseRepository $repository) {} + + public function save(BackofficeCourse $course): void + { + $this->repository->save($course); + } + + public function searchAll(): array + { + return empty(self::$allCoursesCache) ? $this->searchAllAndFillCache() : self::$allCoursesCache; + } + + public function matching(Criteria $criteria): array + { + return get($criteria->serialize(), self::$matchingCache) ?: $this->searchMatchingAndFillCache($criteria); + } + + private function searchAllAndFillCache(): array + { + return self::$allCoursesCache = $this->repository->searchAll(); + } + + private function searchMatchingAndFillCache(Criteria $criteria): array + { + return self::$matchingCache[$criteria->serialize()] = $this->repository->matching($criteria); + } } diff --git a/src/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepository.php b/src/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepository.php index 8203a7fee..46891200b 100644 --- a/src/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepository.php +++ b/src/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepository.php @@ -12,20 +12,20 @@ final class MySqlBackofficeCourseRepository extends DoctrineRepository implements BackofficeCourseRepository { - public function save(BackofficeCourse $course): void - { - $this->persist($course); - } + public function save(BackofficeCourse $course): void + { + $this->persist($course); + } - public function searchAll(): array - { - return $this->repository(BackofficeCourse::class)->findAll(); - } + public function searchAll(): array + { + return $this->repository(BackofficeCourse::class)->findAll(); + } - public function matching(Criteria $criteria): array - { - $doctrineCriteria = DoctrineCriteriaConverter::convert($criteria); + public function matching(Criteria $criteria): array + { + $doctrineCriteria = DoctrineCriteriaConverter::convert($criteria); - return $this->repository(BackofficeCourse::class)->matching($doctrineCriteria)->toArray(); - } + return $this->repository(BackofficeCourse::class)->matching($doctrineCriteria)->toArray(); + } } diff --git a/src/Mooc/Courses/Application/Create/CourseCreator.php b/src/Mooc/Courses/Application/Create/CourseCreator.php index 8147a6002..12b07bed4 100644 --- a/src/Mooc/Courses/Application/Create/CourseCreator.php +++ b/src/Mooc/Courses/Application/Create/CourseCreator.php @@ -13,13 +13,13 @@ final readonly class CourseCreator { - public function __construct(private CourseRepository $repository, private EventBus $bus) {} + public function __construct(private CourseRepository $repository, private EventBus $bus) {} - public function __invoke(CourseId $id, CourseName $name, CourseDuration $duration): void - { - $course = Course::create($id, $name, $duration); + public function __invoke(CourseId $id, CourseName $name, CourseDuration $duration): void + { + $course = Course::create($id, $name, $duration); - $this->repository->save($course); - $this->bus->publish(...$course->pullDomainEvents()); - } + $this->repository->save($course); + $this->bus->publish(...$course->pullDomainEvents()); + } } diff --git a/src/Mooc/Courses/Application/Create/CreateCourseCommand.php b/src/Mooc/Courses/Application/Create/CreateCourseCommand.php index 239223fe8..e710c86a9 100644 --- a/src/Mooc/Courses/Application/Create/CreateCourseCommand.php +++ b/src/Mooc/Courses/Application/Create/CreateCourseCommand.php @@ -8,20 +8,20 @@ final readonly class CreateCourseCommand implements Command { - public function __construct(private string $id, private string $name, private string $duration) {} + public function __construct(private string $id, private string $name, private string $duration) {} - public function id(): string - { - return $this->id; - } + public function id(): string + { + return $this->id; + } - public function name(): string - { - return $this->name; - } + public function name(): string + { + return $this->name; + } - public function duration(): string - { - return $this->duration; - } + public function duration(): string + { + return $this->duration; + } } diff --git a/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php b/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php index f251c1e1a..e4685c5cb 100644 --- a/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php +++ b/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php @@ -11,14 +11,14 @@ final readonly class CreateCourseCommandHandler implements CommandHandler { - public function __construct(private CourseCreator $creator) {} + public function __construct(private CourseCreator $creator) {} - public function __invoke(CreateCourseCommand $command): void - { - $id = new CourseId($command->id()); - $name = new CourseName($command->name()); - $duration = new CourseDuration($command->duration()); + public function __invoke(CreateCourseCommand $command): void + { + $id = new CourseId($command->id()); + $name = new CourseName($command->name()); + $duration = new CourseDuration($command->duration()); - $this->creator->__invoke($id, $name, $duration); - } + $this->creator->__invoke($id, $name, $duration); + } } diff --git a/src/Mooc/Courses/Application/Find/CourseFinder.php b/src/Mooc/Courses/Application/Find/CourseFinder.php index c59f5e62b..695e2aef7 100644 --- a/src/Mooc/Courses/Application/Find/CourseFinder.php +++ b/src/Mooc/Courses/Application/Find/CourseFinder.php @@ -11,16 +11,16 @@ final readonly class CourseFinder { - public function __construct(private CourseRepository $repository) {} + public function __construct(private CourseRepository $repository) {} - public function __invoke(CourseId $id): Course - { - $course = $this->repository->search($id); + public function __invoke(CourseId $id): Course + { + $course = $this->repository->search($id); - if ($course === null) { - throw new CourseNotExist($id); - } + if ($course === null) { + throw new CourseNotExist($id); + } - return $course; - } + return $course; + } } diff --git a/src/Mooc/Courses/Application/Update/CourseRenamer.php b/src/Mooc/Courses/Application/Update/CourseRenamer.php index ba96d9970..77c8632d4 100644 --- a/src/Mooc/Courses/Application/Update/CourseRenamer.php +++ b/src/Mooc/Courses/Application/Update/CourseRenamer.php @@ -12,20 +12,20 @@ final readonly class CourseRenamer { - private CourseFinder $finder; + private CourseFinder $finder; - public function __construct(private CourseRepository $repository, private EventBus $bus) - { - $this->finder = new CourseFinder($repository); - } + public function __construct(private CourseRepository $repository, private EventBus $bus) + { + $this->finder = new CourseFinder($repository); + } - public function __invoke(CourseId $id, CourseName $newName): void - { - $course = $this->finder->__invoke($id); + public function __invoke(CourseId $id, CourseName $newName): void + { + $course = $this->finder->__invoke($id); - $course->rename($newName); + $course->rename($newName); - $this->repository->save($course); - $this->bus->publish(...$course->pullDomainEvents()); - } + $this->repository->save($course); + $this->bus->publish(...$course->pullDomainEvents()); + } } diff --git a/src/Mooc/Courses/Domain/Course.php b/src/Mooc/Courses/Domain/Course.php index cdd5484c1..854ecdd4e 100644 --- a/src/Mooc/Courses/Domain/Course.php +++ b/src/Mooc/Courses/Domain/Course.php @@ -9,34 +9,34 @@ final class Course extends AggregateRoot { - public function __construct(private readonly CourseId $id, private CourseName $name, private readonly CourseDuration $duration) {} + public function __construct(private readonly CourseId $id, private CourseName $name, private readonly CourseDuration $duration) {} - public static function create(CourseId $id, CourseName $name, CourseDuration $duration): self - { - $course = new self($id, $name, $duration); + public static function create(CourseId $id, CourseName $name, CourseDuration $duration): self + { + $course = new self($id, $name, $duration); - $course->record(new CourseCreatedDomainEvent($id->value(), $name->value(), $duration->value())); + $course->record(new CourseCreatedDomainEvent($id->value(), $name->value(), $duration->value())); - return $course; - } + return $course; + } - public function id(): CourseId - { - return $this->id; - } + public function id(): CourseId + { + return $this->id; + } - public function name(): CourseName - { - return $this->name; - } + public function name(): CourseName + { + return $this->name; + } - public function duration(): CourseDuration - { - return $this->duration; - } + public function duration(): CourseDuration + { + return $this->duration; + } - public function rename(CourseName $newName): void - { - $this->name = $newName; - } + public function rename(CourseName $newName): void + { + $this->name = $newName; + } } diff --git a/src/Mooc/Courses/Domain/CourseCreatedDomainEvent.php b/src/Mooc/Courses/Domain/CourseCreatedDomainEvent.php index 4d6525403..69e89f799 100644 --- a/src/Mooc/Courses/Domain/CourseCreatedDomainEvent.php +++ b/src/Mooc/Courses/Domain/CourseCreatedDomainEvent.php @@ -8,45 +8,45 @@ final class CourseCreatedDomainEvent extends DomainEvent { - public function __construct( - string $id, - private readonly string $name, - private readonly string $duration, - string $eventId = null, - string $occurredOn = null - ) { - parent::__construct($id, $eventId, $occurredOn); - } - - public static function eventName(): string - { - return 'course.created'; - } - - public static function fromPrimitives( - string $aggregateId, - array $body, - string $eventId, - string $occurredOn - ): DomainEvent { - return new self($aggregateId, $body['name'], $body['duration'], $eventId, $occurredOn); - } - - public function toPrimitives(): array - { - return [ - 'name' => $this->name, - 'duration' => $this->duration, - ]; - } - - public function name(): string - { - return $this->name; - } - - public function duration(): string - { - return $this->duration; - } + public function __construct( + string $id, + private readonly string $name, + private readonly string $duration, + string $eventId = null, + string $occurredOn = null + ) { + parent::__construct($id, $eventId, $occurredOn); + } + + public static function eventName(): string + { + return 'course.created'; + } + + public static function fromPrimitives( + string $aggregateId, + array $body, + string $eventId, + string $occurredOn + ): DomainEvent { + return new self($aggregateId, $body['name'], $body['duration'], $eventId, $occurredOn); + } + + public function toPrimitives(): array + { + return [ + 'name' => $this->name, + 'duration' => $this->duration, + ]; + } + + public function name(): string + { + return $this->name; + } + + public function duration(): string + { + return $this->duration; + } } diff --git a/src/Mooc/Courses/Domain/CourseNotExist.php b/src/Mooc/Courses/Domain/CourseNotExist.php index ab3e95e4d..c91f35340 100644 --- a/src/Mooc/Courses/Domain/CourseNotExist.php +++ b/src/Mooc/Courses/Domain/CourseNotExist.php @@ -9,18 +9,18 @@ final class CourseNotExist extends DomainError { - public function __construct(private readonly CourseId $id) - { - parent::__construct(); - } + public function __construct(private readonly CourseId $id) + { + parent::__construct(); + } - public function errorCode(): string - { - return 'course_not_exist'; - } + public function errorCode(): string + { + return 'course_not_exist'; + } - protected function errorMessage(): string - { - return sprintf('The course <%s> does not exist', $this->id->value()); - } + protected function errorMessage(): string + { + return sprintf('The course <%s> does not exist', $this->id->value()); + } } diff --git a/src/Mooc/Courses/Domain/CourseRepository.php b/src/Mooc/Courses/Domain/CourseRepository.php index bf12fad1b..338ad9500 100644 --- a/src/Mooc/Courses/Domain/CourseRepository.php +++ b/src/Mooc/Courses/Domain/CourseRepository.php @@ -8,7 +8,7 @@ interface CourseRepository { - public function save(Course $course): void; + public function save(Course $course): void; - public function search(CourseId $id): ?Course; + public function search(CourseId $id): ?Course; } diff --git a/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/CourseIdType.php b/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/CourseIdType.php index 6cbc8d60c..389f9fb53 100644 --- a/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/CourseIdType.php +++ b/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/CourseIdType.php @@ -9,8 +9,8 @@ final class CourseIdType extends UuidType { - protected function typeClassName(): string - { - return CourseId::class; - } + protected function typeClassName(): string + { + return CourseId::class; + } } diff --git a/src/Mooc/Courses/Infrastructure/Persistence/DoctrineCourseRepository.php b/src/Mooc/Courses/Infrastructure/Persistence/DoctrineCourseRepository.php index b17007d92..376c47039 100644 --- a/src/Mooc/Courses/Infrastructure/Persistence/DoctrineCourseRepository.php +++ b/src/Mooc/Courses/Infrastructure/Persistence/DoctrineCourseRepository.php @@ -11,13 +11,13 @@ final class DoctrineCourseRepository extends DoctrineRepository implements CourseRepository { - public function save(Course $course): void - { - $this->persist($course); - } + public function save(Course $course): void + { + $this->persist($course); + } - public function search(CourseId $id): ?Course - { - return $this->repository(Course::class)->find($id); - } + public function search(CourseId $id): ?Course + { + return $this->repository(Course::class)->find($id); + } } diff --git a/src/Mooc/Courses/Infrastructure/Persistence/FileCourseRepository.php b/src/Mooc/Courses/Infrastructure/Persistence/FileCourseRepository.php index 05124081d..b6a15ecbd 100644 --- a/src/Mooc/Courses/Infrastructure/Persistence/FileCourseRepository.php +++ b/src/Mooc/Courses/Infrastructure/Persistence/FileCourseRepository.php @@ -10,22 +10,22 @@ final class FileCourseRepository implements CourseRepository { - private const FILE_PATH = __DIR__ . '/courses'; + private const FILE_PATH = __DIR__ . '/courses'; - public function save(Course $course): void - { - file_put_contents($this->fileName($course->id()->value()), serialize($course)); - } + public function save(Course $course): void + { + file_put_contents($this->fileName($course->id()->value()), serialize($course)); + } - public function search(CourseId $id): ?Course - { - return file_exists($this->fileName($id->value())) - ? unserialize(file_get_contents($this->fileName($id->value()))) - : null; - } + public function search(CourseId $id): ?Course + { + return file_exists($this->fileName($id->value())) + ? unserialize(file_get_contents($this->fileName($id->value()))) + : null; + } - private function fileName(string $id): string - { - return sprintf('%s.%s.repo', self::FILE_PATH, $id); - } + private function fileName(string $id): string + { + return sprintf('%s.%s.repo', self::FILE_PATH, $id); + } } diff --git a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php index d82d01a2c..000422643 100644 --- a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php +++ b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php @@ -9,16 +9,16 @@ final readonly class CoursesCounterFinder { - public function __construct(private CoursesCounterRepository $repository) {} + public function __construct(private CoursesCounterRepository $repository) {} - public function __invoke(): CoursesCounterResponse - { - $counter = $this->repository->search(); + public function __invoke(): CoursesCounterResponse + { + $counter = $this->repository->search(); - if ($counter === null) { - throw new CoursesCounterNotExist(); - } + if ($counter === null) { + throw new CoursesCounterNotExist(); + } - return new CoursesCounterResponse($counter->total()->value()); - } + return new CoursesCounterResponse($counter->total()->value()); + } } diff --git a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php index b7ddf5618..21e8a0811 100644 --- a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php +++ b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php @@ -8,10 +8,10 @@ final readonly class CoursesCounterResponse implements Response { - public function __construct(private int $total) {} + public function __construct(private int $total) {} - public function total(): int - { - return $this->total; - } + public function total(): int + { + return $this->total; + } } diff --git a/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php b/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php index d4952b13e..cedb24b1c 100644 --- a/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php +++ b/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php @@ -8,10 +8,10 @@ final readonly class FindCoursesCounterQueryHandler implements QueryHandler { - public function __construct(private CoursesCounterFinder $finder) {} + public function __construct(private CoursesCounterFinder $finder) {} - public function __invoke(FindCoursesCounterQuery $query): CoursesCounterResponse - { - return $this->finder->__invoke(); - } + public function __invoke(FindCoursesCounterQuery $query): CoursesCounterResponse + { + return $this->finder->__invoke(); + } } diff --git a/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php b/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php index 9a2fe67bc..b1131d11d 100644 --- a/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php +++ b/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php @@ -13,26 +13,26 @@ final readonly class CoursesCounterIncrementer { - public function __construct( - private CoursesCounterRepository $repository, - private UuidGenerator $uuidGenerator, - private EventBus $bus - ) {} - - public function __invoke(CourseId $courseId): void - { - $counter = $this->repository->search() ?: $this->initializeCounter(); - - if (!$counter->hasIncremented($courseId)) { - $counter->increment($courseId); - - $this->repository->save($counter); - $this->bus->publish(...$counter->pullDomainEvents()); - } - } - - private function initializeCounter(): CoursesCounter - { - return CoursesCounter::initialize(new CoursesCounterId($this->uuidGenerator->generate())); - } + public function __construct( + private CoursesCounterRepository $repository, + private UuidGenerator $uuidGenerator, + private EventBus $bus + ) {} + + public function __invoke(CourseId $courseId): void + { + $counter = $this->repository->search() ?: $this->initializeCounter(); + + if (!$counter->hasIncremented($courseId)) { + $counter->increment($courseId); + + $this->repository->save($counter); + $this->bus->publish(...$counter->pullDomainEvents()); + } + } + + private function initializeCounter(): CoursesCounter + { + return CoursesCounter::initialize(new CoursesCounterId($this->uuidGenerator->generate())); + } } diff --git a/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php b/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php index 8925dc255..d561d7686 100644 --- a/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php +++ b/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php @@ -12,17 +12,17 @@ final readonly class IncrementCoursesCounterOnCourseCreated implements DomainEventSubscriber { - public function __construct(private CoursesCounterIncrementer $incrementer) {} + public function __construct(private CoursesCounterIncrementer $incrementer) {} - public static function subscribedTo(): array - { - return [CourseCreatedDomainEvent::class]; - } + public static function subscribedTo(): array + { + return [CourseCreatedDomainEvent::class]; + } - public function __invoke(CourseCreatedDomainEvent $event): void - { - $courseId = new CourseId($event->aggregateId()); + public function __invoke(CourseCreatedDomainEvent $event): void + { + $courseId = new CourseId($event->aggregateId()); - apply($this->incrementer, [$courseId]); - } + apply($this->incrementer, [$courseId]); + } } diff --git a/src/Mooc/CoursesCounter/Domain/CoursesCounter.php b/src/Mooc/CoursesCounter/Domain/CoursesCounter.php index 0a6ed0d11..3d89a5da0 100644 --- a/src/Mooc/CoursesCounter/Domain/CoursesCounter.php +++ b/src/Mooc/CoursesCounter/Domain/CoursesCounter.php @@ -11,53 +11,53 @@ final class CoursesCounter extends AggregateRoot { - private array $existingCourses; - - public function __construct( - private readonly CoursesCounterId $id, - private CoursesCounterTotal $total, - CourseId ...$existingCourses - ) { - $this->existingCourses = $existingCourses; - } - - public static function initialize(CoursesCounterId $id): self - { - return new self($id, CoursesCounterTotal::initialize()); - } - - public function id(): CoursesCounterId - { - return $this->id; - } - - public function total(): CoursesCounterTotal - { - return $this->total; - } - - public function existingCourses(): array - { - return $this->existingCourses; - } - - public function increment(CourseId $courseId): void - { - $this->total = $this->total->increment(); - $this->existingCourses[] = $courseId; - - $this->record(new CoursesCounterIncrementedDomainEvent($this->id()->value(), $this->total()->value())); - } - - public function hasIncremented(CourseId $courseId): bool - { - $existingCourse = search($this->courseIdComparator($courseId), $this->existingCourses()); - - return $existingCourse !== null; - } - - private function courseIdComparator(CourseId $courseId): callable - { - return static fn (CourseId $other): bool => $courseId->equals($other); - } + private array $existingCourses; + + public function __construct( + private readonly CoursesCounterId $id, + private CoursesCounterTotal $total, + CourseId ...$existingCourses + ) { + $this->existingCourses = $existingCourses; + } + + public static function initialize(CoursesCounterId $id): self + { + return new self($id, CoursesCounterTotal::initialize()); + } + + public function id(): CoursesCounterId + { + return $this->id; + } + + public function total(): CoursesCounterTotal + { + return $this->total; + } + + public function existingCourses(): array + { + return $this->existingCourses; + } + + public function increment(CourseId $courseId): void + { + $this->total = $this->total->increment(); + $this->existingCourses[] = $courseId; + + $this->record(new CoursesCounterIncrementedDomainEvent($this->id()->value(), $this->total()->value())); + } + + public function hasIncremented(CourseId $courseId): bool + { + $existingCourse = search($this->courseIdComparator($courseId), $this->existingCourses()); + + return $existingCourse !== null; + } + + private function courseIdComparator(CourseId $courseId): callable + { + return static fn (CourseId $other): bool => $courseId->equals($other); + } } diff --git a/src/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEvent.php b/src/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEvent.php index 4867871db..a64681dc7 100644 --- a/src/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEvent.php +++ b/src/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEvent.php @@ -8,33 +8,33 @@ final class CoursesCounterIncrementedDomainEvent extends DomainEvent { - public function __construct( - string $aggregateId, - private readonly int $total, - string $eventId = null, - string $occurredOn = null - ) { - parent::__construct($aggregateId, $eventId, $occurredOn); - } + public function __construct( + string $aggregateId, + private readonly int $total, + string $eventId = null, + string $occurredOn = null + ) { + parent::__construct($aggregateId, $eventId, $occurredOn); + } - public static function eventName(): string - { - return 'courses_counter.incremented'; - } + public static function eventName(): string + { + return 'courses_counter.incremented'; + } - public static function fromPrimitives( - string $aggregateId, - array $body, - string $eventId, - string $occurredOn - ): DomainEvent { - return new self($aggregateId, $body['total'], $eventId, $occurredOn); - } + public static function fromPrimitives( + string $aggregateId, + array $body, + string $eventId, + string $occurredOn + ): DomainEvent { + return new self($aggregateId, $body['total'], $eventId, $occurredOn); + } - public function toPrimitives(): array - { - return [ - 'total' => $this->total, - ]; - } + public function toPrimitives(): array + { + return [ + 'total' => $this->total, + ]; + } } diff --git a/src/Mooc/CoursesCounter/Domain/CoursesCounterNotExist.php b/src/Mooc/CoursesCounter/Domain/CoursesCounterNotExist.php index 5650c9267..a882cdc38 100644 --- a/src/Mooc/CoursesCounter/Domain/CoursesCounterNotExist.php +++ b/src/Mooc/CoursesCounter/Domain/CoursesCounterNotExist.php @@ -8,8 +8,8 @@ final class CoursesCounterNotExist extends RuntimeException { - public function __construct() - { - parent::__construct('The courses counter not exist'); - } + public function __construct() + { + parent::__construct('The courses counter not exist'); + } } diff --git a/src/Mooc/CoursesCounter/Domain/CoursesCounterRepository.php b/src/Mooc/CoursesCounter/Domain/CoursesCounterRepository.php index 4dcd67d05..d2f875b70 100644 --- a/src/Mooc/CoursesCounter/Domain/CoursesCounterRepository.php +++ b/src/Mooc/CoursesCounter/Domain/CoursesCounterRepository.php @@ -6,7 +6,7 @@ interface CoursesCounterRepository { - public function save(CoursesCounter $counter): void; + public function save(CoursesCounter $counter): void; - public function search(): ?CoursesCounter; + public function search(): ?CoursesCounter; } diff --git a/src/Mooc/CoursesCounter/Domain/CoursesCounterTotal.php b/src/Mooc/CoursesCounter/Domain/CoursesCounterTotal.php index 619ca19bb..6446125fa 100644 --- a/src/Mooc/CoursesCounter/Domain/CoursesCounterTotal.php +++ b/src/Mooc/CoursesCounter/Domain/CoursesCounterTotal.php @@ -8,13 +8,13 @@ final class CoursesCounterTotal extends IntValueObject { - public static function initialize(): self - { - return new self(0); - } + public static function initialize(): self + { + return new self(0); + } - public function increment(): self - { - return new self($this->value() + 1); - } + public function increment(): self + { + return new self($this->value() + 1); + } } diff --git a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseCounterIdType.php b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseCounterIdType.php index 7a300a2bc..6a2c5d95a 100644 --- a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseCounterIdType.php +++ b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseCounterIdType.php @@ -9,8 +9,8 @@ final class CourseCounterIdType extends UuidType { - protected function typeClassName(): string - { - return CoursesCounterId::class; - } + protected function typeClassName(): string + { + return CoursesCounterId::class; + } } diff --git a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php index b618ad93d..b0563bcf5 100644 --- a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php +++ b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php @@ -13,25 +13,25 @@ final class CourseIdsType extends JsonType implements DoctrineCustomType { - public static function customTypeName(): string - { - return 'course_ids'; - } - - public function getName(): string - { - return self::customTypeName(); - } - - public function convertToDatabaseValue($value, AbstractPlatform $platform) - { - return parent::convertToDatabaseValue(map(fn (CourseId $id): string => $id->value(), $value), $platform); - } - - public function convertToPHPValue($value, AbstractPlatform $platform) - { - $scalars = parent::convertToPHPValue($value, $platform); - - return map(fn (string $value): CourseId => new CourseId($value), $scalars); - } + public static function customTypeName(): string + { + return 'course_ids'; + } + + public function getName(): string + { + return self::customTypeName(); + } + + public function convertToDatabaseValue($value, AbstractPlatform $platform) + { + return parent::convertToDatabaseValue(map(fn (CourseId $id): string => $id->value(), $value), $platform); + } + + public function convertToPHPValue($value, AbstractPlatform $platform) + { + $scalars = parent::convertToPHPValue($value, $platform); + + return map(fn (string $value): CourseId => new CourseId($value), $scalars); + } } diff --git a/src/Mooc/CoursesCounter/Infrastructure/Persistence/DoctrineCoursesCounterRepository.php b/src/Mooc/CoursesCounter/Infrastructure/Persistence/DoctrineCoursesCounterRepository.php index 2de9f4ebc..64622b072 100644 --- a/src/Mooc/CoursesCounter/Infrastructure/Persistence/DoctrineCoursesCounterRepository.php +++ b/src/Mooc/CoursesCounter/Infrastructure/Persistence/DoctrineCoursesCounterRepository.php @@ -10,13 +10,13 @@ final class DoctrineCoursesCounterRepository extends DoctrineRepository implements CoursesCounterRepository { - public function save(CoursesCounter $counter): void - { - $this->persist($counter); - } + public function save(CoursesCounter $counter): void + { + $this->persist($counter); + } - public function search(): ?CoursesCounter - { - return $this->repository(CoursesCounter::class)->findOneBy([]); - } + public function search(): ?CoursesCounter + { + return $this->repository(CoursesCounter::class)->findOneBy([]); + } } diff --git a/src/Mooc/Shared/Domain/Videos/VideoUrl.php b/src/Mooc/Shared/Domain/Videos/VideoUrl.php index 9eae75f37..bb5d099d4 100644 --- a/src/Mooc/Shared/Domain/Videos/VideoUrl.php +++ b/src/Mooc/Shared/Domain/Videos/VideoUrl.php @@ -9,17 +9,17 @@ final class VideoUrl extends StringValueObject { - public function __construct(string $value) - { - $this->ensureIsValidUrl($value); + public function __construct(string $value) + { + $this->ensureIsValidUrl($value); - parent::__construct($value); - } + parent::__construct($value); + } - private function ensureIsValidUrl(string $url): void - { - if (filter_var($url, FILTER_VALIDATE_URL) === false) { - throw new InvalidArgumentException(sprintf('The url <%s> is not well formatted', $url)); - } - } + private function ensureIsValidUrl(string $url): void + { + if (filter_var($url, FILTER_VALIDATE_URL) === false) { + throw new InvalidArgumentException(sprintf('The url <%s> is not well formatted', $url)); + } + } } diff --git a/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php b/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php index a6df25c8b..7b203d1fa 100644 --- a/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php +++ b/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php @@ -12,60 +12,60 @@ final class DbalTypesSearcher { - private const MAPPINGS_PATH = 'Infrastructure/Persistence/Doctrine'; - - public static function inPath(string $path, string $contextName): array - { - $possibleDbalDirectories = self::possibleDbalPaths($path); - $dbalDirectories = filter(self::isExistingDbalPath(), $possibleDbalDirectories); - - return reduce(self::dbalClassesSearcher($contextName), $dbalDirectories, []); - } - - private static function modulesInPath(string $path): array - { - return filter( - static fn (string $possibleModule): bool => !in_array($possibleModule, ['.', '..'], true), - scandir($path) - ); - } - - private static function possibleDbalPaths(string $path): array - { - return map( - static function (mixed $_unused, string $module) use ($path) { - $mappingsPath = self::MAPPINGS_PATH; - - return realpath("$path/$module/$mappingsPath"); - }, - array_flip(self::modulesInPath($path)) - ); - } - - private static function isExistingDbalPath(): callable - { - return static fn (string $path): bool => !empty($path); - } - - private static function dbalClassesSearcher(string $contextName): callable - { - return static function (array $totalNamespaces, string $path) use ($contextName): array { - $possibleFiles = scandir($path); - $files = filter(static fn (string $file): bool => Utils::endsWith('Type.php', $file), $possibleFiles); - - $namespaces = map( - static function (string $file) use ($path, $contextName): string { - $fullPath = "$path/$file"; - $splittedPath = explode("/src/$contextName/", $fullPath); - - $classWithoutPrefix = str_replace(['.php', '/'], ['', '\\'], $splittedPath[1]); - - return "CodelyTv\\$contextName\\$classWithoutPrefix"; - }, - $files - ); - - return array_merge($totalNamespaces, $namespaces); - }; - } + private const MAPPINGS_PATH = 'Infrastructure/Persistence/Doctrine'; + + public static function inPath(string $path, string $contextName): array + { + $possibleDbalDirectories = self::possibleDbalPaths($path); + $dbalDirectories = filter(self::isExistingDbalPath(), $possibleDbalDirectories); + + return reduce(self::dbalClassesSearcher($contextName), $dbalDirectories, []); + } + + private static function modulesInPath(string $path): array + { + return filter( + static fn (string $possibleModule): bool => !in_array($possibleModule, ['.', '..'], true), + scandir($path) + ); + } + + private static function possibleDbalPaths(string $path): array + { + return map( + static function (mixed $_unused, string $module) use ($path) { + $mappingsPath = self::MAPPINGS_PATH; + + return realpath("$path/$module/$mappingsPath"); + }, + array_flip(self::modulesInPath($path)) + ); + } + + private static function isExistingDbalPath(): callable + { + return static fn (string $path): bool => !empty($path); + } + + private static function dbalClassesSearcher(string $contextName): callable + { + return static function (array $totalNamespaces, string $path) use ($contextName): array { + $possibleFiles = scandir($path); + $files = filter(static fn (string $file): bool => Utils::endsWith('Type.php', $file), $possibleFiles); + + $namespaces = map( + static function (string $file) use ($path, $contextName): string { + $fullPath = "$path/$file"; + $splittedPath = explode("/src/$contextName/", $fullPath); + + $classWithoutPrefix = str_replace(['.php', '/'], ['', '\\'], $splittedPath[1]); + + return "CodelyTv\\$contextName\\$classWithoutPrefix"; + }, + $files + ); + + return array_merge($totalNamespaces, $namespaces); + }; + } } diff --git a/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php b/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php index ac1ae3c2e..85f65ed63 100644 --- a/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php +++ b/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php @@ -10,43 +10,43 @@ final class DoctrinePrefixesSearcher { - private const MAPPINGS_PATH = 'Infrastructure/Persistence/Doctrine'; - - public static function inPath(string $path, string $baseNamespace): array - { - $possibleMappingDirectories = self::possibleMappingPaths($path); - $mappingDirectories = filter(self::isExistingMappingPath(), $possibleMappingDirectories); - - return array_flip(reindex(self::namespaceFormatter($baseNamespace), $mappingDirectories)); - } - - private static function modulesInPath(string $path): array - { - return filter( - static fn (string $possibleModule): bool => !in_array($possibleModule, ['.', '..'], true), - scandir($path) - ); - } - - private static function possibleMappingPaths(string $path): array - { - return map( - static function (mixed $_unused, string $module) use ($path) { - $mappingsPath = self::MAPPINGS_PATH; - - return realpath("$path/$module/$mappingsPath"); - }, - array_flip(self::modulesInPath($path)) - ); - } - - private static function isExistingMappingPath(): callable - { - return static fn (string $path): bool => !empty($path); - } - - private static function namespaceFormatter(string $baseNamespace): callable - { - return static fn (string $path, string $module): string => "$baseNamespace\\$module\Domain"; - } + private const MAPPINGS_PATH = 'Infrastructure/Persistence/Doctrine'; + + public static function inPath(string $path, string $baseNamespace): array + { + $possibleMappingDirectories = self::possibleMappingPaths($path); + $mappingDirectories = filter(self::isExistingMappingPath(), $possibleMappingDirectories); + + return array_flip(reindex(self::namespaceFormatter($baseNamespace), $mappingDirectories)); + } + + private static function modulesInPath(string $path): array + { + return filter( + static fn (string $possibleModule): bool => !in_array($possibleModule, ['.', '..'], true), + scandir($path) + ); + } + + private static function possibleMappingPaths(string $path): array + { + return map( + static function (mixed $_unused, string $module) use ($path) { + $mappingsPath = self::MAPPINGS_PATH; + + return realpath("$path/$module/$mappingsPath"); + }, + array_flip(self::modulesInPath($path)) + ); + } + + private static function isExistingMappingPath(): callable + { + return static fn (string $path): bool => !empty($path); + } + + private static function namespaceFormatter(string $baseNamespace): callable + { + return static fn (string $path, string $module): string => "$baseNamespace\\$module\Domain"; + } } diff --git a/src/Mooc/Shared/Infrastructure/Doctrine/MoocEntityManagerFactory.php b/src/Mooc/Shared/Infrastructure/Doctrine/MoocEntityManagerFactory.php index 5c31fca56..71f0b4566 100644 --- a/src/Mooc/Shared/Infrastructure/Doctrine/MoocEntityManagerFactory.php +++ b/src/Mooc/Shared/Infrastructure/Doctrine/MoocEntityManagerFactory.php @@ -9,25 +9,25 @@ final class MoocEntityManagerFactory { - private const SCHEMA_PATH = __DIR__ . '/../../../../../etc/databases/mooc.sql'; - - public static function create(array $parameters, string $environment): EntityManagerInterface - { - $isDevMode = $environment !== 'prod'; - - $prefixes = array_merge( - DoctrinePrefixesSearcher::inPath(__DIR__ . '/../../../../Mooc', 'CodelyTv\Mooc'), - DoctrinePrefixesSearcher::inPath(__DIR__ . '/../../../../Backoffice', 'CodelyTv\Backoffice') - ); - - $dbalCustomTypesClasses = DbalTypesSearcher::inPath(__DIR__ . '/../../../../Mooc', 'Mooc'); - - return DoctrineEntityManagerFactory::create( - $parameters, - $prefixes, - $isDevMode, - self::SCHEMA_PATH, - $dbalCustomTypesClasses - ); - } + private const SCHEMA_PATH = __DIR__ . '/../../../../../etc/databases/mooc.sql'; + + public static function create(array $parameters, string $environment): EntityManagerInterface + { + $isDevMode = $environment !== 'prod'; + + $prefixes = array_merge( + DoctrinePrefixesSearcher::inPath(__DIR__ . '/../../../../Mooc', 'CodelyTv\Mooc'), + DoctrinePrefixesSearcher::inPath(__DIR__ . '/../../../../Backoffice', 'CodelyTv\Backoffice') + ); + + $dbalCustomTypesClasses = DbalTypesSearcher::inPath(__DIR__ . '/../../../../Mooc', 'Mooc'); + + return DoctrineEntityManagerFactory::create( + $parameters, + $prefixes, + $isDevMode, + self::SCHEMA_PATH, + $dbalCustomTypesClasses + ); + } } diff --git a/src/Mooc/Videos/Application/Create/CreateVideoCommand.php b/src/Mooc/Videos/Application/Create/CreateVideoCommand.php index d2104597b..0a94120f5 100644 --- a/src/Mooc/Videos/Application/Create/CreateVideoCommand.php +++ b/src/Mooc/Videos/Application/Create/CreateVideoCommand.php @@ -8,36 +8,36 @@ final readonly class CreateVideoCommand implements Command { - public function __construct( - private string $id, - private string $type, - private string $title, - private string $url, - private string $courseId - ) {} - - public function id(): string - { - return $this->id; - } - - public function type(): string - { - return $this->type; - } - - public function title(): string - { - return $this->title; - } - - public function url(): string - { - return $this->url; - } - - public function courseId(): string - { - return $this->courseId; - } + public function __construct( + private string $id, + private string $type, + private string $title, + private string $url, + private string $courseId + ) {} + + public function id(): string + { + return $this->id; + } + + public function type(): string + { + return $this->type; + } + + public function title(): string + { + return $this->title; + } + + public function url(): string + { + return $this->url; + } + + public function courseId(): string + { + return $this->courseId; + } } diff --git a/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php b/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php index 608900a2e..4e9222d0b 100644 --- a/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php +++ b/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php @@ -13,16 +13,16 @@ final readonly class CreateVideoCommandHandler implements CommandHandler { - public function __construct(private VideoCreator $creator) {} + public function __construct(private VideoCreator $creator) {} - public function __invoke(CreateVideoCommand $command): void - { - $id = new VideoId($command->id()); - $type = VideoType::from($command->type()); - $title = new VideoTitle($command->title()); - $url = new VideoUrl($command->url()); - $courseId = new CourseId($command->courseId()); + public function __invoke(CreateVideoCommand $command): void + { + $id = new VideoId($command->id()); + $type = VideoType::from($command->type()); + $title = new VideoTitle($command->title()); + $url = new VideoUrl($command->url()); + $courseId = new CourseId($command->courseId()); - $this->creator->create($id, $type, $title, $url, $courseId); - } + $this->creator->create($id, $type, $title, $url, $courseId); + } } diff --git a/src/Mooc/Videos/Application/Create/VideoCreator.php b/src/Mooc/Videos/Application/Create/VideoCreator.php index f2054a6ae..a3bb4a193 100644 --- a/src/Mooc/Videos/Application/Create/VideoCreator.php +++ b/src/Mooc/Videos/Application/Create/VideoCreator.php @@ -15,14 +15,14 @@ final readonly class VideoCreator { - public function __construct(private VideoRepository $repository, private EventBus $bus) {} + public function __construct(private VideoRepository $repository, private EventBus $bus) {} - public function create(VideoId $id, VideoType $type, VideoTitle $title, VideoUrl $url, CourseId $courseId): void - { - $video = Video::create($id, $type, $title, $url, $courseId); + public function create(VideoId $id, VideoType $type, VideoTitle $title, VideoUrl $url, CourseId $courseId): void + { + $video = Video::create($id, $type, $title, $url, $courseId); - $this->repository->save($video); + $this->repository->save($video); - $this->bus->publish(...$video->pullDomainEvents()); - } + $this->bus->publish(...$video->pullDomainEvents()); + } } diff --git a/src/Mooc/Videos/Application/Find/FindVideoQuery.php b/src/Mooc/Videos/Application/Find/FindVideoQuery.php index 1f3a652be..5df95d32b 100644 --- a/src/Mooc/Videos/Application/Find/FindVideoQuery.php +++ b/src/Mooc/Videos/Application/Find/FindVideoQuery.php @@ -8,10 +8,10 @@ final readonly class FindVideoQuery implements Query { - public function __construct(private string $id) {} + public function __construct(private string $id) {} - public function id(): string - { - return $this->id; - } + public function id(): string + { + return $this->id; + } } diff --git a/src/Mooc/Videos/Application/Find/FindVideoQueryHandler.php b/src/Mooc/Videos/Application/Find/FindVideoQueryHandler.php index 377f08e39..c533ce272 100644 --- a/src/Mooc/Videos/Application/Find/FindVideoQueryHandler.php +++ b/src/Mooc/Videos/Application/Find/FindVideoQueryHandler.php @@ -11,19 +11,19 @@ final readonly class FindVideoQueryHandler implements QueryHandler { - private VideoResponseConverter $responseConverter; + private VideoResponseConverter $responseConverter; - public function __construct(private VideoFinder $finder) - { - $this->responseConverter = new VideoResponseConverter(); - } + public function __construct(private VideoFinder $finder) + { + $this->responseConverter = new VideoResponseConverter(); + } - public function __invoke(FindVideoQuery $query): VideoResponse - { - $id = new VideoId($query->id()); + public function __invoke(FindVideoQuery $query): VideoResponse + { + $id = new VideoId($query->id()); - $video = apply($this->finder, [$id]); + $video = apply($this->finder, [$id]); - return apply($this->responseConverter, [$video]); - } + return apply($this->responseConverter, [$video]); + } } diff --git a/src/Mooc/Videos/Application/Find/VideoFinder.php b/src/Mooc/Videos/Application/Find/VideoFinder.php index 4e53fb8f7..103ff6e75 100644 --- a/src/Mooc/Videos/Application/Find/VideoFinder.php +++ b/src/Mooc/Videos/Application/Find/VideoFinder.php @@ -11,15 +11,15 @@ final class VideoFinder { - private readonly DomainVideoFinder $finder; + private readonly DomainVideoFinder $finder; - public function __construct(VideoRepository $repository) - { - $this->finder = new DomainVideoFinder($repository); - } + public function __construct(VideoRepository $repository) + { + $this->finder = new DomainVideoFinder($repository); + } - public function __invoke(VideoId $id): Video - { - return $this->finder->__invoke($id); - } + public function __invoke(VideoId $id): Video + { + return $this->finder->__invoke($id); + } } diff --git a/src/Mooc/Videos/Application/Find/VideoResponse.php b/src/Mooc/Videos/Application/Find/VideoResponse.php index e261a18d0..fb1061754 100644 --- a/src/Mooc/Videos/Application/Find/VideoResponse.php +++ b/src/Mooc/Videos/Application/Find/VideoResponse.php @@ -8,11 +8,11 @@ final readonly class VideoResponse implements Response { - public function __construct( - private string $id, - private string $type, - private string $title, - private string $url, - private string $courseId - ) {} + public function __construct( + private string $id, + private string $type, + private string $title, + private string $url, + private string $courseId + ) {} } diff --git a/src/Mooc/Videos/Application/Find/VideoResponseConverter.php b/src/Mooc/Videos/Application/Find/VideoResponseConverter.php index 23d890eb8..c766fe0cf 100644 --- a/src/Mooc/Videos/Application/Find/VideoResponseConverter.php +++ b/src/Mooc/Videos/Application/Find/VideoResponseConverter.php @@ -8,14 +8,14 @@ final class VideoResponseConverter { - public function __invoke(Video $video): VideoResponse - { - return new VideoResponse( - $video->id()->value(), - $video->type()->value, - $video->title()->value(), - $video->url()->value(), - $video->courseId()->value() - ); - } + public function __invoke(Video $video): VideoResponse + { + return new VideoResponse( + $video->id()->value(), + $video->type()->value, + $video->title()->value(), + $video->url()->value(), + $video->courseId()->value() + ); + } } diff --git a/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php b/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php index f2dcea30b..bb2ab5038 100644 --- a/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php +++ b/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php @@ -8,20 +8,20 @@ final readonly class TrimVideoCommand implements Command { - public function __construct(private string $videoId, private int $keepFromSecond, private int $keepToSecond) {} + public function __construct(private string $videoId, private int $keepFromSecond, private int $keepToSecond) {} - public function videoId(): string - { - return $this->videoId; - } + public function videoId(): string + { + return $this->videoId; + } - public function keepFromSecond(): int - { - return $this->keepFromSecond; - } + public function keepFromSecond(): int + { + return $this->keepFromSecond; + } - public function keepToSecond(): int - { - return $this->keepToSecond; - } + public function keepToSecond(): int + { + return $this->keepToSecond; + } } diff --git a/src/Mooc/Videos/Application/Trim/TrimVideoCommandHandler.php b/src/Mooc/Videos/Application/Trim/TrimVideoCommandHandler.php index e51a39cc4..94cf1e676 100644 --- a/src/Mooc/Videos/Application/Trim/TrimVideoCommandHandler.php +++ b/src/Mooc/Videos/Application/Trim/TrimVideoCommandHandler.php @@ -9,13 +9,13 @@ final readonly class TrimVideoCommandHandler { - public function __construct(private VideoTrimmer $trimmer) {} + public function __construct(private VideoTrimmer $trimmer) {} - public function __invoke(TrimVideoCommand $command): void - { - $id = new VideoId($command->videoId()); - $interval = SecondsInterval::fromValues($command->keepFromSecond(), $command->keepToSecond()); + public function __invoke(TrimVideoCommand $command): void + { + $id = new VideoId($command->videoId()); + $interval = SecondsInterval::fromValues($command->keepFromSecond(), $command->keepToSecond()); - $this->trimmer->trim($id, $interval); - } + $this->trimmer->trim($id, $interval); + } } diff --git a/src/Mooc/Videos/Application/Trim/VideoTrimmer.php b/src/Mooc/Videos/Application/Trim/VideoTrimmer.php index 1f7fc8dd5..75a6d4624 100644 --- a/src/Mooc/Videos/Application/Trim/VideoTrimmer.php +++ b/src/Mooc/Videos/Application/Trim/VideoTrimmer.php @@ -9,5 +9,5 @@ final class VideoTrimmer { - public function trim(VideoId $id, SecondsInterval $interval): void {} + public function trim(VideoId $id, SecondsInterval $interval): void {} } diff --git a/src/Mooc/Videos/Application/Update/VideoTitleUpdater.php b/src/Mooc/Videos/Application/Update/VideoTitleUpdater.php index 3670cb513..523217fbd 100644 --- a/src/Mooc/Videos/Application/Update/VideoTitleUpdater.php +++ b/src/Mooc/Videos/Application/Update/VideoTitleUpdater.php @@ -11,19 +11,19 @@ final readonly class VideoTitleUpdater { - private VideoFinder $finder; + private VideoFinder $finder; - public function __construct(private VideoRepository $repository) - { - $this->finder = new VideoFinder($repository); - } + public function __construct(private VideoRepository $repository) + { + $this->finder = new VideoFinder($repository); + } - public function __invoke(VideoId $id, VideoTitle $newTitle): void - { - $video = $this->finder->__invoke($id); + public function __invoke(VideoId $id, VideoTitle $newTitle): void + { + $video = $this->finder->__invoke($id); - $video->updateTitle($newTitle); + $video->updateTitle($newTitle); - $this->repository->save($video); - } + $this->repository->save($video); + } } diff --git a/src/Mooc/Videos/Domain/Video.php b/src/Mooc/Videos/Domain/Video.php index 567d7231a..db7a35bdc 100644 --- a/src/Mooc/Videos/Domain/Video.php +++ b/src/Mooc/Videos/Domain/Video.php @@ -10,63 +10,57 @@ final class Video extends AggregateRoot { - public function __construct( - private readonly VideoId $id, - private readonly VideoType $type, - private VideoTitle $title, - private readonly VideoUrl $url, - private readonly CourseId $courseId - ) {} + public function __construct( + private readonly VideoId $id, + private readonly VideoType $type, + private VideoTitle $title, + private readonly VideoUrl $url, + private readonly CourseId $courseId + ) {} - public static function create( - VideoId $id, - VideoType $type, - VideoTitle $title, - VideoUrl $url, - CourseId $courseId - ): self { - $video = new self($id, $type, $title, $url, $courseId); + public static function create( + VideoId $id, + VideoType $type, + VideoTitle $title, + VideoUrl $url, + CourseId $courseId + ): self { + $video = new self($id, $type, $title, $url, $courseId); - $video->record( - new VideoCreatedDomainEvent( - $id->value(), - $type->value, - $title->value(), - $url->value(), - $courseId->value() - ) - ); + $video->record( + new VideoCreatedDomainEvent($id->value(), $type->value, $title->value(), $url->value(), $courseId->value()) + ); - return $video; - } + return $video; + } - public function updateTitle(VideoTitle $newTitle): void - { - $this->title = $newTitle; - } + public function updateTitle(VideoTitle $newTitle): void + { + $this->title = $newTitle; + } - public function id(): VideoId - { - return $this->id; - } + public function id(): VideoId + { + return $this->id; + } - public function type(): VideoType - { - return $this->type; - } + public function type(): VideoType + { + return $this->type; + } - public function title(): VideoTitle - { - return $this->title; - } + public function title(): VideoTitle + { + return $this->title; + } - public function url(): VideoUrl - { - return $this->url; - } + public function url(): VideoUrl + { + return $this->url; + } - public function courseId(): CourseId - { - return $this->courseId; - } + public function courseId(): CourseId + { + return $this->courseId; + } } diff --git a/src/Mooc/Videos/Domain/VideoCreatedDomainEvent.php b/src/Mooc/Videos/Domain/VideoCreatedDomainEvent.php index 829ee3884..61cd7f8e8 100644 --- a/src/Mooc/Videos/Domain/VideoCreatedDomainEvent.php +++ b/src/Mooc/Videos/Domain/VideoCreatedDomainEvent.php @@ -8,47 +8,47 @@ final class VideoCreatedDomainEvent extends DomainEvent { - public function __construct( - string $id, - private readonly string $type, - private readonly string $title, - private readonly string $url, - private readonly string $courseId, - string $eventId = null, - string $occurredOn = null - ) { - parent::__construct($id, $eventId, $occurredOn); - } + public function __construct( + string $id, + private readonly string $type, + private readonly string $title, + private readonly string $url, + private readonly string $courseId, + string $eventId = null, + string $occurredOn = null + ) { + parent::__construct($id, $eventId, $occurredOn); + } - public static function eventName(): string - { - return 'video.created'; - } + public static function eventName(): string + { + return 'video.created'; + } - public static function fromPrimitives( - string $aggregateId, - array $body, - string $eventId, - string $occurredOn - ): self { - return new self( - $aggregateId, - $body['type'], - $body['title'], - $body['url'], - $body['course_id'], - $eventId, - $occurredOn - ); - } + public static function fromPrimitives( + string $aggregateId, + array $body, + string $eventId, + string $occurredOn + ): self { + return new self( + $aggregateId, + $body['type'], + $body['title'], + $body['url'], + $body['course_id'], + $eventId, + $occurredOn + ); + } - public function toPrimitives(): array - { - return [ - 'type' => $this->type, - 'title' => $this->title, - 'url' => $this->url, - 'course_id' => $this->courseId, - ]; - } + public function toPrimitives(): array + { + return [ + 'type' => $this->type, + 'title' => $this->title, + 'url' => $this->url, + 'course_id' => $this->courseId, + ]; + } } diff --git a/src/Mooc/Videos/Domain/VideoFinder.php b/src/Mooc/Videos/Domain/VideoFinder.php index 19109faf4..2386116ef 100644 --- a/src/Mooc/Videos/Domain/VideoFinder.php +++ b/src/Mooc/Videos/Domain/VideoFinder.php @@ -6,16 +6,16 @@ final readonly class VideoFinder { - public function __construct(private VideoRepository $repository) {} + public function __construct(private VideoRepository $repository) {} - public function __invoke(VideoId $id): Video - { - $video = $this->repository->search($id); + public function __invoke(VideoId $id): Video + { + $video = $this->repository->search($id); - if ($video === null) { - throw new VideoNotFound($id); - } + if ($video === null) { + throw new VideoNotFound($id); + } - return $video; - } + return $video; + } } diff --git a/src/Mooc/Videos/Domain/VideoNotFound.php b/src/Mooc/Videos/Domain/VideoNotFound.php index 7ba9f1dfd..fdbdf69de 100644 --- a/src/Mooc/Videos/Domain/VideoNotFound.php +++ b/src/Mooc/Videos/Domain/VideoNotFound.php @@ -8,18 +8,18 @@ final class VideoNotFound extends DomainError { - public function __construct(private readonly VideoId $id) - { - parent::__construct(); - } + public function __construct(private readonly VideoId $id) + { + parent::__construct(); + } - public function errorCode(): string - { - return 'video_not_found'; - } + public function errorCode(): string + { + return 'video_not_found'; + } - protected function errorMessage(): string - { - return sprintf('The video <%s> has not been found', $this->id->value()); - } + protected function errorMessage(): string + { + return sprintf('The video <%s> has not been found', $this->id->value()); + } } diff --git a/src/Mooc/Videos/Domain/VideoRepository.php b/src/Mooc/Videos/Domain/VideoRepository.php index 7e68907a8..0cd6aae41 100644 --- a/src/Mooc/Videos/Domain/VideoRepository.php +++ b/src/Mooc/Videos/Domain/VideoRepository.php @@ -8,9 +8,9 @@ interface VideoRepository { - public function save(Video $video): void; + public function save(Video $video): void; - public function search(VideoId $id): ?Video; + public function search(VideoId $id): ?Video; - public function searchByCriteria(Criteria $criteria): Videos; + public function searchByCriteria(Criteria $criteria): Videos; } diff --git a/src/Mooc/Videos/Domain/VideoType.php b/src/Mooc/Videos/Domain/VideoType.php index 7560b64cf..13a3a23f4 100644 --- a/src/Mooc/Videos/Domain/VideoType.php +++ b/src/Mooc/Videos/Domain/VideoType.php @@ -6,6 +6,6 @@ enum VideoType: string { - case SCREENCAST = 'screencast'; - case INTERVIEW = 'interview'; + case SCREENCAST = 'screencast'; + case INTERVIEW = 'interview'; } diff --git a/src/Mooc/Videos/Domain/Videos.php b/src/Mooc/Videos/Domain/Videos.php index e749b0726..9a21231d5 100644 --- a/src/Mooc/Videos/Domain/Videos.php +++ b/src/Mooc/Videos/Domain/Videos.php @@ -8,8 +8,8 @@ final class Videos extends Collection { - protected function type(): string - { - return Video::class; - } + protected function type(): string + { + return Video::class; + } } diff --git a/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoIdType.php b/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoIdType.php index 7f5eef170..2db8f8d8c 100644 --- a/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoIdType.php +++ b/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoIdType.php @@ -9,8 +9,8 @@ final class VideoIdType extends UuidType { - protected function typeClassName(): string - { - return VideoId::class; - } + protected function typeClassName(): string + { + return VideoId::class; + } } diff --git a/src/Mooc/Videos/Infrastructure/Persistence/VideoRepositoryMySql.php b/src/Mooc/Videos/Infrastructure/Persistence/VideoRepositoryMySql.php index fffa093fe..76e4d8a0c 100644 --- a/src/Mooc/Videos/Infrastructure/Persistence/VideoRepositoryMySql.php +++ b/src/Mooc/Videos/Infrastructure/Persistence/VideoRepositoryMySql.php @@ -14,29 +14,29 @@ final class VideoRepositoryMySql extends DoctrineRepository implements VideoRepository { - private static array $criteriaToDoctrineFields = [ - 'id' => 'id', - 'type' => 'type', - 'title' => 'title', - 'url' => 'url', - 'course_id' => 'courseId', - ]; - - public function save(Video $video): void - { - $this->persist($video); - } - - public function search(VideoId $id): ?Video - { - return $this->repository(Video::class)->find($id); - } - - public function searchByCriteria(Criteria $criteria): Videos - { - $doctrineCriteria = DoctrineCriteriaConverter::convert($criteria, self::$criteriaToDoctrineFields); - $videos = $this->repository(Video::class)->matching($doctrineCriteria)->toArray(); - - return new Videos($videos); - } + private static array $criteriaToDoctrineFields = [ + 'id' => 'id', + 'type' => 'type', + 'title' => 'title', + 'url' => 'url', + 'course_id' => 'courseId', + ]; + + public function save(Video $video): void + { + $this->persist($video); + } + + public function search(VideoId $id): ?Video + { + return $this->repository(Video::class)->find($id); + } + + public function searchByCriteria(Criteria $criteria): Videos + { + $doctrineCriteria = DoctrineCriteriaConverter::convert($criteria, self::$criteriaToDoctrineFields); + $videos = $this->repository(Video::class)->matching($doctrineCriteria)->toArray(); + + return new Videos($videos); + } } diff --git a/src/Shared/Domain/Aggregate/AggregateRoot.php b/src/Shared/Domain/Aggregate/AggregateRoot.php index 9c2d69d91..8162916cf 100644 --- a/src/Shared/Domain/Aggregate/AggregateRoot.php +++ b/src/Shared/Domain/Aggregate/AggregateRoot.php @@ -8,18 +8,18 @@ abstract class AggregateRoot { - private array $domainEvents = []; + private array $domainEvents = []; - final public function pullDomainEvents(): array - { - $domainEvents = $this->domainEvents; - $this->domainEvents = []; + final public function pullDomainEvents(): array + { + $domainEvents = $this->domainEvents; + $this->domainEvents = []; - return $domainEvents; - } + return $domainEvents; + } - final protected function record(DomainEvent $domainEvent): void - { - $this->domainEvents[] = $domainEvent; - } + final protected function record(DomainEvent $domainEvent): void + { + $this->domainEvents[] = $domainEvent; + } } diff --git a/src/Shared/Domain/Assert.php b/src/Shared/Domain/Assert.php index 1a56c0387..d1c5f6e2d 100644 --- a/src/Shared/Domain/Assert.php +++ b/src/Shared/Domain/Assert.php @@ -8,19 +8,17 @@ final class Assert { - public static function arrayOf(string $class, array $items): void - { - foreach ($items as $item) { - self::instanceOf($class, $item); - } - } + public static function arrayOf(string $class, array $items): void + { + foreach ($items as $item) { + self::instanceOf($class, $item); + } + } - public static function instanceOf(string $class, mixed $item): void - { - if (!$item instanceof $class) { - throw new InvalidArgumentException( - sprintf('The object <%s> is not an instance of <%s>', $class, $item::class) - ); - } - } + public static function instanceOf(string $class, mixed $item): void + { + if (!$item instanceof $class) { + throw new InvalidArgumentException(sprintf('The object <%s> is not an instance of <%s>', $class, $item::class)); + } + } } diff --git a/src/Shared/Domain/Bus/Command/CommandBus.php b/src/Shared/Domain/Bus/Command/CommandBus.php index 2c82ef796..fdf5e9ef9 100644 --- a/src/Shared/Domain/Bus/Command/CommandBus.php +++ b/src/Shared/Domain/Bus/Command/CommandBus.php @@ -6,5 +6,5 @@ interface CommandBus { - public function dispatch(Command $command): void; + public function dispatch(Command $command): void; } diff --git a/src/Shared/Domain/Bus/Event/DomainEvent.php b/src/Shared/Domain/Bus/Event/DomainEvent.php index 9ea835826..ffc7b0641 100644 --- a/src/Shared/Domain/Bus/Event/DomainEvent.php +++ b/src/Shared/Domain/Bus/Event/DomainEvent.php @@ -10,38 +10,38 @@ abstract class DomainEvent { - private readonly string $eventId; - private readonly string $occurredOn; - - public function __construct(private readonly string $aggregateId, string $eventId = null, string $occurredOn = null) - { - $this->eventId = $eventId ?: SimpleUuid::random()->value(); - $this->occurredOn = $occurredOn ?: Utils::dateToString(new DateTimeImmutable()); - } - - abstract public static function fromPrimitives( - string $aggregateId, - array $body, - string $eventId, - string $occurredOn - ): self; - - abstract public static function eventName(): string; - - abstract public function toPrimitives(): array; - - final public function aggregateId(): string - { - return $this->aggregateId; - } - - final public function eventId(): string - { - return $this->eventId; - } - - final public function occurredOn(): string - { - return $this->occurredOn; - } + private readonly string $eventId; + private readonly string $occurredOn; + + public function __construct(private readonly string $aggregateId, string $eventId = null, string $occurredOn = null) + { + $this->eventId = $eventId ?: SimpleUuid::random()->value(); + $this->occurredOn = $occurredOn ?: Utils::dateToString(new DateTimeImmutable()); + } + + abstract public static function fromPrimitives( + string $aggregateId, + array $body, + string $eventId, + string $occurredOn + ): self; + + abstract public static function eventName(): string; + + abstract public function toPrimitives(): array; + + final public function aggregateId(): string + { + return $this->aggregateId; + } + + final public function eventId(): string + { + return $this->eventId; + } + + final public function occurredOn(): string + { + return $this->occurredOn; + } } diff --git a/src/Shared/Domain/Bus/Event/DomainEventSubscriber.php b/src/Shared/Domain/Bus/Event/DomainEventSubscriber.php index 54903808c..a94a22bc9 100644 --- a/src/Shared/Domain/Bus/Event/DomainEventSubscriber.php +++ b/src/Shared/Domain/Bus/Event/DomainEventSubscriber.php @@ -6,5 +6,5 @@ interface DomainEventSubscriber { - public static function subscribedTo(): array; + public static function subscribedTo(): array; } diff --git a/src/Shared/Domain/Bus/Event/EventBus.php b/src/Shared/Domain/Bus/Event/EventBus.php index 164f77e9b..3be5d9782 100644 --- a/src/Shared/Domain/Bus/Event/EventBus.php +++ b/src/Shared/Domain/Bus/Event/EventBus.php @@ -6,5 +6,5 @@ interface EventBus { - public function publish(DomainEvent ...$events): void; + public function publish(DomainEvent ...$events): void; } diff --git a/src/Shared/Domain/Bus/Query/QueryBus.php b/src/Shared/Domain/Bus/Query/QueryBus.php index dc74a4b9b..8abee3634 100644 --- a/src/Shared/Domain/Bus/Query/QueryBus.php +++ b/src/Shared/Domain/Bus/Query/QueryBus.php @@ -6,5 +6,5 @@ interface QueryBus { - public function ask(Query $query): ?Response; + public function ask(Query $query): ?Response; } diff --git a/src/Shared/Domain/Collection.php b/src/Shared/Domain/Collection.php index a184dd3cb..c0b664aa8 100644 --- a/src/Shared/Domain/Collection.php +++ b/src/Shared/Domain/Collection.php @@ -12,25 +12,25 @@ /** @template-implements IteratorAggregate*/ abstract class Collection implements Countable, IteratorAggregate { - public function __construct(private readonly array $items) - { - Assert::arrayOf($this->type(), $items); - } - - abstract protected function type(): string; - - final public function getIterator(): Traversable - { - return new ArrayIterator($this->items()); - } - - final public function count(): int - { - return count($this->items()); - } - - protected function items(): array - { - return $this->items; - } + public function __construct(private readonly array $items) + { + Assert::arrayOf($this->type(), $items); + } + + abstract protected function type(): string; + + final public function getIterator(): Traversable + { + return new ArrayIterator($this->items()); + } + + final public function count(): int + { + return count($this->items()); + } + + protected function items(): array + { + return $this->items; + } } diff --git a/src/Shared/Domain/Criteria/Criteria.php b/src/Shared/Domain/Criteria/Criteria.php index a1d7a85d9..876c9f441 100644 --- a/src/Shared/Domain/Criteria/Criteria.php +++ b/src/Shared/Domain/Criteria/Criteria.php @@ -6,56 +6,56 @@ final readonly class Criteria { - public function __construct( - private Filters $filters, - private Order $order, - private ?int $offset, - private ?int $limit - ) {} - - public function hasFilters(): bool - { - return $this->filters->count() > 0; - } - - public function hasOrder(): bool - { - return !$this->order->isNone(); - } - - public function plainFilters(): array - { - return $this->filters->filters(); - } - - public function filters(): Filters - { - return $this->filters; - } - - public function order(): Order - { - return $this->order; - } - - public function offset(): ?int - { - return $this->offset; - } - - public function limit(): ?int - { - return $this->limit; - } - - public function serialize(): string - { - return sprintf( - '%s~~%s~~%s~~%s', - $this->filters->serialize(), - $this->order->serialize(), - $this->offset ?? 'none', - $this->limit ?? 'none' - ); - } + public function __construct( + private Filters $filters, + private Order $order, + private ?int $offset, + private ?int $limit + ) {} + + public function hasFilters(): bool + { + return $this->filters->count() > 0; + } + + public function hasOrder(): bool + { + return !$this->order->isNone(); + } + + public function plainFilters(): array + { + return $this->filters->filters(); + } + + public function filters(): Filters + { + return $this->filters; + } + + public function order(): Order + { + return $this->order; + } + + public function offset(): ?int + { + return $this->offset; + } + + public function limit(): ?int + { + return $this->limit; + } + + public function serialize(): string + { + return sprintf( + '%s~~%s~~%s~~%s', + $this->filters->serialize(), + $this->order->serialize(), + $this->offset ?? 'none', + $this->limit ?? 'none' + ); + } } diff --git a/src/Shared/Domain/Criteria/Filter.php b/src/Shared/Domain/Criteria/Filter.php index 05afbb66c..33f15c365 100644 --- a/src/Shared/Domain/Criteria/Filter.php +++ b/src/Shared/Domain/Criteria/Filter.php @@ -6,38 +6,38 @@ final readonly class Filter { - public function __construct( - private FilterField $field, - private FilterOperator $operator, - private FilterValue $value - ) {} - - public static function fromValues(array $values): self - { - return new self( - new FilterField($values['field']), - FilterOperator::from($values['operator']), - new FilterValue($values['value']) - ); - } - - public function field(): FilterField - { - return $this->field; - } - - public function operator(): FilterOperator - { - return $this->operator; - } - - public function value(): FilterValue - { - return $this->value; - } - - public function serialize(): string - { - return sprintf('%s.%s.%s', $this->field->value(), $this->operator->value, $this->value->value()); - } + public function __construct( + private FilterField $field, + private FilterOperator $operator, + private FilterValue $value + ) {} + + public static function fromValues(array $values): self + { + return new self( + new FilterField($values['field']), + FilterOperator::from($values['operator']), + new FilterValue($values['value']) + ); + } + + public function field(): FilterField + { + return $this->field; + } + + public function operator(): FilterOperator + { + return $this->operator; + } + + public function value(): FilterValue + { + return $this->value; + } + + public function serialize(): string + { + return sprintf('%s.%s.%s', $this->field->value(), $this->operator->value, $this->value->value()); + } } diff --git a/src/Shared/Domain/Criteria/FilterOperator.php b/src/Shared/Domain/Criteria/FilterOperator.php index 5f6f151ac..3bd946967 100644 --- a/src/Shared/Domain/Criteria/FilterOperator.php +++ b/src/Shared/Domain/Criteria/FilterOperator.php @@ -6,15 +6,15 @@ enum FilterOperator: string { - case EQUAL = '='; - case NOT_EQUAL = '!='; - case GT = '>'; - case LT = '<'; - case CONTAINS = 'CONTAINS'; - case NOT_CONTAINS = 'NOT_CONTAINS'; + case EQUAL = '='; + case NOT_EQUAL = '!='; + case GT = '>'; + case LT = '<'; + case CONTAINS = 'CONTAINS'; + case NOT_CONTAINS = 'NOT_CONTAINS'; - public function isContaining(): bool - { - return in_array($this->value, [self::CONTAINS->value, self::NOT_CONTAINS->value], true); - } + public function isContaining(): bool + { + return in_array($this->value, [self::CONTAINS->value, self::NOT_CONTAINS->value], true); + } } diff --git a/src/Shared/Domain/Criteria/Filters.php b/src/Shared/Domain/Criteria/Filters.php index 04af22fac..bea6863e3 100644 --- a/src/Shared/Domain/Criteria/Filters.php +++ b/src/Shared/Domain/Criteria/Filters.php @@ -10,41 +10,37 @@ final class Filters extends Collection { - public static function fromValues(array $values): self - { - return new self(array_map(self::filterBuilder(), $values)); - } - - private static function filterBuilder(): callable - { - return fn (array $values): Filter => Filter::fromValues($values); - } - - public function add(Filter $filter): self - { - return new self(array_merge($this->items(), [$filter])); - } - - public function filters(): array - { - return $this->items(); - } - - public function serialize(): string - { - return reduce( - static fn (string $accumulate, Filter $filter): string => sprintf( - '%s^%s', - $accumulate, - $filter->serialize() - ), - $this->items(), - '' - ); - } - - protected function type(): string - { - return Filter::class; - } + public static function fromValues(array $values): self + { + return new self(array_map(self::filterBuilder(), $values)); + } + + private static function filterBuilder(): callable + { + return fn (array $values): Filter => Filter::fromValues($values); + } + + public function add(Filter $filter): self + { + return new self(array_merge($this->items(), [$filter])); + } + + public function filters(): array + { + return $this->items(); + } + + public function serialize(): string + { + return reduce( + static fn (string $accumulate, Filter $filter): string => sprintf('%s^%s', $accumulate, $filter->serialize()), + $this->items(), + '' + ); + } + + protected function type(): string + { + return Filter::class; + } } diff --git a/src/Shared/Domain/Criteria/Order.php b/src/Shared/Domain/Criteria/Order.php index afcc3303f..dfbc8e016 100644 --- a/src/Shared/Domain/Criteria/Order.php +++ b/src/Shared/Domain/Criteria/Order.php @@ -6,43 +6,43 @@ final readonly class Order { - public function __construct(private OrderBy $orderBy, private OrderType $orderType) {} - - public static function createDesc(OrderBy $orderBy): self - { - return new self($orderBy, OrderType::DESC); - } - - public static function fromValues(?string $orderBy, ?string $order): self - { - return ($orderBy === null || $order === null) ? self::none() : new self( - new OrderBy($orderBy), - OrderType::from($order) - ); - } - - public static function none(): self - { - return new self(new OrderBy(''), OrderType::NONE); - } - - public function orderBy(): OrderBy - { - return $this->orderBy; - } - - public function orderType(): OrderType - { - return $this->orderType; - } - - public function isNone(): bool - { - return $this->orderType()->isNone(); - } - - public function serialize(): string - { - return sprintf('%s.%s', $this->orderBy->value(), $this->orderType->value); - } + public function __construct(private OrderBy $orderBy, private OrderType $orderType) {} + + public static function createDesc(OrderBy $orderBy): self + { + return new self($orderBy, OrderType::DESC); + } + + public static function fromValues(?string $orderBy, ?string $order): self + { + return ($orderBy === null || $order === null) ? self::none() : new self( + new OrderBy($orderBy), + OrderType::from($order) + ); + } + + public static function none(): self + { + return new self(new OrderBy(''), OrderType::NONE); + } + + public function orderBy(): OrderBy + { + return $this->orderBy; + } + + public function orderType(): OrderType + { + return $this->orderType; + } + + public function isNone(): bool + { + return $this->orderType()->isNone(); + } + + public function serialize(): string + { + return sprintf('%s.%s', $this->orderBy->value(), $this->orderType->value); + } } diff --git a/src/Shared/Domain/Criteria/OrderType.php b/src/Shared/Domain/Criteria/OrderType.php index 2ce357a95..851bc0c7f 100644 --- a/src/Shared/Domain/Criteria/OrderType.php +++ b/src/Shared/Domain/Criteria/OrderType.php @@ -6,12 +6,12 @@ enum OrderType: string { - case ASC = 'asc'; - case DESC = 'desc'; - case NONE = 'none'; + case ASC = 'asc'; + case DESC = 'desc'; + case NONE = 'none'; - public function isNone(): bool - { - return $this->value === self::NONE->value; - } + public function isNone(): bool + { + return $this->value === self::NONE->value; + } } diff --git a/src/Shared/Domain/DomainError.php b/src/Shared/Domain/DomainError.php index 8ecd4725f..18eec3f93 100644 --- a/src/Shared/Domain/DomainError.php +++ b/src/Shared/Domain/DomainError.php @@ -8,12 +8,12 @@ abstract class DomainError extends DomainException { - public function __construct() - { - parent::__construct($this->errorMessage()); - } + public function __construct() + { + parent::__construct($this->errorMessage()); + } - abstract public function errorCode(): string; + abstract public function errorCode(): string; - abstract protected function errorMessage(): string; + abstract protected function errorMessage(): string; } diff --git a/src/Shared/Domain/Logger.php b/src/Shared/Domain/Logger.php index 37100e698..fbaa7710c 100644 --- a/src/Shared/Domain/Logger.php +++ b/src/Shared/Domain/Logger.php @@ -6,9 +6,9 @@ interface Logger { - public function info(string $message, array $context = []): void; + public function info(string $message, array $context = []): void; - public function warning(string $message, array $context = []): void; + public function warning(string $message, array $context = []): void; - public function critical(string $message, array $context = []): void; + public function critical(string $message, array $context = []): void; } diff --git a/src/Shared/Domain/Monitoring.php b/src/Shared/Domain/Monitoring.php index cb831294e..2602a0f40 100644 --- a/src/Shared/Domain/Monitoring.php +++ b/src/Shared/Domain/Monitoring.php @@ -6,13 +6,13 @@ interface Monitoring { - public function incrementCounter(int $times): void; + public function incrementCounter(int $times): void; - public function incrementGauge(int $times): void; + public function incrementGauge(int $times): void; - public function decrementGauge(int $times): void; + public function decrementGauge(int $times): void; - public function setGauge(int $value): void; + public function setGauge(int $value): void; - public function observeHistogram(int $value, array $labels = []): void; + public function observeHistogram(int $value, array $labels = []): void; } diff --git a/src/Shared/Domain/RandomNumberGenerator.php b/src/Shared/Domain/RandomNumberGenerator.php index fb8462781..6fe49b715 100644 --- a/src/Shared/Domain/RandomNumberGenerator.php +++ b/src/Shared/Domain/RandomNumberGenerator.php @@ -6,5 +6,5 @@ interface RandomNumberGenerator { - public function generate(): int; + public function generate(): int; } diff --git a/src/Shared/Domain/SecondsInterval.php b/src/Shared/Domain/SecondsInterval.php index 1b6546342..9fdffeccf 100644 --- a/src/Shared/Domain/SecondsInterval.php +++ b/src/Shared/Domain/SecondsInterval.php @@ -8,20 +8,20 @@ final readonly class SecondsInterval { - public function __construct(private Second $from, private Second $to) - { - $this->ensureIntervalEndsAfterStart($from, $to); - } + public function __construct(private Second $from, private Second $to) + { + $this->ensureIntervalEndsAfterStart($from, $to); + } - public static function fromValues(int $from, int $to): self - { - return new self(new Second($from), new Second($to)); - } + public static function fromValues(int $from, int $to): self + { + return new self(new Second($from), new Second($to)); + } - private function ensureIntervalEndsAfterStart(Second $from, Second $to): void - { - if ($from->isBiggerThan($to)) { - throw new DomainException('To is bigger than from'); - } - } + private function ensureIntervalEndsAfterStart(Second $from, Second $to): void + { + if ($from->isBiggerThan($to)) { + throw new DomainException('To is bigger than from'); + } + } } diff --git a/src/Shared/Domain/Utils.php b/src/Shared/Domain/Utils.php index df64bfb87..7939ff26b 100644 --- a/src/Shared/Domain/Utils.php +++ b/src/Shared/Domain/Utils.php @@ -11,80 +11,80 @@ final class Utils { - public static function endsWith(string $needle, string $haystack): bool - { - $length = strlen($needle); - if ($length === 0) { - return true; - } - - return substr($haystack, -$length) === $needle; - } - - public static function dateToString(DateTimeInterface $date): string - { - return $date->format(DateTimeInterface::ATOM); - } - - public static function stringToDate(string $date): DateTimeImmutable - { - return new DateTimeImmutable($date); - } - - public static function jsonEncode(array $values): string - { - return json_encode($values, JSON_THROW_ON_ERROR); - } - - public static function jsonDecode(string $json): array - { - $data = json_decode($json, true); - - if (json_last_error() !== JSON_ERROR_NONE) { - throw new RuntimeException('Unable to parse response body into JSON: ' . json_last_error()); - } - - return $data; - } - - public static function toSnakeCase(string $text): string - { - return ctype_lower($text) ? $text : strtolower((string) preg_replace('/([^A-Z\s])([A-Z])/', '$1_$2', $text)); - } - - public static function toCamelCase(string $text): string - { - return lcfirst(str_replace('_', '', ucwords($text, '_'))); - } - - public static function dot(array $array, string $prepend = ''): array - { - $results = []; - foreach ($array as $key => $value) { - if (is_array($value) && !empty($value)) { - $results = array_merge($results, self::dot($value, $prepend . $key . '.')); - } else { - $results[$prepend . $key] = $value; - } - } - - return $results; - } - - public static function filesIn(string $path, string $fileType): array - { - return filter( - static fn (string $possibleModule): false|string => strstr($possibleModule, $fileType), - scandir($path) - ); - } - - public static function iterableToArray(iterable $iterable): array - { - if (is_array($iterable)) { - return $iterable; - } - - return iterator_to_array($iterable); - } + public static function endsWith(string $needle, string $haystack): bool + { + $length = strlen($needle); + if ($length === 0) { + return true; + } + + return substr($haystack, -$length) === $needle; + } + + public static function dateToString(DateTimeInterface $date): string + { + return $date->format(DateTimeInterface::ATOM); + } + + public static function stringToDate(string $date): DateTimeImmutable + { + return new DateTimeImmutable($date); + } + + public static function jsonEncode(array $values): string + { + return json_encode($values, JSON_THROW_ON_ERROR); + } + + public static function jsonDecode(string $json): array + { + $data = json_decode($json, true); + + if (json_last_error() !== JSON_ERROR_NONE) { + throw new RuntimeException('Unable to parse response body into JSON: ' . json_last_error()); + } + + return $data; + } + + public static function toSnakeCase(string $text): string + { + return ctype_lower($text) ? $text : strtolower((string) preg_replace('/([^A-Z\s])([A-Z])/', '$1_$2', $text)); + } + + public static function toCamelCase(string $text): string + { + return lcfirst(str_replace('_', '', ucwords($text, '_'))); + } + + public static function dot(array $array, string $prepend = ''): array + { + $results = []; + foreach ($array as $key => $value) { + if (is_array($value) && !empty($value)) { + $results = array_merge($results, self::dot($value, $prepend . $key . '.')); + } else { + $results[$prepend . $key] = $value; + } + } + + return $results; + } + + public static function filesIn(string $path, string $fileType): array + { + return filter( + static fn (string $possibleModule): false|string => strstr($possibleModule, $fileType), + scandir($path) + ); + } + + public static function iterableToArray(iterable $iterable): array + { + if (is_array($iterable)) { + return $iterable; + } + + return iterator_to_array($iterable); + } } diff --git a/src/Shared/Domain/UuidGenerator.php b/src/Shared/Domain/UuidGenerator.php index 313b7c249..1064a6edc 100644 --- a/src/Shared/Domain/UuidGenerator.php +++ b/src/Shared/Domain/UuidGenerator.php @@ -6,5 +6,5 @@ interface UuidGenerator { - public function generate(): string; + public function generate(): string; } diff --git a/src/Shared/Domain/ValueObject/IntValueObject.php b/src/Shared/Domain/ValueObject/IntValueObject.php index 60514d776..77e13cd76 100644 --- a/src/Shared/Domain/ValueObject/IntValueObject.php +++ b/src/Shared/Domain/ValueObject/IntValueObject.php @@ -6,15 +6,15 @@ abstract class IntValueObject { - public function __construct(protected int $value) {} + public function __construct(protected int $value) {} - final public function value(): int - { - return $this->value; - } + final public function value(): int + { + return $this->value; + } - final public function isBiggerThan(self $other): bool - { - return $this->value() > $other->value(); - } + final public function isBiggerThan(self $other): bool + { + return $this->value() > $other->value(); + } } diff --git a/src/Shared/Domain/ValueObject/StringValueObject.php b/src/Shared/Domain/ValueObject/StringValueObject.php index 08d2b6e4b..19869b870 100644 --- a/src/Shared/Domain/ValueObject/StringValueObject.php +++ b/src/Shared/Domain/ValueObject/StringValueObject.php @@ -6,10 +6,10 @@ abstract class StringValueObject { - public function __construct(protected string $value) {} + public function __construct(protected string $value) {} - final public function value(): string - { - return $this->value; - } + final public function value(): string + { + return $this->value; + } } diff --git a/src/Shared/Domain/ValueObject/Uuid.php b/src/Shared/Domain/ValueObject/Uuid.php index 200dcb667..63a30fcc8 100644 --- a/src/Shared/Domain/ValueObject/Uuid.php +++ b/src/Shared/Domain/ValueObject/Uuid.php @@ -10,35 +10,35 @@ abstract class Uuid implements Stringable { - final public function __construct(protected string $value) - { - $this->ensureIsValidUuid($value); - } - - final public static function random(): self - { - return new static(RamseyUuid::uuid4()->toString()); - } - - final public function value(): string - { - return $this->value; - } - - final public function equals(self $other): bool - { - return $this->value() === $other->value(); - } - - public function __toString(): string - { - return $this->value(); - } - - private function ensureIsValidUuid(string $id): void - { - if (!RamseyUuid::isValid($id)) { - throw new InvalidArgumentException(sprintf('<%s> does not allow the value <%s>.', self::class, $id)); - } - } + final public function __construct(protected string $value) + { + $this->ensureIsValidUuid($value); + } + + final public static function random(): self + { + return new static(RamseyUuid::uuid4()->toString()); + } + + final public function value(): string + { + return $this->value; + } + + final public function equals(self $other): bool + { + return $this->value() === $other->value(); + } + + public function __toString(): string + { + return $this->value(); + } + + private function ensureIsValidUuid(string $id): void + { + if (!RamseyUuid::isValid($id)) { + throw new InvalidArgumentException(sprintf('<%s> does not allow the value <%s>.', self::class, $id)); + } + } } diff --git a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php index 9098fe2d4..23564a9e1 100644 --- a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php +++ b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php @@ -16,65 +16,65 @@ final class CallableFirstParameterExtractor { - public static function forCallables(iterable $callables): array - { - return map(self::unflatten(), reindex(self::classExtractor(new self()), $callables)); - } - - public static function forPipedCallables(iterable $callables): array - { - return reduce(self::pipedCallablesReducer(), $callables, []); - } - - private static function classExtractor(self $parameterExtractor): callable - { - return static fn (object $handler): ?string => $parameterExtractor->extract($handler); - } - - private static function pipedCallablesReducer(): callable - { - return static function (array $subscribers, DomainEventSubscriber $subscriber): array { - $subscribedEvents = $subscriber::subscribedTo(); - - foreach ($subscribedEvents as $subscribedEvent) { - $subscribers[$subscribedEvent][] = $subscriber; - } - - return $subscribers; - }; - } - - private static function unflatten(): callable - { - return static fn (mixed $value): array => [$value]; - } - - public function extract(object $class): ?string - { - $reflector = new ReflectionClass($class); - $method = $reflector->getMethod('__invoke'); - - if ($this->hasOnlyOneParameter($method)) { - return $this->firstParameterClassFrom($method); - } - - return null; - } - - private function firstParameterClassFrom(ReflectionMethod $method): string - { - /** @var ReflectionNamedType|null $fistParameterType */ - $fistParameterType = $method->getParameters()[0]->getType(); - - if ($fistParameterType === null) { - throw new LogicException('Missing type hint for the first parameter of __invoke'); - } - - return $fistParameterType->getName(); - } - - private function hasOnlyOneParameter(ReflectionMethod $method): bool - { - return $method->getNumberOfParameters() === 1; - } + public static function forCallables(iterable $callables): array + { + return map(self::unflatten(), reindex(self::classExtractor(new self()), $callables)); + } + + public static function forPipedCallables(iterable $callables): array + { + return reduce(self::pipedCallablesReducer(), $callables, []); + } + + private static function classExtractor(self $parameterExtractor): callable + { + return static fn (object $handler): ?string => $parameterExtractor->extract($handler); + } + + private static function pipedCallablesReducer(): callable + { + return static function (array $subscribers, DomainEventSubscriber $subscriber): array { + $subscribedEvents = $subscriber::subscribedTo(); + + foreach ($subscribedEvents as $subscribedEvent) { + $subscribers[$subscribedEvent][] = $subscriber; + } + + return $subscribers; + }; + } + + private static function unflatten(): callable + { + return static fn (mixed $value): array => [$value]; + } + + public function extract(object $class): ?string + { + $reflector = new ReflectionClass($class); + $method = $reflector->getMethod('__invoke'); + + if ($this->hasOnlyOneParameter($method)) { + return $this->firstParameterClassFrom($method); + } + + return null; + } + + private function firstParameterClassFrom(ReflectionMethod $method): string + { + /** @var ReflectionNamedType|null $fistParameterType */ + $fistParameterType = $method->getParameters()[0]->getType(); + + if ($fistParameterType === null) { + throw new LogicException('Missing type hint for the first parameter of __invoke'); + } + + return $fistParameterType->getName(); + } + + private function hasOnlyOneParameter(ReflectionMethod $method): bool + { + return $method->getNumberOfParameters() === 1; + } } diff --git a/src/Shared/Infrastructure/Bus/Command/CommandNotRegisteredError.php b/src/Shared/Infrastructure/Bus/Command/CommandNotRegisteredError.php index 90efecda7..fdb18e189 100644 --- a/src/Shared/Infrastructure/Bus/Command/CommandNotRegisteredError.php +++ b/src/Shared/Infrastructure/Bus/Command/CommandNotRegisteredError.php @@ -9,10 +9,10 @@ final class CommandNotRegisteredError extends RuntimeException { - public function __construct(Command $command) - { - $commandClass = $command::class; + public function __construct(Command $command) + { + $commandClass = $command::class; - parent::__construct("The command <$commandClass> hasn't a command handler associated"); - } + parent::__construct("The command <$commandClass> hasn't a command handler associated"); + } } diff --git a/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php b/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php index ab94755cc..4f6bbed0e 100644 --- a/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php +++ b/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php @@ -15,27 +15,27 @@ final class InMemorySymfonyCommandBus implements CommandBus { - private readonly MessageBus $bus; + private readonly MessageBus $bus; - public function __construct(iterable $commandHandlers) - { - $this->bus = new MessageBus( - [ - new HandleMessageMiddleware( - new HandlersLocator(CallableFirstParameterExtractor::forCallables($commandHandlers)) - ), - ] - ); - } + public function __construct(iterable $commandHandlers) + { + $this->bus = new MessageBus( + [ + new HandleMessageMiddleware( + new HandlersLocator(CallableFirstParameterExtractor::forCallables($commandHandlers)) + ), + ] + ); + } - public function dispatch(Command $command): void - { - try { - $this->bus->dispatch($command); - } catch (NoHandlerForMessageException) { - throw new CommandNotRegisteredError($command); - } catch (HandlerFailedException $error) { - throw $error->getPrevious() ?? $error; - } - } + public function dispatch(Command $command): void + { + try { + $this->bus->dispatch($command); + } catch (NoHandlerForMessageException) { + throw new CommandNotRegisteredError($command); + } catch (HandlerFailedException $error) { + throw $error->getPrevious() ?? $error; + } + } } diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php b/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php index 6f1f035d8..3d73fa61b 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php @@ -9,19 +9,19 @@ final readonly class DomainEventJsonDeserializer { - public function __construct(private DomainEventMapping $mapping) {} + public function __construct(private DomainEventMapping $mapping) {} - public function deserialize(string $domainEvent): DomainEvent - { - $eventData = Utils::jsonDecode($domainEvent); - $eventName = $eventData['data']['type']; - $eventClass = $this->mapping->for($eventName); + public function deserialize(string $domainEvent): DomainEvent + { + $eventData = Utils::jsonDecode($domainEvent); + $eventName = $eventData['data']['type']; + $eventClass = $this->mapping->for($eventName); - return $eventClass::fromPrimitives( - $eventData['data']['attributes']['id'], - $eventData['data']['attributes'], - $eventData['data']['id'], - $eventData['data']['occurred_on'] - ); - } + return $eventClass::fromPrimitives( + $eventData['data']['attributes']['id'], + $eventData['data']['attributes'], + $eventData['data']['id'], + $eventData['data']['occurred_on'] + ); + } } diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventJsonSerializer.php b/src/Shared/Infrastructure/Bus/Event/DomainEventJsonSerializer.php index 113528e2f..293e5f996 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventJsonSerializer.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventJsonSerializer.php @@ -8,18 +8,18 @@ final class DomainEventJsonSerializer { - public static function serialize(DomainEvent $domainEvent): string - { - return json_encode( - [ - 'data' => [ - 'id' => $domainEvent->eventId(), - 'type' => $domainEvent::eventName(), - 'occurred_on' => $domainEvent->occurredOn(), - 'attributes' => array_merge($domainEvent->toPrimitives(), ['id' => $domainEvent->aggregateId()]), - ], - 'meta' => [], - ] - ); - } + public static function serialize(DomainEvent $domainEvent): string + { + return json_encode( + [ + 'data' => [ + 'id' => $domainEvent->eventId(), + 'type' => $domainEvent::eventName(), + 'occurred_on' => $domainEvent->occurredOn(), + 'attributes' => array_merge($domainEvent->toPrimitives(), ['id' => $domainEvent->aggregateId()]), + ], + 'meta' => [], + ] + ); + } } diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php b/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php index 66d37f0b4..697acad8d 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php @@ -12,32 +12,32 @@ final class DomainEventMapping { - private array $mapping; - - public function __construct(iterable $mapping) - { - $this->mapping = reduce($this->eventsExtractor(), $mapping, []); - } - - public function for(string $name): string - { - if (!isset($this->mapping[$name])) { - throw new RuntimeException("The Domain Event Class for <$name> doesn't exists or have no subscribers"); - } - - return $this->mapping[$name]; - } - - private function eventsExtractor(): callable - { - return fn (array $mapping, DomainEventSubscriber $subscriber): array => array_merge( - $mapping, - reindex($this->eventNameExtractor(), $subscriber::subscribedTo()) - ); - } - - private function eventNameExtractor(): callable - { - return static fn (string $eventClass): string => $eventClass::eventName(); - } + private array $mapping; + + public function __construct(iterable $mapping) + { + $this->mapping = reduce($this->eventsExtractor(), $mapping, []); + } + + public function for(string $name): string + { + if (!isset($this->mapping[$name])) { + throw new RuntimeException("The Domain Event Class for <$name> doesn't exists or have no subscribers"); + } + + return $this->mapping[$name]; + } + + private function eventsExtractor(): callable + { + return fn (array $mapping, DomainEventSubscriber $subscriber): array => array_merge( + $mapping, + reindex($this->eventNameExtractor(), $subscriber::subscribedTo()) + ); + } + + private function eventNameExtractor(): callable + { + return static fn (string $eventClass): string => $eventClass::eventName(); + } } diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php b/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php index 9dabe2ef4..b7d4f1f20 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php @@ -14,37 +14,37 @@ final class DomainEventSubscriberLocator { - private readonly array $mapping; - - public function __construct(Traversable $mapping) - { - $this->mapping = iterator_to_array($mapping); - } - - public function allSubscribedTo(string $eventClass): array - { - $formatted = CallableFirstParameterExtractor::forPipedCallables($this->mapping); - - return $formatted[$eventClass]; - } - - public function withRabbitMqQueueNamed(string $queueName): callable|DomainEventSubscriber - { - $subscriber = search( - static fn (DomainEventSubscriber $subscriber): bool => RabbitMqQueueNameFormatter::format($subscriber) === - $queueName, - $this->mapping - ); - - if ($subscriber === null) { - throw new RuntimeException("There are no subscribers for the <$queueName> queue"); - } - - return $subscriber; - } - - public function all(): array - { - return $this->mapping; - } + private readonly array $mapping; + + public function __construct(Traversable $mapping) + { + $this->mapping = iterator_to_array($mapping); + } + + public function allSubscribedTo(string $eventClass): array + { + $formatted = CallableFirstParameterExtractor::forPipedCallables($this->mapping); + + return $formatted[$eventClass]; + } + + public function withRabbitMqQueueNamed(string $queueName): callable|DomainEventSubscriber + { + $subscriber = search( + static fn (DomainEventSubscriber $subscriber): bool => RabbitMqQueueNameFormatter::format($subscriber) === + $queueName, + $this->mapping + ); + + if ($subscriber === null) { + throw new RuntimeException("There are no subscribers for the <$queueName> queue"); + } + + return $subscriber; + } + + public function all(): array + { + return $this->mapping; + } } diff --git a/src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php b/src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php index f7bc03b52..db19cb695 100644 --- a/src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php @@ -14,26 +14,26 @@ class InMemorySymfonyEventBus implements EventBus { - private readonly MessageBus $bus; + private readonly MessageBus $bus; - public function __construct(iterable $subscribers) - { - $this->bus = new MessageBus( - [ - new HandleMessageMiddleware( - new HandlersLocator(CallableFirstParameterExtractor::forPipedCallables($subscribers)) - ), - ] - ); - } + public function __construct(iterable $subscribers) + { + $this->bus = new MessageBus( + [ + new HandleMessageMiddleware( + new HandlersLocator(CallableFirstParameterExtractor::forPipedCallables($subscribers)) + ), + ] + ); + } - public function publish(DomainEvent ...$events): void - { - foreach ($events as $event) { - try { - $this->bus->dispatch($event); - } catch (NoHandlerForMessageException) { - } - } - } + public function publish(DomainEvent ...$events): void + { + foreach ($events as $event) { + try { + $this->bus->dispatch($event); + } catch (NoHandlerForMessageException) { + } + } + } } diff --git a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php index e81e525dd..a07e3b09f 100644 --- a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php +++ b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php @@ -16,53 +16,53 @@ final readonly class MySqlDoctrineDomainEventsConsumer { - private Connection $connection; + private Connection $connection; - public function __construct(EntityManager $entityManager, private DomainEventMapping $eventMapping) - { - $this->connection = $entityManager->getConnection(); - } + public function __construct(EntityManager $entityManager, private DomainEventMapping $eventMapping) + { + $this->connection = $entityManager->getConnection(); + } - public function consume(callable $subscribers, int $eventsToConsume): void - { - $events = $this->connection - ->executeQuery("SELECT * FROM domain_events ORDER BY occurred_on ASC LIMIT $eventsToConsume") - ->fetchAllAssociative(); + public function consume(callable $subscribers, int $eventsToConsume): void + { + $events = $this->connection + ->executeQuery("SELECT * FROM domain_events ORDER BY occurred_on ASC LIMIT $eventsToConsume") + ->fetchAllAssociative(); - each($this->executeSubscribers($subscribers), $events); + each($this->executeSubscribers($subscribers), $events); - $ids = implode(', ', map($this->idExtractor(), $events)); + $ids = implode(', ', map($this->idExtractor(), $events)); - if (!empty($ids)) { - $this->connection->executeStatement("DELETE FROM domain_events WHERE id IN ($ids)"); - } - } + if (!empty($ids)) { + $this->connection->executeStatement("DELETE FROM domain_events WHERE id IN ($ids)"); + } + } - private function executeSubscribers(callable $subscribers): callable - { - return function (array $rawEvent) use ($subscribers): void { - try { - $domainEventClass = $this->eventMapping->for($rawEvent['name']); - $domainEvent = $domainEventClass::fromPrimitives( - $rawEvent['aggregate_id'], - Utils::jsonDecode($rawEvent['body']), - $rawEvent['id'], - $this->formatDate($rawEvent['occurred_on']) - ); + private function executeSubscribers(callable $subscribers): callable + { + return function (array $rawEvent) use ($subscribers): void { + try { + $domainEventClass = $this->eventMapping->for($rawEvent['name']); + $domainEvent = $domainEventClass::fromPrimitives( + $rawEvent['aggregate_id'], + Utils::jsonDecode($rawEvent['body']), + $rawEvent['id'], + $this->formatDate($rawEvent['occurred_on']) + ); - $subscribers($domainEvent); - } catch (RuntimeException) { - } - }; - } + $subscribers($domainEvent); + } catch (RuntimeException) { + } + }; + } - private function formatDate(mixed $stringDate): string - { - return Utils::dateToString(new DateTimeImmutable($stringDate)); - } + private function formatDate(mixed $stringDate): string + { + return Utils::dateToString(new DateTimeImmutable($stringDate)); + } - private function idExtractor(): callable - { - return static fn (array $event): string => "'{$event['id']}'"; - } + private function idExtractor(): callable + { + return static fn (array $event): string => "'{$event['id']}'"; + } } diff --git a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php index 8876aec99..2b21c3897 100644 --- a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php @@ -14,36 +14,36 @@ final class MySqlDoctrineEventBus implements EventBus { - private const DATABASE_TIMESTAMP_FORMAT = 'Y-m-d H:i:s'; - private readonly Connection $connection; - - public function __construct(EntityManager $entityManager) - { - $this->connection = $entityManager->getConnection(); - } - - public function publish(DomainEvent ...$events): void - { - each($this->publisher(), $events); - } - - private function publisher(): callable - { - return function (DomainEvent $domainEvent): void { - $id = $this->connection->quote($domainEvent->eventId()); - $aggregateId = $this->connection->quote($domainEvent->aggregateId()); - $name = $this->connection->quote($domainEvent::eventName()); - $body = $this->connection->quote(Utils::jsonEncode($domainEvent->toPrimitives())); - $occurredOn = $this->connection->quote( - Utils::stringToDate($domainEvent->occurredOn())->format(self::DATABASE_TIMESTAMP_FORMAT) - ); - - $this->connection->executeStatement( - <<connection = $entityManager->getConnection(); + } + + public function publish(DomainEvent ...$events): void + { + each($this->publisher(), $events); + } + + private function publisher(): callable + { + return function (DomainEvent $domainEvent): void { + $id = $this->connection->quote($domainEvent->eventId()); + $aggregateId = $this->connection->quote($domainEvent->aggregateId()); + $name = $this->connection->quote($domainEvent::eventName()); + $body = $this->connection->quote(Utils::jsonEncode($domainEvent->toPrimitives())); + $occurredOn = $this->connection->quote( + Utils::stringToDate($domainEvent->occurredOn())->format(self::DATABASE_TIMESTAMP_FORMAT) + ); + + $this->connection->executeStatement( + <<declareExchange($exchangeName); - $this->declareExchange($retryExchangeName); - $this->declareExchange($deadLetterExchangeName); - - $this->declareQueues($exchangeName, $retryExchangeName, $deadLetterExchangeName, ...$subscribers); - } - - private function declareExchange(string $exchangeName): void - { - $exchange = $this->connection->exchange($exchangeName); - $exchange->setType(AMQP_EX_TYPE_TOPIC); - $exchange->setFlags(AMQP_DURABLE); - $exchange->declareExchange(); - } - - private function declareQueues( - string $exchangeName, - string $retryExchangeName, - string $deadLetterExchangeName, - DomainEventSubscriber ...$subscribers - ): void { - each($this->queueDeclarator($exchangeName, $retryExchangeName, $deadLetterExchangeName), $subscribers); - } - - private function queueDeclarator( - string $exchangeName, - string $retryExchangeName, - string $deadLetterExchangeName - ): callable { - return function (DomainEventSubscriber $subscriber) use ( - $exchangeName, - $retryExchangeName, - $deadLetterExchangeName - ): void { - $queueName = RabbitMqQueueNameFormatter::format($subscriber); - $retryQueueName = RabbitMqQueueNameFormatter::formatRetry($subscriber); - $deadLetterQueueName = RabbitMqQueueNameFormatter::formatDeadLetter($subscriber); - - $queue = $this->declareQueue($queueName); - $retryQueue = $this->declareQueue($retryQueueName, $exchangeName, $queueName, 1000); - $deadLetterQueue = $this->declareQueue($deadLetterQueueName); - - $queue->bind($exchangeName, $queueName); - $retryQueue->bind($retryExchangeName, $queueName); - $deadLetterQueue->bind($deadLetterExchangeName, $queueName); - - foreach ($subscriber::subscribedTo() as $eventClass) { - $queue->bind($exchangeName, $eventClass::eventName()); - } - }; - } - - private function declareQueue( - string $name, - string $deadLetterExchange = null, - string $deadLetterRoutingKey = null, - int $messageTtl = null - ): AMQPQueue { - $queue = $this->connection->queue($name); - - if ($deadLetterExchange !== null) { - $queue->setArgument('x-dead-letter-exchange', $deadLetterExchange); - } - - if ($deadLetterRoutingKey !== null) { - $queue->setArgument('x-dead-letter-routing-key', $deadLetterRoutingKey); - } - - if ($messageTtl !== null) { - $queue->setArgument('x-message-ttl', $messageTtl); - } - - $queue->setFlags(AMQP_DURABLE); - $queue->declareQueue(); - - return $queue; - } + public function __construct(private RabbitMqConnection $connection) {} + + public function configure(string $exchangeName, DomainEventSubscriber ...$subscribers): void + { + $retryExchangeName = RabbitMqExchangeNameFormatter::retry($exchangeName); + $deadLetterExchangeName = RabbitMqExchangeNameFormatter::deadLetter($exchangeName); + + $this->declareExchange($exchangeName); + $this->declareExchange($retryExchangeName); + $this->declareExchange($deadLetterExchangeName); + + $this->declareQueues($exchangeName, $retryExchangeName, $deadLetterExchangeName, ...$subscribers); + } + + private function declareExchange(string $exchangeName): void + { + $exchange = $this->connection->exchange($exchangeName); + $exchange->setType(AMQP_EX_TYPE_TOPIC); + $exchange->setFlags(AMQP_DURABLE); + $exchange->declareExchange(); + } + + private function declareQueues( + string $exchangeName, + string $retryExchangeName, + string $deadLetterExchangeName, + DomainEventSubscriber ...$subscribers + ): void { + each($this->queueDeclarator($exchangeName, $retryExchangeName, $deadLetterExchangeName), $subscribers); + } + + private function queueDeclarator( + string $exchangeName, + string $retryExchangeName, + string $deadLetterExchangeName + ): callable { + return function (DomainEventSubscriber $subscriber) use ( + $exchangeName, + $retryExchangeName, + $deadLetterExchangeName + ): void { + $queueName = RabbitMqQueueNameFormatter::format($subscriber); + $retryQueueName = RabbitMqQueueNameFormatter::formatRetry($subscriber); + $deadLetterQueueName = RabbitMqQueueNameFormatter::formatDeadLetter($subscriber); + + $queue = $this->declareQueue($queueName); + $retryQueue = $this->declareQueue($retryQueueName, $exchangeName, $queueName, 1000); + $deadLetterQueue = $this->declareQueue($deadLetterQueueName); + + $queue->bind($exchangeName, $queueName); + $retryQueue->bind($retryExchangeName, $queueName); + $deadLetterQueue->bind($deadLetterExchangeName, $queueName); + + foreach ($subscriber::subscribedTo() as $eventClass) { + $queue->bind($exchangeName, $eventClass::eventName()); + } + }; + } + + private function declareQueue( + string $name, + string $deadLetterExchange = null, + string $deadLetterRoutingKey = null, + int $messageTtl = null + ): AMQPQueue { + $queue = $this->connection->queue($name); + + if ($deadLetterExchange !== null) { + $queue->setArgument('x-dead-letter-exchange', $deadLetterExchange); + } + + if ($deadLetterRoutingKey !== null) { + $queue->setArgument('x-dead-letter-routing-key', $deadLetterRoutingKey); + } + + if ($messageTtl !== null) { + $queue->setArgument('x-message-ttl', $messageTtl); + } + + $queue->setFlags(AMQP_DURABLE); + $queue->declareQueue(); + + return $queue; + } } diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php index 5242ce758..ea3bcb9fd 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php @@ -11,58 +11,58 @@ final class RabbitMqConnection { - private static ?AMQPConnection $connection = null; - private static ?AMQPChannel $channel = null; - /** @var AMQPExchange[] */ - private static array $exchanges = []; - /** @var AMQPQueue[] */ - private static array $queues = []; - - public function __construct(private readonly array $configuration) {} - - public function queue(string $name): AMQPQueue - { - if (!array_key_exists($name, self::$queues)) { - $queue = new AMQPQueue($this->channel()); - $queue->setName($name); - - self::$queues[$name] = $queue; - } - - return self::$queues[$name]; - } - - public function exchange(string $name): AMQPExchange - { - if (!array_key_exists($name, self::$exchanges)) { - $exchange = new AMQPExchange($this->channel()); - $exchange->setName($name); - - self::$exchanges[$name] = $exchange; - } - - return self::$exchanges[$name]; - } - - private function channel(): AMQPChannel - { - if (!self::$channel?->isConnected()) { - self::$channel = new AMQPChannel($this->connection()); - } - - return self::$channel; - } - - private function connection(): AMQPConnection - { - if (self::$connection === null) { - self::$connection = new AMQPConnection($this->configuration); - } - - if (!self::$connection->isConnected()) { - self::$connection->pconnect(); - } - - return self::$connection; - } + private static ?AMQPConnection $connection = null; + private static ?AMQPChannel $channel = null; + /** @var AMQPExchange[] */ + private static array $exchanges = []; + /** @var AMQPQueue[] */ + private static array $queues = []; + + public function __construct(private readonly array $configuration) {} + + public function queue(string $name): AMQPQueue + { + if (!array_key_exists($name, self::$queues)) { + $queue = new AMQPQueue($this->channel()); + $queue->setName($name); + + self::$queues[$name] = $queue; + } + + return self::$queues[$name]; + } + + public function exchange(string $name): AMQPExchange + { + if (!array_key_exists($name, self::$exchanges)) { + $exchange = new AMQPExchange($this->channel()); + $exchange->setName($name); + + self::$exchanges[$name] = $exchange; + } + + return self::$exchanges[$name]; + } + + private function channel(): AMQPChannel + { + if (!self::$channel?->isConnected()) { + self::$channel = new AMQPChannel($this->connection()); + } + + return self::$channel; + } + + private function connection(): AMQPConnection + { + if (self::$connection === null) { + self::$connection = new AMQPConnection($this->configuration); + } + + if (!self::$connection->isConnected()) { + self::$connection->pconnect(); + } + + return self::$connection; + } } diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php index c6afe08e1..cef77aca2 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php @@ -16,78 +16,78 @@ final readonly class RabbitMqDomainEventsConsumer { - public function __construct( - private RabbitMqConnection $connection, - private DomainEventJsonDeserializer $deserializer, - private string $exchangeName, - private int $maxRetries - ) {} - - public function consume(callable|DomainEventSubscriber $subscriber, string $queueName): void - { - try { - $this->connection->queue($queueName)->consume($this->consumer($subscriber)); - } catch (AMQPQueueException) { - // We don't want to raise an error if there are no messages in the queue - } - } - - private function consumer(callable $subscriber): callable - { - return function (AMQPEnvelope $envelope, AMQPQueue $queue) use ($subscriber): void { - $event = $this->deserializer->deserialize($envelope->getBody()); - - try { - $subscriber($event); - } catch (Throwable $error) { - $this->handleConsumptionError($envelope, $queue); - - throw $error; - } - - $queue->ack($envelope->getDeliveryTag()); - }; - } - - private function handleConsumptionError(AMQPEnvelope $envelope, AMQPQueue $queue): void - { - $this->hasBeenRedeliveredTooMuch($envelope) - ? $this->sendToDeadLetter($envelope, $queue) - : $this->sendToRetry($envelope, $queue); - - $queue->ack($envelope->getDeliveryTag()); - } - - private function hasBeenRedeliveredTooMuch(AMQPEnvelope $envelope): bool - { - return get('redelivery_count', $envelope->getHeaders(), 0) >= $this->maxRetries; - } - - private function sendToDeadLetter(AMQPEnvelope $envelope, AMQPQueue $queue): void - { - $this->sendMessageTo(RabbitMqExchangeNameFormatter::deadLetter($this->exchangeName), $envelope, $queue); - } - - private function sendToRetry(AMQPEnvelope $envelope, AMQPQueue $queue): void - { - $this->sendMessageTo(RabbitMqExchangeNameFormatter::retry($this->exchangeName), $envelope, $queue); - } - - private function sendMessageTo(string $exchangeName, AMQPEnvelope $envelope, AMQPQueue $queue): void - { - $headers = $envelope->getHeaders(); - - $this->connection->exchange($exchangeName)->publish( - $envelope->getBody(), - $queue->getName(), - AMQP_NOPARAM, - [ - 'message_id' => $envelope->getMessageId(), - 'content_type' => $envelope->getContentType(), - 'content_encoding' => $envelope->getContentEncoding(), - 'priority' => $envelope->getPriority(), - 'headers' => assoc($headers, 'redelivery_count', get('redelivery_count', $headers, 0) + 1), - ] - ); - } + public function __construct( + private RabbitMqConnection $connection, + private DomainEventJsonDeserializer $deserializer, + private string $exchangeName, + private int $maxRetries + ) {} + + public function consume(callable|DomainEventSubscriber $subscriber, string $queueName): void + { + try { + $this->connection->queue($queueName)->consume($this->consumer($subscriber)); + } catch (AMQPQueueException) { + // We don't want to raise an error if there are no messages in the queue + } + } + + private function consumer(callable $subscriber): callable + { + return function (AMQPEnvelope $envelope, AMQPQueue $queue) use ($subscriber): void { + $event = $this->deserializer->deserialize($envelope->getBody()); + + try { + $subscriber($event); + } catch (Throwable $error) { + $this->handleConsumptionError($envelope, $queue); + + throw $error; + } + + $queue->ack($envelope->getDeliveryTag()); + }; + } + + private function handleConsumptionError(AMQPEnvelope $envelope, AMQPQueue $queue): void + { + $this->hasBeenRedeliveredTooMuch($envelope) + ? $this->sendToDeadLetter($envelope, $queue) + : $this->sendToRetry($envelope, $queue); + + $queue->ack($envelope->getDeliveryTag()); + } + + private function hasBeenRedeliveredTooMuch(AMQPEnvelope $envelope): bool + { + return get('redelivery_count', $envelope->getHeaders(), 0) >= $this->maxRetries; + } + + private function sendToDeadLetter(AMQPEnvelope $envelope, AMQPQueue $queue): void + { + $this->sendMessageTo(RabbitMqExchangeNameFormatter::deadLetter($this->exchangeName), $envelope, $queue); + } + + private function sendToRetry(AMQPEnvelope $envelope, AMQPQueue $queue): void + { + $this->sendMessageTo(RabbitMqExchangeNameFormatter::retry($this->exchangeName), $envelope, $queue); + } + + private function sendMessageTo(string $exchangeName, AMQPEnvelope $envelope, AMQPQueue $queue): void + { + $headers = $envelope->getHeaders(); + + $this->connection->exchange($exchangeName)->publish( + $envelope->getBody(), + $queue->getName(), + AMQP_NOPARAM, + [ + 'message_id' => $envelope->getMessageId(), + 'content_type' => $envelope->getContentType(), + 'content_encoding' => $envelope->getContentEncoding(), + 'priority' => $envelope->getPriority(), + 'headers' => assoc($headers, 'redelivery_count', get('redelivery_count', $headers, 0) + 1), + ] + ); + } } diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php index ddd46d98a..1d7bc1a89 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php @@ -14,43 +14,43 @@ final readonly class RabbitMqEventBus implements EventBus { - public function __construct( - private RabbitMqConnection $connection, - private string $exchangeName, - private MySqlDoctrineEventBus $failoverPublisher - ) {} - - public function publish(DomainEvent ...$events): void - { - each($this->publisher(), $events); - } - - private function publisher(): callable - { - return function (DomainEvent $event): void { - try { - $this->publishEvent($event); - } catch (AMQPException) { - $this->failoverPublisher->publish($event); - } - }; - } - - private function publishEvent(DomainEvent $event): void - { - $body = DomainEventJsonSerializer::serialize($event); - $routingKey = $event::eventName(); - $messageId = $event->eventId(); - - $this->connection->exchange($this->exchangeName)->publish( - $body, - $routingKey, - AMQP_NOPARAM, - [ - 'message_id' => $messageId, - 'content_type' => 'application/json', - 'content_encoding' => 'utf-8', - ] - ); - } + public function __construct( + private RabbitMqConnection $connection, + private string $exchangeName, + private MySqlDoctrineEventBus $failoverPublisher + ) {} + + public function publish(DomainEvent ...$events): void + { + each($this->publisher(), $events); + } + + private function publisher(): callable + { + return function (DomainEvent $event): void { + try { + $this->publishEvent($event); + } catch (AMQPException) { + $this->failoverPublisher->publish($event); + } + }; + } + + private function publishEvent(DomainEvent $event): void + { + $body = DomainEventJsonSerializer::serialize($event); + $routingKey = $event::eventName(); + $messageId = $event->eventId(); + + $this->connection->exchange($this->exchangeName)->publish( + $body, + $routingKey, + AMQP_NOPARAM, + [ + 'message_id' => $messageId, + 'content_type' => 'application/json', + 'content_encoding' => 'utf-8', + ] + ); + } } diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqExchangeNameFormatter.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqExchangeNameFormatter.php index db78767b7..7e9be1dc9 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqExchangeNameFormatter.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqExchangeNameFormatter.php @@ -6,13 +6,13 @@ final class RabbitMqExchangeNameFormatter { - public static function retry(string $exchangeName): string - { - return "retry-$exchangeName"; - } + public static function retry(string $exchangeName): string + { + return "retry-$exchangeName"; + } - public static function deadLetter(string $exchangeName): string - { - return "dead_letter-$exchangeName"; - } + public static function deadLetter(string $exchangeName): string + { + return "dead_letter-$exchangeName"; + } } diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqQueueNameFormatter.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqQueueNameFormatter.php index 0e648c280..052380602 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqQueueNameFormatter.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqQueueNameFormatter.php @@ -12,43 +12,43 @@ final class RabbitMqQueueNameFormatter { - public static function format(DomainEventSubscriber $subscriber): string - { - $subscriberClassPaths = explode('\\', str_replace('CodelyTv', 'codelytv', $subscriber::class)); + public static function format(DomainEventSubscriber $subscriber): string + { + $subscriberClassPaths = explode('\\', str_replace('CodelyTv', 'codelytv', $subscriber::class)); - $queueNameParts = [ - $subscriberClassPaths[0], - $subscriberClassPaths[1], - $subscriberClassPaths[2], - last($subscriberClassPaths), - ]; + $queueNameParts = [ + $subscriberClassPaths[0], + $subscriberClassPaths[1], + $subscriberClassPaths[2], + last($subscriberClassPaths), + ]; - return implode('.', map(self::toSnakeCase(), $queueNameParts)); - } + return implode('.', map(self::toSnakeCase(), $queueNameParts)); + } - public static function formatRetry(DomainEventSubscriber $subscriber): string - { - $queueName = self::format($subscriber); + public static function formatRetry(DomainEventSubscriber $subscriber): string + { + $queueName = self::format($subscriber); - return "retry.$queueName"; - } + return "retry.$queueName"; + } - public static function formatDeadLetter(DomainEventSubscriber $subscriber): string - { - $queueName = self::format($subscriber); + public static function formatDeadLetter(DomainEventSubscriber $subscriber): string + { + $queueName = self::format($subscriber); - return "dead_letter.$queueName"; - } + return "dead_letter.$queueName"; + } - public static function shortFormat(DomainEventSubscriber $subscriber): string - { - $subscriberCamelCaseName = (string) last(explode('\\', $subscriber::class)); + public static function shortFormat(DomainEventSubscriber $subscriber): string + { + $subscriberCamelCaseName = (string) last(explode('\\', $subscriber::class)); - return Utils::toSnakeCase($subscriberCamelCaseName); - } + return Utils::toSnakeCase($subscriberCamelCaseName); + } - private static function toSnakeCase(): callable - { - return static fn (string $text): string => Utils::toSnakeCase($text); - } + private static function toSnakeCase(): callable + { + return static fn (string $text): string => Utils::toSnakeCase($text); + } } diff --git a/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php b/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php index b404f19cf..c94edfdcc 100644 --- a/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php @@ -12,23 +12,23 @@ final readonly class WithPrometheusMonitoringEventBus implements EventBus { - public function __construct( - private PrometheusMonitor $monitor, - private string $appName, - private EventBus $bus - ) {} - - public function publish(DomainEvent ...$events): void - { - $counter = $this->monitor->registry()->getOrRegisterCounter( - $this->appName, - 'domain_event', - 'Domain Events', - ['name'] - ); - - each(fn (DomainEvent $event) => $counter->inc(['name' => $event::eventName()]), $events); - - $this->bus->publish(...$events); - } + public function __construct( + private PrometheusMonitor $monitor, + private string $appName, + private EventBus $bus + ) {} + + public function publish(DomainEvent ...$events): void + { + $counter = $this->monitor->registry()->getOrRegisterCounter( + $this->appName, + 'domain_event', + 'Domain Events', + ['name'] + ); + + each(fn (DomainEvent $event) => $counter->inc(['name' => $event::eventName()]), $events); + + $this->bus->publish(...$events); + } } diff --git a/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBus.php b/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBus.php index e08643fcd..4812214d0 100644 --- a/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBus.php +++ b/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBus.php @@ -16,28 +16,26 @@ final readonly class InMemorySymfonyQueryBus implements QueryBus { - private MessageBus $bus; + private MessageBus $bus; - public function __construct(iterable $queryHandlers) - { - $this->bus = new MessageBus( - [ - new HandleMessageMiddleware( - new HandlersLocator(CallableFirstParameterExtractor::forCallables($queryHandlers)) - ), - ] - ); - } + public function __construct(iterable $queryHandlers) + { + $this->bus = new MessageBus( + [ + new HandleMessageMiddleware(new HandlersLocator(CallableFirstParameterExtractor::forCallables($queryHandlers))), + ] + ); + } - public function ask(Query $query): ?Response - { - try { - /** @var HandledStamp $stamp */ - $stamp = $this->bus->dispatch($query)->last(HandledStamp::class); + public function ask(Query $query): ?Response + { + try { + /** @var HandledStamp $stamp */ + $stamp = $this->bus->dispatch($query)->last(HandledStamp::class); - return $stamp->getResult(); - } catch (NoHandlerForMessageException) { - throw new QueryNotRegisteredError($query); - } - } + return $stamp->getResult(); + } catch (NoHandlerForMessageException) { + throw new QueryNotRegisteredError($query); + } + } } diff --git a/src/Shared/Infrastructure/Bus/Query/QueryNotRegisteredError.php b/src/Shared/Infrastructure/Bus/Query/QueryNotRegisteredError.php index ea5926271..c79d4859c 100644 --- a/src/Shared/Infrastructure/Bus/Query/QueryNotRegisteredError.php +++ b/src/Shared/Infrastructure/Bus/Query/QueryNotRegisteredError.php @@ -9,10 +9,10 @@ final class QueryNotRegisteredError extends RuntimeException { - public function __construct(Query $query) - { - $queryClass = $query::class; + public function __construct(Query $query) + { + $queryClass = $query::class; - parent::__construct("The query <$queryClass> has no associated query handler"); - } + parent::__construct("The query <$queryClass> has no associated query handler"); + } } diff --git a/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php b/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php index a00220d6a..86b62015a 100644 --- a/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php +++ b/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php @@ -13,20 +13,20 @@ final class DatabaseConnections { - private readonly array $connections; - - public function __construct(iterable $connections) - { - $this->connections = Utils::iterableToArray($connections); - } - - public function clear(): void - { - each(fn (EntityManager $entityManager) => $entityManager->clear(), $this->connections); - } - - public function truncate(): void - { - apply(new MySqlDatabaseCleaner(), array_values($this->connections)); - } + private readonly array $connections; + + public function __construct(iterable $connections) + { + $this->connections = Utils::iterableToArray($connections); + } + + public function clear(): void + { + each(fn (EntityManager $entityManager) => $entityManager->clear(), $this->connections); + } + + public function truncate(): void + { + apply(new MySqlDatabaseCleaner(), array_values($this->connections)); + } } diff --git a/src/Shared/Infrastructure/Doctrine/Dbal/DbalCustomTypesRegistrar.php b/src/Shared/Infrastructure/Doctrine/Dbal/DbalCustomTypesRegistrar.php index c552cf7e7..e76a46c3b 100644 --- a/src/Shared/Infrastructure/Doctrine/Dbal/DbalCustomTypesRegistrar.php +++ b/src/Shared/Infrastructure/Doctrine/Dbal/DbalCustomTypesRegistrar.php @@ -10,23 +10,23 @@ final class DbalCustomTypesRegistrar { - private static bool $initialized = false; + private static bool $initialized = false; - public static function register(array $customTypeClassNames): void - { - if (!self::$initialized) { - each(self::registerType(), $customTypeClassNames); + public static function register(array $customTypeClassNames): void + { + if (!self::$initialized) { + each(self::registerType(), $customTypeClassNames); - self::$initialized = true; - } - } + self::$initialized = true; + } + } - private static function registerType(): callable - { - return static function (mixed $customTypeClassName): void { - $name = $customTypeClassName::customTypeName(); + private static function registerType(): callable + { + return static function (mixed $customTypeClassName): void { + $name = $customTypeClassName::customTypeName(); - Type::addType($name, $customTypeClassName); - }; - } + Type::addType($name, $customTypeClassName); + }; + } } diff --git a/src/Shared/Infrastructure/Doctrine/Dbal/DoctrineCustomType.php b/src/Shared/Infrastructure/Doctrine/Dbal/DoctrineCustomType.php index 38e761666..9a6cde085 100644 --- a/src/Shared/Infrastructure/Doctrine/Dbal/DoctrineCustomType.php +++ b/src/Shared/Infrastructure/Doctrine/Dbal/DoctrineCustomType.php @@ -6,5 +6,5 @@ interface DoctrineCustomType { - public static function customTypeName(): string; + public static function customTypeName(): string; } diff --git a/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php b/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php index 13da3a40f..35442dacf 100644 --- a/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php +++ b/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php @@ -19,66 +19,66 @@ final class DoctrineEntityManagerFactory { - private static array $sharedPrefixes = [ - __DIR__ . '/../../../Shared/Infrastructure/Persistence/Mappings' => 'CodelyTv\Shared\Domain', - ]; - - public static function create( - array $parameters, - array $contextPrefixes, - bool $isDevMode, - string $schemaFile, - array $dbalCustomTypesClasses - ): EntityManager { - if ($isDevMode) { - self::generateDatabaseIfNotExists($parameters, $schemaFile); - } - - DbalCustomTypesRegistrar::register($dbalCustomTypesClasses); - - $config = self::createConfiguration($contextPrefixes, $isDevMode); - - return new EntityManager(DriverManager::getConnection($parameters, $config, new EventManager()), $config); - } - - private static function generateDatabaseIfNotExists(array $parameters, string $schemaFile): void - { - self::ensureSchemaFileExists($schemaFile); - - $databaseName = $parameters['dbname']; - $parametersWithoutDatabaseName = dissoc($parameters, 'dbname'); - $connection = DriverManager::getConnection($parametersWithoutDatabaseName); - $platform = new MariaDBPlatform(); - $schemaManager = new MySQLSchemaManager($connection, $platform); - - if (!self::databaseExists($databaseName, $schemaManager)) { - $schemaManager->createDatabase($databaseName); - - $connection->executeStatement(sprintf('USE %s', $databaseName)); - $connection->executeStatement(file_get_contents(realpath($schemaFile))); - } - - $connection->close(); - } - - private static function databaseExists(string $databaseName, MySqlSchemaManager $schemaManager): bool - { - return in_array($databaseName, $schemaManager->listDatabases(), true); - } - - private static function ensureSchemaFileExists(string $schemaFile): void - { - if (!file_exists($schemaFile)) { - throw new RuntimeException(sprintf('The file <%s> does not exist', $schemaFile)); - } - } - - private static function createConfiguration(array $contextPrefixes, bool $isDevMode): Configuration - { - $config = ORMSetup::createConfiguration($isDevMode); - - $config->setMetadataDriverImpl(new SimplifiedXmlDriver(array_merge(self::$sharedPrefixes, $contextPrefixes))); - - return $config; - } + private static array $sharedPrefixes = [ + __DIR__ . '/../../../Shared/Infrastructure/Persistence/Mappings' => 'CodelyTv\Shared\Domain', + ]; + + public static function create( + array $parameters, + array $contextPrefixes, + bool $isDevMode, + string $schemaFile, + array $dbalCustomTypesClasses + ): EntityManager { + if ($isDevMode) { + self::generateDatabaseIfNotExists($parameters, $schemaFile); + } + + DbalCustomTypesRegistrar::register($dbalCustomTypesClasses); + + $config = self::createConfiguration($contextPrefixes, $isDevMode); + + return new EntityManager(DriverManager::getConnection($parameters, $config, new EventManager()), $config); + } + + private static function generateDatabaseIfNotExists(array $parameters, string $schemaFile): void + { + self::ensureSchemaFileExists($schemaFile); + + $databaseName = $parameters['dbname']; + $parametersWithoutDatabaseName = dissoc($parameters, 'dbname'); + $connection = DriverManager::getConnection($parametersWithoutDatabaseName); + $platform = new MariaDBPlatform(); + $schemaManager = new MySQLSchemaManager($connection, $platform); + + if (!self::databaseExists($databaseName, $schemaManager)) { + $schemaManager->createDatabase($databaseName); + + $connection->executeStatement(sprintf('USE %s', $databaseName)); + $connection->executeStatement(file_get_contents(realpath($schemaFile))); + } + + $connection->close(); + } + + private static function databaseExists(string $databaseName, MySqlSchemaManager $schemaManager): bool + { + return in_array($databaseName, $schemaManager->listDatabases(), true); + } + + private static function ensureSchemaFileExists(string $schemaFile): void + { + if (!file_exists($schemaFile)) { + throw new RuntimeException(sprintf('The file <%s> does not exist', $schemaFile)); + } + } + + private static function createConfiguration(array $contextPrefixes, bool $isDevMode): Configuration + { + $config = ORMSetup::createConfiguration($isDevMode); + + $config->setMetadataDriverImpl(new SimplifiedXmlDriver(array_merge(self::$sharedPrefixes, $contextPrefixes))); + + return $config; + } } diff --git a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php index d338b38cd..41480e009 100644 --- a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php +++ b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php @@ -8,26 +8,26 @@ final readonly class ElasticsearchClient { - public function __construct(private Client $client, private string $indexPrefix) {} + public function __construct(private Client $client, private string $indexPrefix) {} - public function persist(string $aggregateName, string $identifier, array $plainBody): void - { - $this->client->index( - [ - 'index' => sprintf('%s_%s', $this->indexPrefix, $aggregateName), - 'id' => $identifier, - 'body' => $plainBody, - ] - ); - } + public function persist(string $aggregateName, string $identifier, array $plainBody): void + { + $this->client->index( + [ + 'index' => sprintf('%s_%s', $this->indexPrefix, $aggregateName), + 'id' => $identifier, + 'body' => $plainBody, + ] + ); + } - public function client(): Client - { - return $this->client; - } + public function client(): Client + { + return $this->client; + } - public function indexPrefix(): string - { - return $this->indexPrefix; - } + public function indexPrefix(): string + { + return $this->indexPrefix; + } } diff --git a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php index 13a038ed4..a5472afb9 100644 --- a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php +++ b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php @@ -11,50 +11,50 @@ final class ElasticsearchClientFactory { - public function __invoke( - string $host, - string $indexPrefix, - string $schemasFolder, - string $environment - ): ElasticsearchClient { - $client = ClientBuilder::create()->setHosts([$host])->build(); - - $this->generateIndexIfNotExists($client, $indexPrefix, $schemasFolder, $environment); - - return new ElasticsearchClient($client, $indexPrefix); - } - - private function generateIndexIfNotExists( - Client $client, - string $indexPrefix, - string $schemasFolder, - string $environment - ): void { - if ($environment !== 'prod') { - return; - } - - $indexes = Utils::filesIn($schemasFolder, '.json'); - - foreach ($indexes as $index) { - $indexName = str_replace('.json', '', sprintf('%s_%s', $indexPrefix, $index)); - - if (!$this->indexExists($client, $indexName)) { - $indexBody = Utils::jsonDecode(file_get_contents("$schemasFolder/$index")); - - $client->indices()->create(['index' => $indexName, 'body' => $indexBody]); - } - } - } - - private function indexExists(Client $client, string $indexName): bool - { - try { - $client->indices()->getSettings(['index' => $indexName]); - - return true; - } catch (Missing404Exception) { - return false; - } - } + public function __invoke( + string $host, + string $indexPrefix, + string $schemasFolder, + string $environment + ): ElasticsearchClient { + $client = ClientBuilder::create()->setHosts([$host])->build(); + + $this->generateIndexIfNotExists($client, $indexPrefix, $schemasFolder, $environment); + + return new ElasticsearchClient($client, $indexPrefix); + } + + private function generateIndexIfNotExists( + Client $client, + string $indexPrefix, + string $schemasFolder, + string $environment + ): void { + if ($environment !== 'prod') { + return; + } + + $indexes = Utils::filesIn($schemasFolder, '.json'); + + foreach ($indexes as $index) { + $indexName = str_replace('.json', '', sprintf('%s_%s', $indexPrefix, $index)); + + if (!$this->indexExists($client, $indexName)) { + $indexBody = Utils::jsonDecode(file_get_contents("$schemasFolder/$index")); + + $client->indices()->create(['index' => $indexName, 'body' => $indexBody]); + } + } + } + + private function indexExists(Client $client, string $indexName): bool + { + try { + $client->indices()->getSettings(['index' => $indexName]); + + return true; + } catch (Missing404Exception) { + return false; + } + } } diff --git a/src/Shared/Infrastructure/Logger/MonologLogger.php b/src/Shared/Infrastructure/Logger/MonologLogger.php index 9dca53c91..1e0928028 100644 --- a/src/Shared/Infrastructure/Logger/MonologLogger.php +++ b/src/Shared/Infrastructure/Logger/MonologLogger.php @@ -8,20 +8,20 @@ final readonly class MonologLogger implements Logger { - public function __construct(private \Monolog\Logger $logger) {} + public function __construct(private \Monolog\Logger $logger) {} - public function info(string $message, array $context = []): void - { - $this->logger->info($message, $context); - } + public function info(string $message, array $context = []): void + { + $this->logger->info($message, $context); + } - public function warning(string $message, array $context = []): void - { - $this->logger->warning($message, $context); - } + public function warning(string $message, array $context = []): void + { + $this->logger->warning($message, $context); + } - public function critical(string $message, array $context = []): void - { - $this->logger->critical($message, $context); - } + public function critical(string $message, array $context = []): void + { + $this->logger->critical($message, $context); + } } diff --git a/src/Shared/Infrastructure/Monitoring/PrometheusMonitor.php b/src/Shared/Infrastructure/Monitoring/PrometheusMonitor.php index f504d288d..162c0482e 100644 --- a/src/Shared/Infrastructure/Monitoring/PrometheusMonitor.php +++ b/src/Shared/Infrastructure/Monitoring/PrometheusMonitor.php @@ -9,15 +9,15 @@ final readonly class PrometheusMonitor { - private CollectorRegistry $registry; + private CollectorRegistry $registry; - public function __construct() - { - $this->registry = new CollectorRegistry(new APC()); - } + public function __construct() + { + $this->registry = new CollectorRegistry(new APC()); + } - public function registry(): CollectorRegistry - { - return $this->registry; - } + public function registry(): CollectorRegistry + { + return $this->registry; + } } diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php index bb2f73604..88bd57083 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php @@ -14,86 +14,86 @@ final readonly class DoctrineCriteriaConverter { - public function __construct( - private Criteria $criteria, - private array $criteriaToDoctrineFields = [], - private array $hydrators = [] - ) {} - - public static function convert( - Criteria $criteria, - array $criteriaToDoctrineFields = [], - array $hydrators = [] - ): DoctrineCriteria { - $converter = new self($criteria, $criteriaToDoctrineFields, $hydrators); - - return $converter->convertToDoctrineCriteria(); - } - - private function convertToDoctrineCriteria(): DoctrineCriteria - { - return new DoctrineCriteria( - $this->buildExpression($this->criteria), - $this->formatOrder($this->criteria), - $this->criteria->offset(), - $this->criteria->limit() - ); - } - - private function buildExpression(Criteria $criteria): ?CompositeExpression - { - if ($criteria->hasFilters()) { - return new CompositeExpression( - CompositeExpression::TYPE_AND, - array_map($this->buildComparison(), $criteria->plainFilters()) - ); - } - - return null; - } - - private function buildComparison(): callable - { - return function (Filter $filter): Comparison { - $field = $this->mapFieldValue($filter->field()); - $value = $this->existsHydratorFor($field) - ? $this->hydrate($field, $filter->value()->value()) - : $filter->value()->value(); - - return new Comparison($field, $filter->operator()->value, $value); - }; - } - - private function mapFieldValue(FilterField $field): mixed - { - return array_key_exists($field->value(), $this->criteriaToDoctrineFields) - ? $this->criteriaToDoctrineFields[$field->value()] - : $field->value(); - } - - private function formatOrder(Criteria $criteria): ?array - { - if (!$criteria->hasOrder()) { - return null; - } - - return [$this->mapOrderBy($criteria->order()->orderBy()) => $criteria->order()->orderType()]; - } - - private function mapOrderBy(OrderBy $field): mixed - { - return array_key_exists($field->value(), $this->criteriaToDoctrineFields) - ? $this->criteriaToDoctrineFields[$field->value()] - : $field->value(); - } - - private function existsHydratorFor(mixed $field): bool - { - return array_key_exists($field, $this->hydrators); - } - - private function hydrate(mixed $field, string $value): mixed - { - return $this->hydrators[$field]($value); - } + public function __construct( + private Criteria $criteria, + private array $criteriaToDoctrineFields = [], + private array $hydrators = [] + ) {} + + public static function convert( + Criteria $criteria, + array $criteriaToDoctrineFields = [], + array $hydrators = [] + ): DoctrineCriteria { + $converter = new self($criteria, $criteriaToDoctrineFields, $hydrators); + + return $converter->convertToDoctrineCriteria(); + } + + private function convertToDoctrineCriteria(): DoctrineCriteria + { + return new DoctrineCriteria( + $this->buildExpression($this->criteria), + $this->formatOrder($this->criteria), + $this->criteria->offset(), + $this->criteria->limit() + ); + } + + private function buildExpression(Criteria $criteria): ?CompositeExpression + { + if ($criteria->hasFilters()) { + return new CompositeExpression( + CompositeExpression::TYPE_AND, + array_map($this->buildComparison(), $criteria->plainFilters()) + ); + } + + return null; + } + + private function buildComparison(): callable + { + return function (Filter $filter): Comparison { + $field = $this->mapFieldValue($filter->field()); + $value = $this->existsHydratorFor($field) + ? $this->hydrate($field, $filter->value()->value()) + : $filter->value()->value(); + + return new Comparison($field, $filter->operator()->value, $value); + }; + } + + private function mapFieldValue(FilterField $field): mixed + { + return array_key_exists($field->value(), $this->criteriaToDoctrineFields) + ? $this->criteriaToDoctrineFields[$field->value()] + : $field->value(); + } + + private function formatOrder(Criteria $criteria): ?array + { + if (!$criteria->hasOrder()) { + return null; + } + + return [$this->mapOrderBy($criteria->order()->orderBy()) => $criteria->order()->orderType()]; + } + + private function mapOrderBy(OrderBy $field): mixed + { + return array_key_exists($field->value(), $this->criteriaToDoctrineFields) + ? $this->criteriaToDoctrineFields[$field->value()] + : $field->value(); + } + + private function existsHydratorFor(mixed $field): bool + { + return array_key_exists($field, $this->hydrators); + } + + private function hydrate(mixed $field, string $value): mixed + { + return $this->hydrators[$field]($value); + } } diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php index 44d9835c1..dc6cdd9bb 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php @@ -11,36 +11,36 @@ abstract class DoctrineRepository { - public function __construct(private readonly EntityManager $entityManager) {} - - protected function entityManager(): EntityManager - { - return $this->entityManager; - } - - protected function persist(AggregateRoot $entity): void - { - $this->entityManager()->persist($entity); - $this->entityManager()->flush($entity); - } - - protected function remove(AggregateRoot $entity): void - { - $this->entityManager()->remove($entity); - $this->entityManager()->flush($entity); - } - - /** - * @template T of object - * - * @psalm-param class-string $entityClass - * - * @psalm-return EntityRepository - * - * @throws NotSupported - */ - protected function repository(string $entityClass): EntityRepository - { - return $this->entityManager->getRepository($entityClass); - } + public function __construct(private readonly EntityManager $entityManager) {} + + protected function entityManager(): EntityManager + { + return $this->entityManager; + } + + protected function persist(AggregateRoot $entity): void + { + $this->entityManager()->persist($entity); + $this->entityManager()->flush($entity); + } + + protected function remove(AggregateRoot $entity): void + { + $this->entityManager()->remove($entity); + $this->entityManager()->flush($entity); + } + + /** + * @template T of object + * + * @psalm-param class-string $entityClass + * + * @psalm-return EntityRepository + * + * @throws NotSupported + */ + protected function repository(string $entityClass): EntityRepository + { + return $this->entityManager->getRepository($entityClass); + } } diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php b/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php index f4668c11f..f90ebbe32 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php @@ -14,28 +14,28 @@ abstract class UuidType extends StringType implements DoctrineCustomType { - abstract protected function typeClassName(): string; - - final public static function customTypeName(): string - { - return Utils::toSnakeCase(str_replace('Type', '', (string) last(explode('\\', static::class)))); - } - - final public function getName(): string - { - return self::customTypeName(); - } - - final public function convertToPHPValue($value, AbstractPlatform $platform) - { - $className = $this->typeClassName(); - - return new $className($value); - } - - final public function convertToDatabaseValue($value, AbstractPlatform $platform) - { - /** @var Uuid $value */ - return $value->value(); - } + abstract protected function typeClassName(): string; + + final public static function customTypeName(): string + { + return Utils::toSnakeCase(str_replace('Type', '', (string) last(explode('\\', static::class)))); + } + + final public function getName(): string + { + return self::customTypeName(); + } + + final public function convertToPHPValue($value, AbstractPlatform $platform) + { + $className = $this->typeClassName(); + + return new $className($value); + } + + final public function convertToDatabaseValue($value, AbstractPlatform $platform) + { + /** @var Uuid $value */ + return $value->value(); + } } diff --git a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php index 55c34782d..885066f5e 100644 --- a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php +++ b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php @@ -9,44 +9,44 @@ final class ElasticQueryGenerator { - private const MUST_TYPE = 'must'; - private const MUST_NOT_TYPE = 'must_not'; - private const TERM_TERM = 'term'; - private const TERM_RANGE = 'range'; - private const TERM_WILDCARD = 'wildcard'; - - private static array $mustNotFields = [FilterOperator::NOT_EQUAL, FilterOperator::NOT_CONTAINS]; - - public function __invoke(array $query, Filter $filter): array - { - $type = $this->typeFor($filter->operator()); - $termLevel = $this->termLevelFor($filter->operator()); - $valueTemplate = $filter->operator()->isContaining() ? '*%s*' : '%s'; - - return array_merge_recursive( - $query, - [ - $type => [ - $termLevel => [ - $filter->field()->value() => sprintf($valueTemplate, strtolower($filter->value()->value())), - ], - ], - ] - ); - } - - private function typeFor(FilterOperator $operator): string - { - return in_array($operator->value, self::$mustNotFields, true) ? self::MUST_NOT_TYPE : self::MUST_TYPE; - } - - private function termLevelFor(FilterOperator $operator): string - { - return match ($operator) { - FilterOperator::EQUAL => self::TERM_TERM, - FilterOperator::NOT_EQUAL => '!=', - FilterOperator::GT, FilterOperator::LT => self::TERM_RANGE, - FilterOperator::CONTAINS, FilterOperator::NOT_CONTAINS => self::TERM_WILDCARD, - }; - } + private const MUST_TYPE = 'must'; + private const MUST_NOT_TYPE = 'must_not'; + private const TERM_TERM = 'term'; + private const TERM_RANGE = 'range'; + private const TERM_WILDCARD = 'wildcard'; + + private static array $mustNotFields = [FilterOperator::NOT_EQUAL, FilterOperator::NOT_CONTAINS]; + + public function __invoke(array $query, Filter $filter): array + { + $type = $this->typeFor($filter->operator()); + $termLevel = $this->termLevelFor($filter->operator()); + $valueTemplate = $filter->operator()->isContaining() ? '*%s*' : '%s'; + + return array_merge_recursive( + $query, + [ + $type => [ + $termLevel => [ + $filter->field()->value() => sprintf($valueTemplate, strtolower($filter->value()->value())), + ], + ], + ] + ); + } + + private function typeFor(FilterOperator $operator): string + { + return in_array($operator->value, self::$mustNotFields, true) ? self::MUST_NOT_TYPE : self::MUST_TYPE; + } + + private function termLevelFor(FilterOperator $operator): string + { + return match ($operator) { + FilterOperator::EQUAL => self::TERM_TERM, + FilterOperator::NOT_EQUAL => '!=', + FilterOperator::GT, FilterOperator::LT => self::TERM_RANGE, + FilterOperator::CONTAINS, FilterOperator::NOT_CONTAINS => self::TERM_WILDCARD, + }; + } } diff --git a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchCriteriaConverter.php b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchCriteriaConverter.php index d215a7e33..257e531b3 100644 --- a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchCriteriaConverter.php +++ b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchCriteriaConverter.php @@ -10,44 +10,44 @@ final class ElasticsearchCriteriaConverter { - public function convert(Criteria $criteria): array - { - return [ - 'body' => array_merge( - ['from' => $criteria->offset() ?: 0, 'size' => $criteria->limit() ?: 1000], - $this->formatQuery($criteria), - $this->formatSort($criteria) - ), - ]; - } - - private function formatQuery(Criteria $criteria): array - { - if ($criteria->hasFilters()) { - return [ - 'query' => [ - 'bool' => reduce(new ElasticQueryGenerator(), $criteria->filters(), []), - ], - ]; - } - - return []; - } - - private function formatSort(Criteria $criteria): array - { - if ($criteria->hasOrder()) { - $order = $criteria->order(); - - return [ - 'sort' => [ - $order->orderBy()->value() => [ - 'order' => $order->orderType()->value, - ], - ], - ]; - } - - return []; - } + public function convert(Criteria $criteria): array + { + return [ + 'body' => array_merge( + ['from' => $criteria->offset() ?: 0, 'size' => $criteria->limit() ?: 1000], + $this->formatQuery($criteria), + $this->formatSort($criteria) + ), + ]; + } + + private function formatQuery(Criteria $criteria): array + { + if ($criteria->hasFilters()) { + return [ + 'query' => [ + 'bool' => reduce(new ElasticQueryGenerator(), $criteria->filters(), []), + ], + ]; + } + + return []; + } + + private function formatSort(Criteria $criteria): array + { + if ($criteria->hasOrder()) { + $order = $criteria->order(); + + return [ + 'sort' => [ + $order->orderBy()->value() => [ + 'order' => $order->orderType()->value, + ], + ], + ]; + } + + return []; + } } diff --git a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php index 6d10df4be..3236dd248 100644 --- a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php +++ b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php @@ -13,49 +13,49 @@ abstract class ElasticsearchRepository { - public function __construct(private readonly ElasticsearchClient $client) {} + public function __construct(private readonly ElasticsearchClient $client) {} - abstract protected function aggregateName(): string; + abstract protected function aggregateName(): string; - final public function searchByCriteria(Criteria $criteria): array - { - $converter = new ElasticsearchCriteriaConverter(); + final public function searchByCriteria(Criteria $criteria): array + { + $converter = new ElasticsearchCriteriaConverter(); - $query = $converter->convert($criteria); + $query = $converter->convert($criteria); - return $this->searchRawElasticsearchQuery($query); - } + return $this->searchRawElasticsearchQuery($query); + } - protected function persist(string $id, array $plainBody): void - { - $this->client->persist($this->aggregateName(), $id, $plainBody); - } + protected function persist(string $id, array $plainBody): void + { + $this->client->persist($this->aggregateName(), $id, $plainBody); + } - protected function searchAllInElastic(): array - { - return $this->searchRawElasticsearchQuery([]); - } + protected function searchAllInElastic(): array + { + return $this->searchRawElasticsearchQuery([]); + } - protected function searchRawElasticsearchQuery(array $params): array - { - try { - $result = $this->client->client()->search(array_merge(['index' => $this->indexName()], $params)); + protected function searchRawElasticsearchQuery(array $params): array + { + try { + $result = $this->client->client()->search(array_merge(['index' => $this->indexName()], $params)); - $hits = (array) get_in(['hits', 'hits'], $result, []); + $hits = (array) get_in(['hits', 'hits'], $result, []); - return map($this->elasticValuesExtractor(), $hits); - } catch (Missing404Exception) { - return []; - } - } + return map($this->elasticValuesExtractor(), $hits); + } catch (Missing404Exception) { + return []; + } + } - protected function indexName(): string - { - return sprintf('%s_%s', $this->client->indexPrefix(), $this->aggregateName()); - } + protected function indexName(): string + { + return sprintf('%s_%s', $this->client->indexPrefix(), $this->aggregateName()); + } - private function elasticValuesExtractor(): callable - { - return static fn (array $elasticValues): array => $elasticValues['_source']; - } + private function elasticValuesExtractor(): callable + { + return static fn (array $elasticValues): array => $elasticValues['_source']; + } } diff --git a/src/Shared/Infrastructure/PhpRandomNumberGenerator.php b/src/Shared/Infrastructure/PhpRandomNumberGenerator.php index b01b0463d..b32a8be34 100644 --- a/src/Shared/Infrastructure/PhpRandomNumberGenerator.php +++ b/src/Shared/Infrastructure/PhpRandomNumberGenerator.php @@ -8,8 +8,8 @@ final class PhpRandomNumberGenerator implements RandomNumberGenerator { - public function generate(): int - { - return random_int(1, 5); - } + public function generate(): int + { + return random_int(1, 5); + } } diff --git a/src/Shared/Infrastructure/RamseyUuidGenerator.php b/src/Shared/Infrastructure/RamseyUuidGenerator.php index 36e46a640..8a8b703de 100644 --- a/src/Shared/Infrastructure/RamseyUuidGenerator.php +++ b/src/Shared/Infrastructure/RamseyUuidGenerator.php @@ -9,8 +9,8 @@ final class RamseyUuidGenerator implements UuidGenerator { - public function generate(): string - { - return Uuid::uuid4()->toString(); - } + public function generate(): string + { + return Uuid::uuid4()->toString(); + } } diff --git a/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php b/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php index 0d8883c57..0930af5ee 100644 --- a/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php +++ b/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php @@ -11,30 +11,30 @@ final class AddJsonBodyToRequestListener { - public function onKernelRequest(RequestEvent $event): void - { - $request = $event->getRequest(); - $requestContents = $request->getContent(); + public function onKernelRequest(RequestEvent $event): void + { + $request = $event->getRequest(); + $requestContents = $request->getContent(); - if (!empty($requestContents) && $this->containsHeader($request, 'Content-Type', 'application/json')) { - $jsonData = json_decode($requestContents, true, 512, JSON_THROW_ON_ERROR); - if (!$jsonData) { - throw new HttpException(Response::HTTP_BAD_REQUEST, 'Invalid json data'); - } - $jsonDataLowerCase = []; - foreach ($jsonData as $key => $value) { - $jsonDataLowerCase[preg_replace_callback( - '/_(.)/', - static fn ($matches): string => strtoupper((string) $matches[1]), - (string) $key - )] = $value; - } - $request->request->replace($jsonDataLowerCase); - } - } + if (!empty($requestContents) && $this->containsHeader($request, 'Content-Type', 'application/json')) { + $jsonData = json_decode($requestContents, true, 512, JSON_THROW_ON_ERROR); + if (!$jsonData) { + throw new HttpException(Response::HTTP_BAD_REQUEST, 'Invalid json data'); + } + $jsonDataLowerCase = []; + foreach ($jsonData as $key => $value) { + $jsonDataLowerCase[preg_replace_callback( + '/_(.)/', + static fn ($matches): string => strtoupper((string) $matches[1]), + (string) $key + )] = $value; + } + $request->request->replace($jsonDataLowerCase); + } + } - private function containsHeader(Request $request, string $name, string $value): bool - { - return str_starts_with((string) $request->headers->get($name), $value); - } + private function containsHeader(Request $request, string $name, string $value): bool + { + return str_starts_with((string) $request->headers->get($name), $value); + } } diff --git a/src/Shared/Infrastructure/Symfony/ApiController.php b/src/Shared/Infrastructure/Symfony/ApiController.php index 50fcdd989..09dd9be51 100644 --- a/src/Shared/Infrastructure/Symfony/ApiController.php +++ b/src/Shared/Infrastructure/Symfony/ApiController.php @@ -14,26 +14,26 @@ abstract class ApiController { - public function __construct( - private readonly QueryBus $queryBus, - private readonly CommandBus $commandBus, - ApiExceptionsHttpStatusCodeMapping $exceptionHandler - ) { - each( - fn (int $httpCode, string $exceptionClass) => $exceptionHandler->register($exceptionClass, $httpCode), - $this->exceptions() - ); - } - - abstract protected function exceptions(): array; - - protected function ask(Query $query): ?Response - { - return $this->queryBus->ask($query); - } - - protected function dispatch(Command $command): void - { - $this->commandBus->dispatch($command); - } + public function __construct( + private readonly QueryBus $queryBus, + private readonly CommandBus $commandBus, + ApiExceptionsHttpStatusCodeMapping $exceptionHandler + ) { + each( + fn (int $httpCode, string $exceptionClass) => $exceptionHandler->register($exceptionClass, $httpCode), + $this->exceptions() + ); + } + + abstract protected function exceptions(): array; + + protected function ask(Query $query): ?Response + { + return $this->queryBus->ask($query); + } + + protected function dispatch(Command $command): void + { + $this->commandBus->dispatch($command); + } } diff --git a/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php b/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php index 80ef312df..d913d8766 100644 --- a/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php +++ b/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php @@ -13,36 +13,36 @@ final readonly class ApiExceptionListener { - public function __construct(private ApiExceptionsHttpStatusCodeMapping $exceptionHandler) {} - - public function onException(ExceptionEvent $event): void - { - $exception = $event->getThrowable(); - - $event->setResponse( - new JsonResponse( - [ - 'code' => $this->exceptionCodeFor($exception), - 'message' => $exception->getMessage(), - ], - $this->exceptionHandler->statusCodeFor($exception::class) - ) - ); - } - - private function exceptionCodeFor(Throwable $error): string - { - $domainErrorClass = DomainError::class; - - return $error instanceof $domainErrorClass - ? $error->errorCode() - : Utils::toSnakeCase($this->extractClassName($error)); - } - - private function extractClassName(object $object): string - { - $reflect = new ReflectionClass($object); - - return $reflect->getShortName(); - } + public function __construct(private ApiExceptionsHttpStatusCodeMapping $exceptionHandler) {} + + public function onException(ExceptionEvent $event): void + { + $exception = $event->getThrowable(); + + $event->setResponse( + new JsonResponse( + [ + 'code' => $this->exceptionCodeFor($exception), + 'message' => $exception->getMessage(), + ], + $this->exceptionHandler->statusCodeFor($exception::class) + ) + ); + } + + private function exceptionCodeFor(Throwable $error): string + { + $domainErrorClass = DomainError::class; + + return $error instanceof $domainErrorClass + ? $error->errorCode() + : Utils::toSnakeCase($this->extractClassName($error)); + } + + private function extractClassName(object $object): string + { + $reflect = new ReflectionClass($object); + + return $reflect->getShortName(); + } } diff --git a/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php b/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php index 2a8694347..8b1ad8a11 100644 --- a/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php +++ b/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php @@ -12,25 +12,25 @@ final class ApiExceptionsHttpStatusCodeMapping { - private const DEFAULT_STATUS_CODE = Response::HTTP_INTERNAL_SERVER_ERROR; - private array $exceptions = [ - InvalidArgumentException::class => Response::HTTP_BAD_REQUEST, - NotFoundHttpException::class => Response::HTTP_NOT_FOUND, - ]; - - public function register(string $exceptionClass, int $statusCode): void - { - $this->exceptions[$exceptionClass] = $statusCode; - } - - public function statusCodeFor(string $exceptionClass): int - { - $statusCode = get($exceptionClass, $this->exceptions, self::DEFAULT_STATUS_CODE); - - if ($statusCode === null) { - throw new InvalidArgumentException("There are no status code mapping for <$exceptionClass>"); - } - - return $statusCode; - } + private const DEFAULT_STATUS_CODE = Response::HTTP_INTERNAL_SERVER_ERROR; + private array $exceptions = [ + InvalidArgumentException::class => Response::HTTP_BAD_REQUEST, + NotFoundHttpException::class => Response::HTTP_NOT_FOUND, + ]; + + public function register(string $exceptionClass, int $statusCode): void + { + $this->exceptions[$exceptionClass] = $statusCode; + } + + public function statusCodeFor(string $exceptionClass): int + { + $statusCode = get($exceptionClass, $this->exceptions, self::DEFAULT_STATUS_CODE); + + if ($statusCode === null) { + throw new InvalidArgumentException("There are no status code mapping for <$exceptionClass>"); + } + + return $statusCode; + } } diff --git a/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php b/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php index 4443de0f5..ad1106448 100644 --- a/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php +++ b/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php @@ -14,49 +14,49 @@ final readonly class BasicHttpAuthMiddleware { - public function __construct(private CommandBus $bus) {} - - public function onKernelRequest(RequestEvent $event): void - { - $shouldAuthenticate = $event->getRequest()->attributes->get('auth', false); - - if ($shouldAuthenticate) { - $user = $event->getRequest()->headers->get('php-auth-user'); - $pass = $event->getRequest()->headers->get('php-auth-pw'); - - $this->hasIntroducedCredentials($user) - ? $this->authenticate($user, $pass, $event) - : $this->askForCredentials($event); - } - } - - private function hasIntroducedCredentials(?string $user): bool - { - return $user !== null; - } - - private function authenticate(string $user, string $pass, RequestEvent $event): void - { - try { - $this->bus->dispatch(new AuthenticateUserCommand($user, $pass)); - - $this->addUserDataToRequest($user, $event); - } catch (InvalidAuthCredentials|InvalidAuthUsername) { - $event->setResponse(new JsonResponse(['error' => 'Invalid credentials'], Response::HTTP_FORBIDDEN)); - } - } - - private function addUserDataToRequest(string $user, RequestEvent $event): void - { - $event->getRequest()->attributes->set('authenticated_username', $user); - } - - private function askForCredentials(RequestEvent $event): void - { - $event->setResponse( - new Response('', Response::HTTP_UNAUTHORIZED, [ + public function __construct(private CommandBus $bus) {} + + public function onKernelRequest(RequestEvent $event): void + { + $shouldAuthenticate = $event->getRequest()->attributes->get('auth', false); + + if ($shouldAuthenticate) { + $user = $event->getRequest()->headers->get('php-auth-user'); + $pass = $event->getRequest()->headers->get('php-auth-pw'); + + $this->hasIntroducedCredentials($user) + ? $this->authenticate($user, $pass, $event) + : $this->askForCredentials($event); + } + } + + private function hasIntroducedCredentials(?string $user): bool + { + return $user !== null; + } + + private function authenticate(string $user, string $pass, RequestEvent $event): void + { + try { + $this->bus->dispatch(new AuthenticateUserCommand($user, $pass)); + + $this->addUserDataToRequest($user, $event); + } catch (InvalidAuthCredentials|InvalidAuthUsername) { + $event->setResponse(new JsonResponse(['error' => 'Invalid credentials'], Response::HTTP_FORBIDDEN)); + } + } + + private function addUserDataToRequest(string $user, RequestEvent $event): void + { + $event->getRequest()->attributes->set('authenticated_username', $user); + } + + private function askForCredentials(RequestEvent $event): void + { + $event->setResponse( + new Response('', Response::HTTP_UNAUTHORIZED, [ 'WWW-Authenticate' => 'Basic realm="CodelyTV"', ]) - ); - } + ); + } } diff --git a/src/Shared/Infrastructure/Symfony/FlashSession.php b/src/Shared/Infrastructure/Symfony/FlashSession.php index 812c2a8b0..61bc6a523 100644 --- a/src/Shared/Infrastructure/Symfony/FlashSession.php +++ b/src/Shared/Infrastructure/Symfony/FlashSession.php @@ -9,34 +9,34 @@ final class FlashSession { - private static array $flashes = []; - - public function __construct(RequestStack $requestStack) - { - self::$flashes = Utils::dot($requestStack->getSession()->getFlashBag()->all()); - } - - public function get(string $key, $default = null) - { - if (array_key_exists($key, self::$flashes)) { - return self::$flashes[$key]; - } - - if (array_key_exists($key . '.0', self::$flashes)) { - return self::$flashes[$key . '.0']; - } - - if (array_key_exists($key . '.0.0', self::$flashes)) { - return self::$flashes[$key . '.0.0']; - } - - return $default; - } - - public function has(string $key): bool - { - return array_key_exists($key, self::$flashes) - || array_key_exists($key . '.0', self::$flashes) - || array_key_exists($key . '.0.0', self::$flashes); - } + private static array $flashes = []; + + public function __construct(RequestStack $requestStack) + { + self::$flashes = Utils::dot($requestStack->getSession()->getFlashBag()->all()); + } + + public function get(string $key, $default = null) + { + if (array_key_exists($key, self::$flashes)) { + return self::$flashes[$key]; + } + + if (array_key_exists($key . '.0', self::$flashes)) { + return self::$flashes[$key . '.0']; + } + + if (array_key_exists($key . '.0.0', self::$flashes)) { + return self::$flashes[$key . '.0.0']; + } + + return $default; + } + + public function has(string $key): bool + { + return array_key_exists($key, self::$flashes) + || array_key_exists($key . '.0', self::$flashes) + || array_key_exists($key . '.0.0', self::$flashes); + } } diff --git a/src/Shared/Infrastructure/Symfony/WebController.php b/src/Shared/Infrastructure/Symfony/WebController.php index 26bbecf23..741d764f0 100644 --- a/src/Shared/Infrastructure/Symfony/WebController.php +++ b/src/Shared/Infrastructure/Symfony/WebController.php @@ -16,59 +16,59 @@ abstract class WebController extends ApiController { - public function __construct( - private readonly Environment $twig, - private readonly RouterInterface $router, - private readonly RequestStack $requestStack, - QueryBus $queryBus, - CommandBus $commandBus, - ApiExceptionsHttpStatusCodeMapping $exceptionHandler - ) { - parent::__construct($queryBus, $commandBus, $exceptionHandler); - } + public function __construct( + private readonly Environment $twig, + private readonly RouterInterface $router, + private readonly RequestStack $requestStack, + QueryBus $queryBus, + CommandBus $commandBus, + ApiExceptionsHttpStatusCodeMapping $exceptionHandler + ) { + parent::__construct($queryBus, $commandBus, $exceptionHandler); + } - final public function render(string $templatePath, array $arguments = []): SymfonyResponse - { - return new SymfonyResponse($this->twig->render($templatePath, $arguments)); - } + final public function render(string $templatePath, array $arguments = []): SymfonyResponse + { + return new SymfonyResponse($this->twig->render($templatePath, $arguments)); + } - final public function redirect(string $routeName): RedirectResponse - { - return new RedirectResponse($this->router->generate($routeName), 302); - } + final public function redirect(string $routeName): RedirectResponse + { + return new RedirectResponse($this->router->generate($routeName), 302); + } - final public function redirectWithMessage(string $routeName, string $message): RedirectResponse - { - $this->addFlashFor('message', [$message]); + final public function redirectWithMessage(string $routeName, string $message): RedirectResponse + { + $this->addFlashFor('message', [$message]); - return $this->redirect($routeName); - } + return $this->redirect($routeName); + } - final public function redirectWithErrors( - string $routeName, - ConstraintViolationListInterface $errors, - Request $request - ): RedirectResponse { - $this->addFlashFor('errors', $this->formatFlashErrors($errors)); - $this->addFlashFor('inputs', $request->request->all()); + final public function redirectWithErrors( + string $routeName, + ConstraintViolationListInterface $errors, + Request $request + ): RedirectResponse { + $this->addFlashFor('errors', $this->formatFlashErrors($errors)); + $this->addFlashFor('inputs', $request->request->all()); - return new RedirectResponse($this->router->generate($routeName), 302); - } + return new RedirectResponse($this->router->generate($routeName), 302); + } - private function formatFlashErrors(ConstraintViolationListInterface $violations): array - { - $errors = []; - foreach ($violations as $violation) { - $errors[str_replace(['[', ']'], ['', ''], $violation->getPropertyPath())] = $violation->getMessage(); - } + private function formatFlashErrors(ConstraintViolationListInterface $violations): array + { + $errors = []; + foreach ($violations as $violation) { + $errors[str_replace(['[', ']'], ['', ''], $violation->getPropertyPath())] = $violation->getMessage(); + } - return $errors; - } + return $errors; + } - private function addFlashFor(string $prefix, array $messages): void - { - foreach ($messages as $key => $message) { - $this->requestStack->getSession()->getFlashBag()->set($prefix . '.' . $key, $message); - } - } + private function addFlashFor(string $prefix, array $messages): void + { + foreach ($messages as $key => $message) { + $this->requestStack->getSession()->getFlashBag()->set($prefix . '.' . $key, $message); + } + } } diff --git a/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php b/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php index a5fc8a61c..320be5d69 100644 --- a/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php +++ b/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php @@ -14,49 +14,49 @@ final class AuthenticateUserCommandHandlerTest extends AuthModuleUnitTestCase { - private AuthenticateUserCommandHandler|null $handler; + private AuthenticateUserCommandHandler|null $handler; - protected function setUp(): void - { - parent::setUp(); + protected function setUp(): void + { + parent::setUp(); - $this->handler = new AuthenticateUserCommandHandler(new UserAuthenticator($this->repository())); - } + $this->handler = new AuthenticateUserCommandHandler(new UserAuthenticator($this->repository())); + } - /** @test */ - public function it_should_authenticate_a_valid_user(): void - { - $command = AuthenticateUserCommandMother::create(); - $authUser = AuthUserMother::fromCommand($command); + /** @test */ + public function it_should_authenticate_a_valid_user(): void + { + $command = AuthenticateUserCommandMother::create(); + $authUser = AuthUserMother::fromCommand($command); - $this->shouldSearch($authUser->username(), $authUser); + $this->shouldSearch($authUser->username(), $authUser); - $this->dispatch($command, $this->handler); - } + $this->dispatch($command, $this->handler); + } - /** @test */ - public function it_should_throw_an_exception_when_the_user_does_not_exist(): void - { - $this->expectException(InvalidAuthUsername::class); + /** @test */ + public function it_should_throw_an_exception_when_the_user_does_not_exist(): void + { + $this->expectException(InvalidAuthUsername::class); - $command = AuthenticateUserCommandMother::create(); - $username = AuthUsernameMother::create($command->username()); + $command = AuthenticateUserCommandMother::create(); + $username = AuthUsernameMother::create($command->username()); - $this->shouldSearch($username); + $this->shouldSearch($username); - $this->dispatch($command, $this->handler); - } + $this->dispatch($command, $this->handler); + } - /** @test */ - public function it_should_throw_an_exception_when_the_password_does_not_math(): void - { - $this->expectException(InvalidAuthCredentials::class); + /** @test */ + public function it_should_throw_an_exception_when_the_password_does_not_math(): void + { + $this->expectException(InvalidAuthCredentials::class); - $command = AuthenticateUserCommandMother::create(); - $authUser = AuthUserMother::create(username: AuthUsernameMother::create($command->username())); + $command = AuthenticateUserCommandMother::create(); + $authUser = AuthUserMother::create(username: AuthUsernameMother::create($command->username())); - $this->shouldSearch($authUser->username(), $authUser); + $this->shouldSearch($authUser->username(), $authUser); - $this->dispatch($command, $this->handler); - } + $this->dispatch($command, $this->handler); + } } diff --git a/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandMother.php b/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandMother.php index d42c37d95..4418e2b9f 100644 --- a/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandMother.php +++ b/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandMother.php @@ -12,13 +12,13 @@ final class AuthenticateUserCommandMother { - public static function create( - ?AuthUsername $username = null, - ?AuthPassword $password = null - ): AuthenticateUserCommand { - return new AuthenticateUserCommand( - $username?->value() ?? AuthUsernameMother::create()->value(), - $password?->value() ?? AuthPasswordMother::create()->value() - ); - } + public static function create( + ?AuthUsername $username = null, + ?AuthPassword $password = null + ): AuthenticateUserCommand { + return new AuthenticateUserCommand( + $username?->value() ?? AuthUsernameMother::create()->value(), + $password?->value() ?? AuthPasswordMother::create()->value() + ); + } } diff --git a/tests/Backoffice/Auth/AuthModuleUnitTestCase.php b/tests/Backoffice/Auth/AuthModuleUnitTestCase.php index a5402858a..3abdfa568 100644 --- a/tests/Backoffice/Auth/AuthModuleUnitTestCase.php +++ b/tests/Backoffice/Auth/AuthModuleUnitTestCase.php @@ -12,19 +12,19 @@ abstract class AuthModuleUnitTestCase extends UnitTestCase { - private AuthRepository|MockInterface|null $repository = null; + private AuthRepository|MockInterface|null $repository = null; - protected function shouldSearch(AuthUsername $username, AuthUser $authUser = null): void - { - $this->repository() - ->shouldReceive('search') - ->with($this->similarTo($username)) - ->once() - ->andReturn($authUser); - } + protected function shouldSearch(AuthUsername $username, AuthUser $authUser = null): void + { + $this->repository() + ->shouldReceive('search') + ->with($this->similarTo($username)) + ->once() + ->andReturn($authUser); + } - protected function repository(): AuthRepository|MockInterface - { - return $this->repository ??= $this->mock(AuthRepository::class); - } + protected function repository(): AuthRepository|MockInterface + { + return $this->repository ??= $this->mock(AuthRepository::class); + } } diff --git a/tests/Backoffice/Auth/Domain/AuthPasswordMother.php b/tests/Backoffice/Auth/Domain/AuthPasswordMother.php index 6b344f818..9426c01c6 100644 --- a/tests/Backoffice/Auth/Domain/AuthPasswordMother.php +++ b/tests/Backoffice/Auth/Domain/AuthPasswordMother.php @@ -9,8 +9,8 @@ final class AuthPasswordMother { - public static function create(?string $value = null): AuthPassword - { - return new AuthPassword($value ?? UuidMother::create()); - } + public static function create(?string $value = null): AuthPassword + { + return new AuthPassword($value ?? UuidMother::create()); + } } diff --git a/tests/Backoffice/Auth/Domain/AuthUserMother.php b/tests/Backoffice/Auth/Domain/AuthUserMother.php index 0776c4838..76e3d34dc 100644 --- a/tests/Backoffice/Auth/Domain/AuthUserMother.php +++ b/tests/Backoffice/Auth/Domain/AuthUserMother.php @@ -11,16 +11,16 @@ final class AuthUserMother { - public static function create(?AuthUsername $username = null, ?AuthPassword $password = null): AuthUser - { - return new AuthUser($username ?? AuthUsernameMother::create(), $password ?? AuthPasswordMother::create()); - } + public static function create(?AuthUsername $username = null, ?AuthPassword $password = null): AuthUser + { + return new AuthUser($username ?? AuthUsernameMother::create(), $password ?? AuthPasswordMother::create()); + } - public static function fromCommand(AuthenticateUserCommand $command): AuthUser - { - return self::create( - AuthUsernameMother::create($command->username()), - AuthPasswordMother::create($command->password()) - ); - } + public static function fromCommand(AuthenticateUserCommand $command): AuthUser + { + return self::create( + AuthUsernameMother::create($command->username()), + AuthPasswordMother::create($command->password()) + ); + } } diff --git a/tests/Backoffice/Auth/Domain/AuthUsernameMother.php b/tests/Backoffice/Auth/Domain/AuthUsernameMother.php index 128f15382..988cedff5 100644 --- a/tests/Backoffice/Auth/Domain/AuthUsernameMother.php +++ b/tests/Backoffice/Auth/Domain/AuthUsernameMother.php @@ -9,8 +9,8 @@ final class AuthUsernameMother { - public static function create(?string $value = null): AuthUsername - { - return new AuthUsername($value ?? WordMother::create()); - } + public static function create(?string $value = null): AuthUsername + { + return new AuthUsername($value ?? WordMother::create()); + } } diff --git a/tests/Backoffice/Courses/BackofficeCoursesModuleInfrastructureTestCase.php b/tests/Backoffice/Courses/BackofficeCoursesModuleInfrastructureTestCase.php index b39b1b249..fe07bd4ae 100644 --- a/tests/Backoffice/Courses/BackofficeCoursesModuleInfrastructureTestCase.php +++ b/tests/Backoffice/Courses/BackofficeCoursesModuleInfrastructureTestCase.php @@ -11,13 +11,13 @@ abstract class BackofficeCoursesModuleInfrastructureTestCase extends BackofficeContextInfrastructureTestCase { - protected function mySqlRepository(): MySqlBackofficeCourseRepository - { - return new MySqlBackofficeCourseRepository($this->service(EntityManager::class)); - } + protected function mySqlRepository(): MySqlBackofficeCourseRepository + { + return new MySqlBackofficeCourseRepository($this->service(EntityManager::class)); + } - protected function elasticRepository(): ElasticsearchBackofficeCourseRepository - { - return $this->service(ElasticsearchBackofficeCourseRepository::class); - } + protected function elasticRepository(): ElasticsearchBackofficeCourseRepository + { + return $this->service(ElasticsearchBackofficeCourseRepository::class); + } } diff --git a/tests/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php b/tests/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php index d6620c4ad..666d30ab0 100644 --- a/tests/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php +++ b/tests/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php @@ -11,16 +11,16 @@ final class BackofficeCourseCriteriaMother { - public static function nameContains(string $text): Criteria - { - return CriteriaMother::create( - FiltersMother::createOne( - FilterMother::fromValues([ - 'field' => 'name', - 'operator' => 'CONTAINS', - 'value' => $text, - ]) - ) - ); - } + public static function nameContains(string $text): Criteria + { + return CriteriaMother::create( + FiltersMother::createOne( + FilterMother::fromValues([ + 'field' => 'name', + 'operator' => 'CONTAINS', + 'value' => $text, + ]) + ) + ); + } } diff --git a/tests/Backoffice/Courses/Domain/BackofficeCourseMother.php b/tests/Backoffice/Courses/Domain/BackofficeCourseMother.php index a28a35032..9d2ffbe35 100644 --- a/tests/Backoffice/Courses/Domain/BackofficeCourseMother.php +++ b/tests/Backoffice/Courses/Domain/BackofficeCourseMother.php @@ -11,12 +11,12 @@ final class BackofficeCourseMother { - public static function create(?string $id = null, ?string $name = null, ?string $duration = null): BackofficeCourse - { - return new BackofficeCourse( - $id ?? CourseIdMother::create()->value(), - $name ?? CourseNameMother::create()->value(), - $duration ?? CourseDurationMother::create()->value() - ); - } + public static function create(?string $id = null, ?string $name = null, ?string $duration = null): BackofficeCourse + { + return new BackofficeCourse( + $id ?? CourseIdMother::create()->value(), + $name ?? CourseNameMother::create()->value(), + $duration ?? CourseDurationMother::create()->value() + ); + } } diff --git a/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php b/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php index 10212414f..a45718666 100644 --- a/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php +++ b/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php @@ -11,59 +11,56 @@ final class ElasticsearchBackofficeCourseRepositoryTest extends BackofficeCoursesModuleInfrastructureTestCase { - /** @test */ - public function it_should_save_a_valid_course(): void - { - $this->elasticRepository()->save(BackofficeCourseMother::create()); - } + /** @test */ + public function it_should_save_a_valid_course(): void + { + $this->elasticRepository()->save(BackofficeCourseMother::create()); + } - /** @test */ - public function it_should_search_all_existing_courses(): void - { - $existingCourse = BackofficeCourseMother::create(); - $anotherExistingCourse = BackofficeCourseMother::create(); - $existingCourses = [$existingCourse, $anotherExistingCourse]; + /** @test */ + public function it_should_search_all_existing_courses(): void + { + $existingCourse = BackofficeCourseMother::create(); + $anotherExistingCourse = BackofficeCourseMother::create(); + $existingCourses = [$existingCourse, $anotherExistingCourse]; - $this->elasticRepository()->save($existingCourse); - $this->elasticRepository()->save($anotherExistingCourse); + $this->elasticRepository()->save($existingCourse); + $this->elasticRepository()->save($anotherExistingCourse); - $this->eventually(fn () => $this->assertSimilar($existingCourses, $this->elasticRepository()->searchAll())); - } + $this->eventually(fn () => $this->assertSimilar($existingCourses, $this->elasticRepository()->searchAll())); + } - /** @test */ - public function it_should_search_all_existing_courses_with_an_empty_criteria(): void - { - $existingCourse = BackofficeCourseMother::create(); - $anotherExistingCourse = BackofficeCourseMother::create(); - $existingCourses = [$existingCourse, $anotherExistingCourse]; + /** @test */ + public function it_should_search_all_existing_courses_with_an_empty_criteria(): void + { + $existingCourse = BackofficeCourseMother::create(); + $anotherExistingCourse = BackofficeCourseMother::create(); + $existingCourses = [$existingCourse, $anotherExistingCourse]; - $this->elasticRepository()->save($existingCourse); - $this->elasticRepository()->save($anotherExistingCourse); + $this->elasticRepository()->save($existingCourse); + $this->elasticRepository()->save($anotherExistingCourse); - $this->eventually( - fn () => $this->assertSimilar( - $existingCourses, - $this->elasticRepository()->matching(CriteriaMother::empty()) - ) - ); - } + $this->eventually( + fn () => $this->assertSimilar($existingCourses, $this->elasticRepository()->matching(CriteriaMother::empty())) + ); + } - /** @test */ - public function it_should_filter_by_criteria(): void - { - $dddInPhpCourse = BackofficeCourseMother::create(name: 'DDD en PHP'); - $dddInJavaCourse = BackofficeCourseMother::create(name: 'DDD en Java'); - $intellijCourse = BackofficeCourseMother::create(name: 'Exprimiendo Intellij'); - $dddCourses = [$dddInPhpCourse, $dddInJavaCourse]; + /** @test */ + public function it_should_filter_by_criteria(): void + { + $dddInPhpCourse = BackofficeCourseMother::create(name: 'DDD en PHP'); + $dddInJavaCourse = BackofficeCourseMother::create(name: 'DDD en Java'); + $intellijCourse = BackofficeCourseMother::create(name: 'Exprimiendo Intellij'); + $dddCourses = [$dddInPhpCourse, $dddInJavaCourse]; - $nameContainsDddCriteria = BackofficeCourseCriteriaMother::nameContains('DDD'); + $nameContainsDddCriteria = BackofficeCourseCriteriaMother::nameContains('DDD'); - $this->elasticRepository()->save($dddInJavaCourse); - $this->elasticRepository()->save($dddInPhpCourse); - $this->elasticRepository()->save($intellijCourse); + $this->elasticRepository()->save($dddInJavaCourse); + $this->elasticRepository()->save($dddInPhpCourse); + $this->elasticRepository()->save($intellijCourse); - $this->eventually( - fn () => $this->assertSimilar($dddCourses, $this->elasticRepository()->matching($nameContainsDddCriteria)) - ); - } + $this->eventually( + fn () => $this->assertSimilar($dddCourses, $this->elasticRepository()->matching($nameContainsDddCriteria)) + ); + } } diff --git a/tests/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php b/tests/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php index eb2f3b457..300d01d99 100644 --- a/tests/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php +++ b/tests/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php @@ -11,54 +11,54 @@ final class MySqlBackofficeCourseRepositoryTest extends BackofficeCoursesModuleInfrastructureTestCase { - /** @test */ - public function it_should_save_a_valid_course(): void - { - $this->mySqlRepository()->save(BackofficeCourseMother::create()); - } + /** @test */ + public function it_should_save_a_valid_course(): void + { + $this->mySqlRepository()->save(BackofficeCourseMother::create()); + } - /** @test */ - public function it_should_search_all_existing_courses(): void - { - $existingCourse = BackofficeCourseMother::create(); - $anotherExistingCourse = BackofficeCourseMother::create(); - $existingCourses = [$existingCourse, $anotherExistingCourse]; + /** @test */ + public function it_should_search_all_existing_courses(): void + { + $existingCourse = BackofficeCourseMother::create(); + $anotherExistingCourse = BackofficeCourseMother::create(); + $existingCourses = [$existingCourse, $anotherExistingCourse]; - $this->mySqlRepository()->save($existingCourse); - $this->mySqlRepository()->save($anotherExistingCourse); + $this->mySqlRepository()->save($existingCourse); + $this->mySqlRepository()->save($anotherExistingCourse); - $this->assertSimilar($existingCourses, $this->mySqlRepository()->searchAll()); - } + $this->assertSimilar($existingCourses, $this->mySqlRepository()->searchAll()); + } - /** @test */ - public function it_should_search_all_existing_courses_with_an_empty_criteria(): void - { - $existingCourse = BackofficeCourseMother::create(); - $anotherExistingCourse = BackofficeCourseMother::create(); - $existingCourses = [$existingCourse, $anotherExistingCourse]; + /** @test */ + public function it_should_search_all_existing_courses_with_an_empty_criteria(): void + { + $existingCourse = BackofficeCourseMother::create(); + $anotherExistingCourse = BackofficeCourseMother::create(); + $existingCourses = [$existingCourse, $anotherExistingCourse]; - $this->mySqlRepository()->save($existingCourse); - $this->mySqlRepository()->save($anotherExistingCourse); - $this->clearUnitOfWork(); + $this->mySqlRepository()->save($existingCourse); + $this->mySqlRepository()->save($anotherExistingCourse); + $this->clearUnitOfWork(); - $this->assertSimilar($existingCourses, $this->mySqlRepository()->matching(CriteriaMother::empty())); - } + $this->assertSimilar($existingCourses, $this->mySqlRepository()->matching(CriteriaMother::empty())); + } - /** @test */ - public function it_should_filter_by_criteria(): void - { - $dddInPhpCourse = BackofficeCourseMother::create(name: 'DDD en PHP'); - $dddInJavaCourse = BackofficeCourseMother::create(name: 'DDD en Java'); - $intellijCourse = BackofficeCourseMother::create(name: 'Exprimiendo Intellij'); - $dddCourses = [$dddInPhpCourse, $dddInJavaCourse]; + /** @test */ + public function it_should_filter_by_criteria(): void + { + $dddInPhpCourse = BackofficeCourseMother::create(name: 'DDD en PHP'); + $dddInJavaCourse = BackofficeCourseMother::create(name: 'DDD en Java'); + $intellijCourse = BackofficeCourseMother::create(name: 'Exprimiendo Intellij'); + $dddCourses = [$dddInPhpCourse, $dddInJavaCourse]; - $nameContainsDddCriteria = BackofficeCourseCriteriaMother::nameContains('DDD'); + $nameContainsDddCriteria = BackofficeCourseCriteriaMother::nameContains('DDD'); - $this->mySqlRepository()->save($dddInJavaCourse); - $this->mySqlRepository()->save($dddInPhpCourse); - $this->mySqlRepository()->save($intellijCourse); - $this->clearUnitOfWork(); + $this->mySqlRepository()->save($dddInJavaCourse); + $this->mySqlRepository()->save($dddInPhpCourse); + $this->mySqlRepository()->save($intellijCourse); + $this->clearUnitOfWork(); - $this->assertSimilar($dddCourses, $this->mySqlRepository()->matching($nameContainsDddCriteria)); - } + $this->assertSimilar($dddCourses, $this->mySqlRepository()->matching($nameContainsDddCriteria)); + } } diff --git a/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeContextInfrastructureTestCase.php b/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeContextInfrastructureTestCase.php index a64387798..0292a6623 100644 --- a/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeContextInfrastructureTestCase.php +++ b/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeContextInfrastructureTestCase.php @@ -11,20 +11,20 @@ abstract class BackofficeContextInfrastructureTestCase extends InfrastructureTestCase { - protected function setUp(): void - { - parent::setUp(); + protected function setUp(): void + { + parent::setUp(); - $arranger = new BackofficeEnvironmentArranger( - $this->service(ElasticsearchClient::class), - $this->service(EntityManager::class) - ); + $arranger = new BackofficeEnvironmentArranger( + $this->service(ElasticsearchClient::class), + $this->service(EntityManager::class) + ); - $arranger->arrange(); - } + $arranger->arrange(); + } - protected function kernelClass(): string - { - return BackofficeBackendKernel::class; - } + protected function kernelClass(): string + { + return BackofficeBackendKernel::class; + } } diff --git a/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeEnvironmentArranger.php b/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeEnvironmentArranger.php index 4bee80f16..33a33ea05 100644 --- a/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeEnvironmentArranger.php +++ b/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeEnvironmentArranger.php @@ -14,13 +14,13 @@ final readonly class BackofficeEnvironmentArranger implements EnvironmentArranger { - public function __construct(private ElasticsearchClient $elasticsearchClient, private EntityManager $entityManager) {} + public function __construct(private ElasticsearchClient $elasticsearchClient, private EntityManager $entityManager) {} - public function arrange(): void - { - apply(new ElasticDatabaseCleaner(), [$this->elasticsearchClient]); - apply(new MySqlDatabaseCleaner(), [$this->entityManager]); - } + public function arrange(): void + { + apply(new ElasticDatabaseCleaner(), [$this->elasticsearchClient]); + apply(new MySqlDatabaseCleaner(), [$this->entityManager]); + } - public function close(): void {} + public function close(): void {} } diff --git a/tests/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php b/tests/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php index fa17355db..e2c723de9 100644 --- a/tests/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php +++ b/tests/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php @@ -12,26 +12,26 @@ final class CreateCourseCommandHandlerTest extends CoursesModuleUnitTestCase { - private CreateCourseCommandHandler|null $handler; + private CreateCourseCommandHandler|null $handler; - protected function setUp(): void - { - parent::setUp(); + protected function setUp(): void + { + parent::setUp(); - $this->handler = new CreateCourseCommandHandler(new CourseCreator($this->repository(), $this->eventBus())); - } + $this->handler = new CreateCourseCommandHandler(new CourseCreator($this->repository(), $this->eventBus())); + } - /** @test */ - public function it_should_create_a_valid_course(): void - { - $command = CreateCourseCommandMother::create(); + /** @test */ + public function it_should_create_a_valid_course(): void + { + $command = CreateCourseCommandMother::create(); - $course = CourseMother::fromRequest($command); - $domainEvent = CourseCreatedDomainEventMother::fromCourse($course); + $course = CourseMother::fromRequest($command); + $domainEvent = CourseCreatedDomainEventMother::fromCourse($course); - $this->shouldSave($course); - $this->shouldPublishDomainEvent($domainEvent); + $this->shouldSave($course); + $this->shouldPublishDomainEvent($domainEvent); - $this->dispatch($command, $this->handler); - } + $this->dispatch($command, $this->handler); + } } diff --git a/tests/Mooc/Courses/Application/Create/CreateCourseCommandMother.php b/tests/Mooc/Courses/Application/Create/CreateCourseCommandMother.php index a1ba53fe2..9d4b31fea 100644 --- a/tests/Mooc/Courses/Application/Create/CreateCourseCommandMother.php +++ b/tests/Mooc/Courses/Application/Create/CreateCourseCommandMother.php @@ -14,15 +14,15 @@ final class CreateCourseCommandMother { - public static function create( - ?CourseId $id = null, - ?CourseName $name = null, - ?CourseDuration $duration = null - ): CreateCourseCommand { - return new CreateCourseCommand( - $id?->value() ?? CourseIdMother::create()->value(), - $name?->value() ?? CourseNameMother::create()->value(), - $duration?->value() ?? CourseDurationMother::create()->value() - ); - } + public static function create( + ?CourseId $id = null, + ?CourseName $name = null, + ?CourseDuration $duration = null + ): CreateCourseCommand { + return new CreateCourseCommand( + $id?->value() ?? CourseIdMother::create()->value(), + $name?->value() ?? CourseNameMother::create()->value(), + $duration?->value() ?? CourseDurationMother::create()->value() + ); + } } diff --git a/tests/Mooc/Courses/Application/Update/CourseRenamerTest.php b/tests/Mooc/Courses/Application/Update/CourseRenamerTest.php index 9481c0557..ff1f1b8b5 100644 --- a/tests/Mooc/Courses/Application/Update/CourseRenamerTest.php +++ b/tests/Mooc/Courses/Application/Update/CourseRenamerTest.php @@ -14,38 +14,38 @@ final class CourseRenamerTest extends CoursesModuleUnitTestCase { - private CourseRenamer|null $renamer; + private CourseRenamer|null $renamer; - protected function setUp(): void - { - parent::setUp(); + protected function setUp(): void + { + parent::setUp(); - $this->renamer = new CourseRenamer($this->repository(), $this->eventBus()); - } + $this->renamer = new CourseRenamer($this->repository(), $this->eventBus()); + } - /** @test */ - public function it_should_rename_an_existing_course(): void - { - $course = CourseMother::create(); - $newName = CourseNameMother::create(); - $renamedCourse = DuplicatorMother::with($course, ['name' => $newName]); + /** @test */ + public function it_should_rename_an_existing_course(): void + { + $course = CourseMother::create(); + $newName = CourseNameMother::create(); + $renamedCourse = DuplicatorMother::with($course, ['name' => $newName]); - $this->shouldSearch($course->id(), $course); - $this->shouldSave($renamedCourse); - $this->shouldNotPublishDomainEvent(); + $this->shouldSearch($course->id(), $course); + $this->shouldSave($renamedCourse); + $this->shouldNotPublishDomainEvent(); - $this->renamer->__invoke($course->id(), $newName); - } + $this->renamer->__invoke($course->id(), $newName); + } - /** @test */ - public function it_should_throw_an_exception_when_the_course_not_exist(): void - { - $this->expectException(CourseNotExist::class); + /** @test */ + public function it_should_throw_an_exception_when_the_course_not_exist(): void + { + $this->expectException(CourseNotExist::class); - $id = CourseIdMother::create(); + $id = CourseIdMother::create(); - $this->shouldSearch($id, null); + $this->shouldSearch($id, null); - $this->renamer->__invoke($id, CourseNameMother::create()); - } + $this->renamer->__invoke($id, CourseNameMother::create()); + } } diff --git a/tests/Mooc/Courses/CoursesModuleInfrastructureTestCase.php b/tests/Mooc/Courses/CoursesModuleInfrastructureTestCase.php index b81e7d9e8..67ad24223 100644 --- a/tests/Mooc/Courses/CoursesModuleInfrastructureTestCase.php +++ b/tests/Mooc/Courses/CoursesModuleInfrastructureTestCase.php @@ -9,8 +9,8 @@ abstract class CoursesModuleInfrastructureTestCase extends MoocContextInfrastructureTestCase { - protected function repository(): CourseRepository - { - return $this->service(CourseRepository::class); - } + protected function repository(): CourseRepository + { + return $this->service(CourseRepository::class); + } } diff --git a/tests/Mooc/Courses/CoursesModuleUnitTestCase.php b/tests/Mooc/Courses/CoursesModuleUnitTestCase.php index 3de440cdf..6fd84ad21 100644 --- a/tests/Mooc/Courses/CoursesModuleUnitTestCase.php +++ b/tests/Mooc/Courses/CoursesModuleUnitTestCase.php @@ -12,28 +12,28 @@ abstract class CoursesModuleUnitTestCase extends UnitTestCase { - private CourseRepository|MockInterface|null $repository = null; + private CourseRepository|MockInterface|null $repository = null; - protected function shouldSave(Course $course): void - { - $this->repository() - ->shouldReceive('save') - ->with($this->similarTo($course)) - ->once() - ->andReturnNull(); - } + protected function shouldSave(Course $course): void + { + $this->repository() + ->shouldReceive('save') + ->with($this->similarTo($course)) + ->once() + ->andReturnNull(); + } - protected function shouldSearch(CourseId $id, ?Course $course): void - { - $this->repository() - ->shouldReceive('search') - ->with($this->similarTo($id)) - ->once() - ->andReturn($course); - } + protected function shouldSearch(CourseId $id, ?Course $course): void + { + $this->repository() + ->shouldReceive('search') + ->with($this->similarTo($id)) + ->once() + ->andReturn($course); + } - protected function repository(): CourseRepository|MockInterface - { - return $this->repository ??= $this->mock(CourseRepository::class); - } + protected function repository(): CourseRepository|MockInterface + { + return $this->repository ??= $this->mock(CourseRepository::class); + } } diff --git a/tests/Mooc/Courses/Domain/CourseCreatedDomainEventMother.php b/tests/Mooc/Courses/Domain/CourseCreatedDomainEventMother.php index 00044f5fe..b04f7109d 100644 --- a/tests/Mooc/Courses/Domain/CourseCreatedDomainEventMother.php +++ b/tests/Mooc/Courses/Domain/CourseCreatedDomainEventMother.php @@ -12,20 +12,20 @@ final class CourseCreatedDomainEventMother { - public static function create( - ?CourseId $id = null, - ?CourseName $name = null, - ?CourseDuration $duration = null - ): CourseCreatedDomainEvent { - return new CourseCreatedDomainEvent( - $id?->value() ?? CourseIdMother::create()->value(), - $name?->value() ?? CourseNameMother::create()->value(), - $duration?->value() ?? CourseDurationMother::create()->value() - ); - } + public static function create( + ?CourseId $id = null, + ?CourseName $name = null, + ?CourseDuration $duration = null + ): CourseCreatedDomainEvent { + return new CourseCreatedDomainEvent( + $id?->value() ?? CourseIdMother::create()->value(), + $name?->value() ?? CourseNameMother::create()->value(), + $duration?->value() ?? CourseDurationMother::create()->value() + ); + } - public static function fromCourse(Course $course): CourseCreatedDomainEvent - { - return self::create($course->id(), $course->name(), $course->duration()); - } + public static function fromCourse(Course $course): CourseCreatedDomainEvent + { + return self::create($course->id(), $course->name(), $course->duration()); + } } diff --git a/tests/Mooc/Courses/Domain/CourseDurationMother.php b/tests/Mooc/Courses/Domain/CourseDurationMother.php index a3b78ae84..2cfc68c06 100644 --- a/tests/Mooc/Courses/Domain/CourseDurationMother.php +++ b/tests/Mooc/Courses/Domain/CourseDurationMother.php @@ -10,17 +10,17 @@ final class CourseDurationMother { - public static function create(?string $value = null): CourseDuration - { - return new CourseDuration($value ?? self::random()); - } + public static function create(?string $value = null): CourseDuration + { + return new CourseDuration($value ?? self::random()); + } - private static function random(): string - { - return sprintf( - '%s %s', - IntegerMother::lessThan(100), - RandomElementPicker::from('months', 'years', 'days', 'hours', 'minutes', 'seconds') - ); - } + private static function random(): string + { + return sprintf( + '%s %s', + IntegerMother::lessThan(100), + RandomElementPicker::from('months', 'years', 'days', 'hours', 'minutes', 'seconds') + ); + } } diff --git a/tests/Mooc/Courses/Domain/CourseIdMother.php b/tests/Mooc/Courses/Domain/CourseIdMother.php index f80119695..2b180910f 100644 --- a/tests/Mooc/Courses/Domain/CourseIdMother.php +++ b/tests/Mooc/Courses/Domain/CourseIdMother.php @@ -9,8 +9,8 @@ final class CourseIdMother { - public static function create(?string $value = null): CourseId - { - return new CourseId($value ?? UuidMother::create()); - } + public static function create(?string $value = null): CourseId + { + return new CourseId($value ?? UuidMother::create()); + } } diff --git a/tests/Mooc/Courses/Domain/CourseMother.php b/tests/Mooc/Courses/Domain/CourseMother.php index 31a622989..019770869 100644 --- a/tests/Mooc/Courses/Domain/CourseMother.php +++ b/tests/Mooc/Courses/Domain/CourseMother.php @@ -12,24 +12,24 @@ final class CourseMother { - public static function create( - ?CourseId $id = null, - ?CourseName $name = null, - ?CourseDuration $duration = null - ): Course { - return new Course( - $id ?? CourseIdMother::create(), - $name ?? CourseNameMother::create(), - $duration ?? CourseDurationMother::create() - ); - } + public static function create( + ?CourseId $id = null, + ?CourseName $name = null, + ?CourseDuration $duration = null + ): Course { + return new Course( + $id ?? CourseIdMother::create(), + $name ?? CourseNameMother::create(), + $duration ?? CourseDurationMother::create() + ); + } - public static function fromRequest(CreateCourseCommand $request): Course - { - return self::create( - CourseIdMother::create($request->id()), - CourseNameMother::create($request->name()), - CourseDurationMother::create($request->duration()) - ); - } + public static function fromRequest(CreateCourseCommand $request): Course + { + return self::create( + CourseIdMother::create($request->id()), + CourseNameMother::create($request->name()), + CourseDurationMother::create($request->duration()) + ); + } } diff --git a/tests/Mooc/Courses/Domain/CourseNameMother.php b/tests/Mooc/Courses/Domain/CourseNameMother.php index 210496b49..72c4e7e02 100644 --- a/tests/Mooc/Courses/Domain/CourseNameMother.php +++ b/tests/Mooc/Courses/Domain/CourseNameMother.php @@ -9,8 +9,8 @@ final class CourseNameMother { - public static function create(?string $value = null): CourseName - { - return new CourseName($value ?? WordMother::create()); - } + public static function create(?string $value = null): CourseName + { + return new CourseName($value ?? WordMother::create()); + } } diff --git a/tests/Mooc/Courses/Infrastructure/Persistence/CourseRepositoryTest.php b/tests/Mooc/Courses/Infrastructure/Persistence/CourseRepositoryTest.php index 25b23b6b9..56f84522c 100644 --- a/tests/Mooc/Courses/Infrastructure/Persistence/CourseRepositoryTest.php +++ b/tests/Mooc/Courses/Infrastructure/Persistence/CourseRepositoryTest.php @@ -10,27 +10,27 @@ final class CourseRepositoryTest extends CoursesModuleInfrastructureTestCase { - /** @test */ - public function it_should_save_a_course(): void - { - $course = CourseMother::create(); + /** @test */ + public function it_should_save_a_course(): void + { + $course = CourseMother::create(); - $this->repository()->save($course); - } + $this->repository()->save($course); + } - /** @test */ - public function it_should_return_an_existing_course(): void - { - $course = CourseMother::create(); + /** @test */ + public function it_should_return_an_existing_course(): void + { + $course = CourseMother::create(); - $this->repository()->save($course); + $this->repository()->save($course); - $this->assertEquals($course, $this->repository()->search($course->id())); - } + $this->assertEquals($course, $this->repository()->search($course->id())); + } - /** @test */ - public function it_should_not_return_a_non_existing_course(): void - { - $this->assertNull($this->repository()->search(CourseIdMother::create())); - } + /** @test */ + public function it_should_not_return_a_non_existing_course(): void + { + $this->assertNull($this->repository()->search(CourseIdMother::create())); + } } diff --git a/tests/Mooc/CoursesCounter/Application/Find/CoursesCounterResponseMother.php b/tests/Mooc/CoursesCounter/Application/Find/CoursesCounterResponseMother.php index 7abaed048..07a588148 100644 --- a/tests/Mooc/CoursesCounter/Application/Find/CoursesCounterResponseMother.php +++ b/tests/Mooc/CoursesCounter/Application/Find/CoursesCounterResponseMother.php @@ -10,8 +10,8 @@ final class CoursesCounterResponseMother { - public static function create(?CoursesCounterTotal $total = null): CoursesCounterResponse - { - return new CoursesCounterResponse($total?->value() ?? CoursesCounterTotalMother::create()->value()); - } + public static function create(?CoursesCounterTotal $total = null): CoursesCounterResponse + { + return new CoursesCounterResponse($total?->value() ?? CoursesCounterTotalMother::create()->value()); + } } diff --git a/tests/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php b/tests/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php index 9d6bf0573..db8887486 100644 --- a/tests/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php +++ b/tests/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php @@ -13,34 +13,34 @@ final class FindCoursesCounterQueryHandlerTest extends CoursesCounterModuleUnitTestCase { - private FindCoursesCounterQueryHandler|null $handler; + private FindCoursesCounterQueryHandler|null $handler; - protected function setUp(): void - { - parent::setUp(); + protected function setUp(): void + { + parent::setUp(); - $this->handler = new FindCoursesCounterQueryHandler(new CoursesCounterFinder($this->repository())); - } + $this->handler = new FindCoursesCounterQueryHandler(new CoursesCounterFinder($this->repository())); + } - /** @test */ - public function it_should_find_an_existing_courses_counter(): void - { - $counter = CoursesCounterMother::create(); - $query = new FindCoursesCounterQuery(); - $response = CoursesCounterResponseMother::create($counter->total()); + /** @test */ + public function it_should_find_an_existing_courses_counter(): void + { + $counter = CoursesCounterMother::create(); + $query = new FindCoursesCounterQuery(); + $response = CoursesCounterResponseMother::create($counter->total()); - $this->shouldSearch($counter); + $this->shouldSearch($counter); - $this->assertAskResponse($response, $query, $this->handler); - } + $this->assertAskResponse($response, $query, $this->handler); + } - /** @test */ - public function it_should_throw_an_exception_when_courses_counter_does_not_exists(): void - { - $query = new FindCoursesCounterQuery(); + /** @test */ + public function it_should_throw_an_exception_when_courses_counter_does_not_exists(): void + { + $query = new FindCoursesCounterQuery(); - $this->shouldSearch(null); + $this->shouldSearch(null); - $this->assertAskThrowsException(CoursesCounterNotExist::class, $query, $this->handler); - } + $this->assertAskThrowsException(CoursesCounterNotExist::class, $query, $this->handler); + } } diff --git a/tests/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php b/tests/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php index f7aa9b16d..6e9c9039b 100644 --- a/tests/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php +++ b/tests/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php @@ -14,61 +14,61 @@ final class IncrementCoursesCounterOnCourseCreatedTest extends CoursesCounterModuleUnitTestCase { - private IncrementCoursesCounterOnCourseCreated|null $subscriber; + private IncrementCoursesCounterOnCourseCreated|null $subscriber; - protected function setUp(): void - { - parent::setUp(); + protected function setUp(): void + { + parent::setUp(); - $this->subscriber = new IncrementCoursesCounterOnCourseCreated( - new CoursesCounterIncrementer($this->repository(), $this->uuidGenerator(), $this->eventBus()) - ); - } + $this->subscriber = new IncrementCoursesCounterOnCourseCreated( + new CoursesCounterIncrementer($this->repository(), $this->uuidGenerator(), $this->eventBus()) + ); + } - /** @test */ - public function it_should_initialize_a_new_counter(): void - { - $event = CourseCreatedDomainEventMother::create(); + /** @test */ + public function it_should_initialize_a_new_counter(): void + { + $event = CourseCreatedDomainEventMother::create(); - $courseId = CourseIdMother::create($event->aggregateId()); - $newCounter = CoursesCounterMother::withOne($courseId); - $domainEvent = CoursesCounterIncrementedDomainEventMother::fromCounter($newCounter); + $courseId = CourseIdMother::create($event->aggregateId()); + $newCounter = CoursesCounterMother::withOne($courseId); + $domainEvent = CoursesCounterIncrementedDomainEventMother::fromCounter($newCounter); - $this->shouldSearch(null); - $this->shouldGenerateUuid($newCounter->id()->value()); - $this->shouldSave($newCounter); - $this->shouldPublishDomainEvent($domainEvent); + $this->shouldSearch(null); + $this->shouldGenerateUuid($newCounter->id()->value()); + $this->shouldSave($newCounter); + $this->shouldPublishDomainEvent($domainEvent); - $this->notify($event, $this->subscriber); - } + $this->notify($event, $this->subscriber); + } - /** @test */ - public function it_should_increment_an_existing_counter(): void - { - $event = CourseCreatedDomainEventMother::create(); + /** @test */ + public function it_should_increment_an_existing_counter(): void + { + $event = CourseCreatedDomainEventMother::create(); - $courseId = CourseIdMother::create($event->aggregateId()); - $existingCounter = CoursesCounterMother::create(); - $incrementedCounter = CoursesCounterMother::incrementing($existingCounter, $courseId); - $domainEvent = CoursesCounterIncrementedDomainEventMother::fromCounter($incrementedCounter); + $courseId = CourseIdMother::create($event->aggregateId()); + $existingCounter = CoursesCounterMother::create(); + $incrementedCounter = CoursesCounterMother::incrementing($existingCounter, $courseId); + $domainEvent = CoursesCounterIncrementedDomainEventMother::fromCounter($incrementedCounter); - $this->shouldSearch($existingCounter); - $this->shouldSave($incrementedCounter); - $this->shouldPublishDomainEvent($domainEvent); + $this->shouldSearch($existingCounter); + $this->shouldSave($incrementedCounter); + $this->shouldPublishDomainEvent($domainEvent); - $this->notify($event, $this->subscriber); - } + $this->notify($event, $this->subscriber); + } - /** @test */ - public function it_should_not_increment_an_already_incremented_course(): void - { - $event = CourseCreatedDomainEventMother::create(); + /** @test */ + public function it_should_not_increment_an_already_incremented_course(): void + { + $event = CourseCreatedDomainEventMother::create(); - $courseId = CourseIdMother::create($event->aggregateId()); - $existingCounter = CoursesCounterMother::withOne($courseId); + $courseId = CourseIdMother::create($event->aggregateId()); + $existingCounter = CoursesCounterMother::withOne($courseId); - $this->shouldSearch($existingCounter); + $this->shouldSearch($existingCounter); - $this->notify($event, $this->subscriber); - } + $this->notify($event, $this->subscriber); + } } diff --git a/tests/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php b/tests/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php index 366cb59c9..2de4db1a7 100644 --- a/tests/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php +++ b/tests/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php @@ -11,27 +11,27 @@ abstract class CoursesCounterModuleUnitTestCase extends UnitTestCase { - private CoursesCounterRepository|MockInterface|null $repository = null; + private CoursesCounterRepository|MockInterface|null $repository = null; - protected function shouldSave(CoursesCounter $course): void - { - $this->repository() - ->shouldReceive('save') - ->once() - ->with($this->similarTo($course)) - ->andReturnNull(); - } + protected function shouldSave(CoursesCounter $course): void + { + $this->repository() + ->shouldReceive('save') + ->once() + ->with($this->similarTo($course)) + ->andReturnNull(); + } - protected function shouldSearch(?CoursesCounter $counter): void - { - $this->repository() - ->shouldReceive('search') - ->once() - ->andReturn($counter); - } + protected function shouldSearch(?CoursesCounter $counter): void + { + $this->repository() + ->shouldReceive('search') + ->once() + ->andReturn($counter); + } - protected function repository(): CoursesCounterRepository|MockInterface - { - return $this->repository ??= $this->mock(CoursesCounterRepository::class); - } + protected function repository(): CoursesCounterRepository|MockInterface + { + return $this->repository ??= $this->mock(CoursesCounterRepository::class); + } } diff --git a/tests/Mooc/CoursesCounter/Domain/CoursesCounterIdMother.php b/tests/Mooc/CoursesCounter/Domain/CoursesCounterIdMother.php index e0dfc9c57..98bf659a1 100644 --- a/tests/Mooc/CoursesCounter/Domain/CoursesCounterIdMother.php +++ b/tests/Mooc/CoursesCounter/Domain/CoursesCounterIdMother.php @@ -9,8 +9,8 @@ final class CoursesCounterIdMother { - public static function create(?string $value = null): CoursesCounterId - { - return new CoursesCounterId($value ?? UuidMother::create()); - } + public static function create(?string $value = null): CoursesCounterId + { + return new CoursesCounterId($value ?? UuidMother::create()); + } } diff --git a/tests/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEventMother.php b/tests/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEventMother.php index f3fc1e4d3..a3dc0b881 100644 --- a/tests/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEventMother.php +++ b/tests/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEventMother.php @@ -11,18 +11,18 @@ final class CoursesCounterIncrementedDomainEventMother { - public static function create( - ?CoursesCounterId $id = null, - ?CoursesCounterTotal $total = null - ): CoursesCounterIncrementedDomainEvent { - return new CoursesCounterIncrementedDomainEvent( - $id?->value() ?? CoursesCounterIdMother::create()->value(), - $total?->value() ?? CoursesCounterTotalMother::create()->value() - ); - } + public static function create( + ?CoursesCounterId $id = null, + ?CoursesCounterTotal $total = null + ): CoursesCounterIncrementedDomainEvent { + return new CoursesCounterIncrementedDomainEvent( + $id?->value() ?? CoursesCounterIdMother::create()->value(), + $total?->value() ?? CoursesCounterTotalMother::create()->value() + ); + } - public static function fromCounter(CoursesCounter $counter): CoursesCounterIncrementedDomainEvent - { - return self::create($counter->id(), $counter->total()); - } + public static function fromCounter(CoursesCounter $counter): CoursesCounterIncrementedDomainEvent + { + return self::create($counter->id(), $counter->total()); + } } diff --git a/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php b/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php index 7b199b90a..d5200a5cd 100644 --- a/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php +++ b/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php @@ -13,31 +13,29 @@ final class CoursesCounterMother { - public static function create( - ?CoursesCounterId $id = null, - ?CoursesCounterTotal $total = null, - CourseId ...$existingCourses - ): CoursesCounter { - return new CoursesCounter( - $id ?? CoursesCounterIdMother::create(), - $total ?? CoursesCounterTotalMother::create(), - ...count($existingCourses) ? $existingCourses : Repeater::random( - fn (): CourseId => CourseIdMother::create() - ) - ); - } + public static function create( + ?CoursesCounterId $id = null, + ?CoursesCounterTotal $total = null, + CourseId ...$existingCourses + ): CoursesCounter { + return new CoursesCounter( + $id ?? CoursesCounterIdMother::create(), + $total ?? CoursesCounterTotalMother::create(), + ...count($existingCourses) ? $existingCourses : Repeater::random(fn (): CourseId => CourseIdMother::create()) + ); + } - public static function withOne(CourseId $courseId): CoursesCounter - { - return self::create(CoursesCounterIdMother::create(), CoursesCounterTotalMother::one(), $courseId); - } + public static function withOne(CourseId $courseId): CoursesCounter + { + return self::create(CoursesCounterIdMother::create(), CoursesCounterTotalMother::one(), $courseId); + } - public static function incrementing(CoursesCounter $existingCounter, CourseId $courseId): CoursesCounter - { - return self::create( - $existingCounter->id(), - CoursesCounterTotalMother::create($existingCounter->total()->value() + 1), - ...array_merge($existingCounter->existingCourses(), [$courseId]) - ); - } + public static function incrementing(CoursesCounter $existingCounter, CourseId $courseId): CoursesCounter + { + return self::create( + $existingCounter->id(), + CoursesCounterTotalMother::create($existingCounter->total()->value() + 1), + ...array_merge($existingCounter->existingCourses(), [$courseId]) + ); + } } diff --git a/tests/Mooc/CoursesCounter/Domain/CoursesCounterTotalMother.php b/tests/Mooc/CoursesCounter/Domain/CoursesCounterTotalMother.php index 49115ea90..0c29d090a 100644 --- a/tests/Mooc/CoursesCounter/Domain/CoursesCounterTotalMother.php +++ b/tests/Mooc/CoursesCounter/Domain/CoursesCounterTotalMother.php @@ -9,18 +9,18 @@ final class CoursesCounterTotalMother { - public static function create(?int $value = null): CoursesCounterTotal - { - return new CoursesCounterTotal($value ?? IntegerMother::create()); - } + public static function create(?int $value = null): CoursesCounterTotal + { + return new CoursesCounterTotal($value ?? IntegerMother::create()); + } - public static function one(): CoursesCounterTotal - { - return self::create(1); - } + public static function one(): CoursesCounterTotal + { + return self::create(1); + } - public static function random(): CoursesCounterTotal - { - return self::create(IntegerMother::create()); - } + public static function random(): CoursesCounterTotal + { + return self::create(IntegerMother::create()); + } } diff --git a/tests/Mooc/MoocArchitectureTest.php b/tests/Mooc/MoocArchitectureTest.php index a1cf75f57..e1e57197f 100644 --- a/tests/Mooc/MoocArchitectureTest.php +++ b/tests/Mooc/MoocArchitectureTest.php @@ -11,46 +11,46 @@ final class MoocArchitectureTest { - public function test_mooc_domain_should_only_import_itself_and_shared(): Rule - { - return PHPat::rule() - ->classes(Selector::inNamespace('/^CodelyTv\\\\Mooc\\\\.+\\\\Domain/', true)) - ->canOnlyDependOn() - ->classes(...array_merge(ArchitectureTest::languageClasses(), [ - // Itself - Selector::inNamespace('/^CodelyTv\\\\Mooc\\\\.+\\\\Domain/', true), - // Shared - Selector::inNamespace('CodelyTv\Shared\Domain'), - ])) - ->because('mooc domain can only import itself and shared domain'); - } + public function test_mooc_domain_should_only_import_itself_and_shared(): Rule + { + return PHPat::rule() + ->classes(Selector::inNamespace('/^CodelyTv\\\\Mooc\\\\.+\\\\Domain/', true)) + ->canOnlyDependOn() + ->classes(...array_merge(ArchitectureTest::languageClasses(), [ + // Itself + Selector::inNamespace('/^CodelyTv\\\\Mooc\\\\.+\\\\Domain/', true), + // Shared + Selector::inNamespace('CodelyTv\Shared\Domain'), + ])) + ->because('mooc domain can only import itself and shared domain'); + } - public function test_mooc_application_should_only_import_itself_and_domain(): Rule - { - return PHPat::rule() - ->classes(Selector::inNamespace('/^CodelyTv\\\\Mooc\\\\.+\\\\Application/', true)) - ->canOnlyDependOn() - ->classes(...array_merge(ArchitectureTest::languageClasses(), [ - // Itself - Selector::inNamespace('/^CodelyTv\\\\Mooc\\\\.+\\\\Application/', true), - Selector::inNamespace('/^CodelyTv\\\\Mooc\\\\.+\\\\Domain/', true), - // Shared - Selector::inNamespace('CodelyTv\Shared'), - ])) - ->because('mooc application can only import itself and shared'); - } + public function test_mooc_application_should_only_import_itself_and_domain(): Rule + { + return PHPat::rule() + ->classes(Selector::inNamespace('/^CodelyTv\\\\Mooc\\\\.+\\\\Application/', true)) + ->canOnlyDependOn() + ->classes(...array_merge(ArchitectureTest::languageClasses(), [ + // Itself + Selector::inNamespace('/^CodelyTv\\\\Mooc\\\\.+\\\\Application/', true), + Selector::inNamespace('/^CodelyTv\\\\Mooc\\\\.+\\\\Domain/', true), + // Shared + Selector::inNamespace('CodelyTv\Shared'), + ])) + ->because('mooc application can only import itself and shared'); + } - public function test_mooc_infrastructure_should_not_import_other_contexts_beside_shared(): Rule - { - return PHPat::rule() - ->classes(Selector::inNamespace('CodelyTv\Mooc')) - ->shouldNotDependOn() - ->classes(Selector::inNamespace('CodelyTv')) - ->excluding( - // Itself - Selector::inNamespace('CodelyTv\Mooc'), - // Shared - Selector::inNamespace('CodelyTv\Shared'), - ); - } + public function test_mooc_infrastructure_should_not_import_other_contexts_beside_shared(): Rule + { + return PHPat::rule() + ->classes(Selector::inNamespace('CodelyTv\Mooc')) + ->shouldNotDependOn() + ->classes(Selector::inNamespace('CodelyTv')) + ->excluding( + // Itself + Selector::inNamespace('CodelyTv\Mooc'), + // Shared + Selector::inNamespace('CodelyTv\Shared'), + ); + } } diff --git a/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocContextInfrastructureTestCase.php b/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocContextInfrastructureTestCase.php index a793d0d7b..fb4bef7bf 100644 --- a/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocContextInfrastructureTestCase.php +++ b/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocContextInfrastructureTestCase.php @@ -10,26 +10,26 @@ abstract class MoocContextInfrastructureTestCase extends InfrastructureTestCase { - protected function setUp(): void - { - parent::setUp(); + protected function setUp(): void + { + parent::setUp(); - $arranger = new MoocEnvironmentArranger($this->service(EntityManager::class)); + $arranger = new MoocEnvironmentArranger($this->service(EntityManager::class)); - $arranger->arrange(); - } + $arranger->arrange(); + } - protected function tearDown(): void - { - $arranger = new MoocEnvironmentArranger($this->service(EntityManager::class)); + protected function tearDown(): void + { + $arranger = new MoocEnvironmentArranger($this->service(EntityManager::class)); - $arranger->close(); + $arranger->close(); - parent::tearDown(); - } + parent::tearDown(); + } - protected function kernelClass(): string - { - return MoocBackendKernel::class; - } + protected function kernelClass(): string + { + return MoocBackendKernel::class; + } } diff --git a/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php b/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php index 96a9024a0..39ddf5ef5 100644 --- a/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php +++ b/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php @@ -12,12 +12,12 @@ final readonly class MoocEnvironmentArranger implements EnvironmentArranger { - public function __construct(private EntityManager $entityManager) {} + public function __construct(private EntityManager $entityManager) {} - public function arrange(): void - { - apply(new MySqlDatabaseCleaner(), [$this->entityManager]); - } + public function arrange(): void + { + apply(new MySqlDatabaseCleaner(), [$this->entityManager]); + } - public function close(): void {} + public function close(): void {} } diff --git a/tests/Shared/Domain/Criteria/CriteriaMother.php b/tests/Shared/Domain/Criteria/CriteriaMother.php index 4fe2bb6b6..b46d45089 100644 --- a/tests/Shared/Domain/Criteria/CriteriaMother.php +++ b/tests/Shared/Domain/Criteria/CriteriaMother.php @@ -10,17 +10,17 @@ final class CriteriaMother { - public static function create( - Filters $filters, - Order $order = null, - int $offset = null, - int $limit = null - ): Criteria { - return new Criteria($filters, $order ?: OrderMother::none(), $offset, $limit); - } + public static function create( + Filters $filters, + Order $order = null, + int $offset = null, + int $limit = null + ): Criteria { + return new Criteria($filters, $order ?: OrderMother::none(), $offset, $limit); + } - public static function empty(): Criteria - { - return self::create(FiltersMother::blank(), OrderMother::none()); - } + public static function empty(): Criteria + { + return self::create(FiltersMother::blank(), OrderMother::none()); + } } diff --git a/tests/Shared/Domain/Criteria/FilterFieldMother.php b/tests/Shared/Domain/Criteria/FilterFieldMother.php index 01f35645e..fdf89a4ae 100644 --- a/tests/Shared/Domain/Criteria/FilterFieldMother.php +++ b/tests/Shared/Domain/Criteria/FilterFieldMother.php @@ -9,8 +9,8 @@ final class FilterFieldMother { - public static function create(?string $fieldName = null): FilterField - { - return new FilterField($fieldName ?? WordMother::create()); - } + public static function create(?string $fieldName = null): FilterField + { + return new FilterField($fieldName ?? WordMother::create()); + } } diff --git a/tests/Shared/Domain/Criteria/FilterMother.php b/tests/Shared/Domain/Criteria/FilterMother.php index 40473422e..ece793fd6 100644 --- a/tests/Shared/Domain/Criteria/FilterMother.php +++ b/tests/Shared/Domain/Criteria/FilterMother.php @@ -12,34 +12,34 @@ final class FilterMother { - public static function create( - ?FilterField $field = null, - ?FilterOperator $operator = null, - ?FilterValue $value = null - ): Filter { - return new Filter( - $field ?? FilterFieldMother::create(), - $operator ?? self::randomOperator(), - $value ?? FilterValueMother::create() - ); - } + public static function create( + ?FilterField $field = null, + ?FilterOperator $operator = null, + ?FilterValue $value = null + ): Filter { + return new Filter( + $field ?? FilterFieldMother::create(), + $operator ?? self::randomOperator(), + $value ?? FilterValueMother::create() + ); + } - /** @param string[] $values */ - public static function fromValues(array $values): Filter - { - return Filter::fromValues($values); - } + /** @param string[] $values */ + public static function fromValues(array $values): Filter + { + return Filter::fromValues($values); + } - private static function randomOperator(): FilterOperator - { - return RandomElementPicker::from( - FilterOperator::EQUAL, - FilterOperator::NOT_EQUAL, - FilterOperator::GT, - FilterOperator::LT, - FilterOperator::CONTAINS, - FilterOperator::NOT_CONTAINS - ); - } + private static function randomOperator(): FilterOperator + { + return RandomElementPicker::from( + FilterOperator::EQUAL, + FilterOperator::NOT_EQUAL, + FilterOperator::GT, + FilterOperator::LT, + FilterOperator::CONTAINS, + FilterOperator::NOT_CONTAINS + ); + } } diff --git a/tests/Shared/Domain/Criteria/FilterValueMother.php b/tests/Shared/Domain/Criteria/FilterValueMother.php index aa78e74a0..77c42c2e1 100644 --- a/tests/Shared/Domain/Criteria/FilterValueMother.php +++ b/tests/Shared/Domain/Criteria/FilterValueMother.php @@ -9,8 +9,8 @@ final class FilterValueMother { - public static function create(?string $value = null): FilterValue - { - return new FilterValue($value ?? WordMother::create()); - } + public static function create(?string $value = null): FilterValue + { + return new FilterValue($value ?? WordMother::create()); + } } diff --git a/tests/Shared/Domain/Criteria/FiltersMother.php b/tests/Shared/Domain/Criteria/FiltersMother.php index fe0009f5f..08678f850 100644 --- a/tests/Shared/Domain/Criteria/FiltersMother.php +++ b/tests/Shared/Domain/Criteria/FiltersMother.php @@ -9,19 +9,19 @@ final class FiltersMother { - /** @param Filter[] $filters */ - public static function create(array $filters): Filters - { - return new Filters($filters); - } + /** @param Filter[] $filters */ + public static function create(array $filters): Filters + { + return new Filters($filters); + } - public static function createOne(Filter $filter): Filters - { - return self::create([$filter]); - } + public static function createOne(Filter $filter): Filters + { + return self::create([$filter]); + } - public static function blank(): Filters - { - return self::create([]); - } + public static function blank(): Filters + { + return self::create([]); + } } diff --git a/tests/Shared/Domain/Criteria/OrderByMother.php b/tests/Shared/Domain/Criteria/OrderByMother.php index 457e35bf6..1a1cf2df3 100644 --- a/tests/Shared/Domain/Criteria/OrderByMother.php +++ b/tests/Shared/Domain/Criteria/OrderByMother.php @@ -9,8 +9,8 @@ final class OrderByMother { - public static function create(?string $fieldName = null): OrderBy - { - return new OrderBy($fieldName ?? WordMother::create()); - } + public static function create(?string $fieldName = null): OrderBy + { + return new OrderBy($fieldName ?? WordMother::create()); + } } diff --git a/tests/Shared/Domain/Criteria/OrderMother.php b/tests/Shared/Domain/Criteria/OrderMother.php index 81c606e07..e574061ea 100644 --- a/tests/Shared/Domain/Criteria/OrderMother.php +++ b/tests/Shared/Domain/Criteria/OrderMother.php @@ -11,18 +11,18 @@ final class OrderMother { - public static function create(?OrderBy $orderBy = null, ?OrderType $orderType = null): Order - { - return new Order($orderBy ?? OrderByMother::create(), $orderType ?? self::randomOrderType()); - } + public static function create(?OrderBy $orderBy = null, ?OrderType $orderType = null): Order + { + return new Order($orderBy ?? OrderByMother::create(), $orderType ?? self::randomOrderType()); + } - public static function none(): Order - { - return Order::none(); - } + public static function none(): Order + { + return Order::none(); + } - private static function randomOrderType(): Order - { - return RandomElementPicker::from(OrderType::ASC, OrderType::DESC, OrderType::NONE); - } + private static function randomOrderType(): Order + { + return RandomElementPicker::from(OrderType::ASC, OrderType::DESC, OrderType::NONE); + } } diff --git a/tests/Shared/Domain/DuplicatorMother.php b/tests/Shared/Domain/DuplicatorMother.php index ab7fa25d9..b22f40efa 100644 --- a/tests/Shared/Domain/DuplicatorMother.php +++ b/tests/Shared/Domain/DuplicatorMother.php @@ -11,21 +11,21 @@ final class DuplicatorMother { - public static function with(mixed $object, array $newParams): mixed - { - $duplicated = clone $object; - $reflection = new ReflectionObject($duplicated); + public static function with(mixed $object, array $newParams): mixed + { + $duplicated = clone $object; + $reflection = new ReflectionObject($duplicated); - each( - static function (ReflectionProperty $property) use ($duplicated, $newParams): void { - if (isset($newParams[$property->getName()])) { - $property->setAccessible(true); - $property->setValue($duplicated, $newParams[$property->getName()]); - } - }, - $reflection->getProperties() - ); + each( + static function (ReflectionProperty $property) use ($duplicated, $newParams): void { + if (isset($newParams[$property->getName()])) { + $property->setAccessible(true); + $property->setValue($duplicated, $newParams[$property->getName()]); + } + }, + $reflection->getProperties() + ); - return $duplicated; - } + return $duplicated; + } } diff --git a/tests/Shared/Domain/IntegerMother.php b/tests/Shared/Domain/IntegerMother.php index b164ea31c..910a08cc8 100644 --- a/tests/Shared/Domain/IntegerMother.php +++ b/tests/Shared/Domain/IntegerMother.php @@ -6,18 +6,18 @@ final class IntegerMother { - public static function create(): int - { - return self::between(1); - } + public static function create(): int + { + return self::between(1); + } - public static function between(int $min, int $max = PHP_INT_MAX): int - { - return MotherCreator::random()->numberBetween($min, $max); - } + public static function between(int $min, int $max = PHP_INT_MAX): int + { + return MotherCreator::random()->numberBetween($min, $max); + } - public static function lessThan(int $max): int - { - return self::between(1, $max); - } + public static function lessThan(int $max): int + { + return self::between(1, $max); + } } diff --git a/tests/Shared/Domain/MotherCreator.php b/tests/Shared/Domain/MotherCreator.php index 30a98bce7..f2da13923 100644 --- a/tests/Shared/Domain/MotherCreator.php +++ b/tests/Shared/Domain/MotherCreator.php @@ -9,10 +9,10 @@ final class MotherCreator { - private static ?Generator $faker = null; + private static ?Generator $faker = null; - public static function random(): Generator - { - return self::$faker ??= Factory::create(); - } + public static function random(): Generator + { + return self::$faker ??= Factory::create(); + } } diff --git a/tests/Shared/Domain/RandomElementPicker.php b/tests/Shared/Domain/RandomElementPicker.php index 2663ac72f..76e8b1eda 100644 --- a/tests/Shared/Domain/RandomElementPicker.php +++ b/tests/Shared/Domain/RandomElementPicker.php @@ -6,8 +6,8 @@ final class RandomElementPicker { - public static function from(mixed ...$elements): mixed - { - return MotherCreator::random()->randomElement($elements); - } + public static function from(mixed ...$elements): mixed + { + return MotherCreator::random()->randomElement($elements); + } } diff --git a/tests/Shared/Domain/Repeater.php b/tests/Shared/Domain/Repeater.php index eef4fdbc2..19781e14f 100644 --- a/tests/Shared/Domain/Repeater.php +++ b/tests/Shared/Domain/Repeater.php @@ -8,13 +8,13 @@ final class Repeater { - public static function repeat(callable $function, int $quantity): array - { - return repeat($function, $quantity); - } + public static function repeat(callable $function, int $quantity): array + { + return repeat($function, $quantity); + } - public static function random(callable $function): array - { - return self::repeat($function, IntegerMother::lessThan(5)); - } + public static function random(callable $function): array + { + return self::repeat($function, IntegerMother::lessThan(5)); + } } diff --git a/tests/Shared/Domain/TestUtils.php b/tests/Shared/Domain/TestUtils.php index 2d560e6fd..141bfea5e 100644 --- a/tests/Shared/Domain/TestUtils.php +++ b/tests/Shared/Domain/TestUtils.php @@ -9,22 +9,22 @@ final class TestUtils { - public static function isSimilar(mixed $expected, mixed $actual): bool - { - $constraint = new CodelyTvConstraintIsSimilar($expected); + public static function isSimilar(mixed $expected, mixed $actual): bool + { + $constraint = new CodelyTvConstraintIsSimilar($expected); - return $constraint->evaluate($actual, '', true); - } + return $constraint->evaluate($actual, '', true); + } - public static function assertSimilar(mixed $expected, mixed $actual): void - { - $constraint = new CodelyTvConstraintIsSimilar($expected); + public static function assertSimilar(mixed $expected, mixed $actual): void + { + $constraint = new CodelyTvConstraintIsSimilar($expected); - $constraint->evaluate($actual); - } + $constraint->evaluate($actual); + } - public static function similarTo(mixed $value, float $delta = 0.0): CodelyTvMatcherIsSimilar - { - return new CodelyTvMatcherIsSimilar($value, $delta); - } + public static function similarTo(mixed $value, float $delta = 0.0): CodelyTvMatcherIsSimilar + { + return new CodelyTvMatcherIsSimilar($value, $delta); + } } diff --git a/tests/Shared/Domain/UuidMother.php b/tests/Shared/Domain/UuidMother.php index 524e2f72e..20bd3516c 100644 --- a/tests/Shared/Domain/UuidMother.php +++ b/tests/Shared/Domain/UuidMother.php @@ -6,8 +6,8 @@ final class UuidMother { - public static function create(): string - { - return MotherCreator::random()->unique()->uuid; - } + public static function create(): string + { + return MotherCreator::random()->unique()->uuid; + } } diff --git a/tests/Shared/Domain/WordMother.php b/tests/Shared/Domain/WordMother.php index 424fe1774..4bf988e35 100644 --- a/tests/Shared/Domain/WordMother.php +++ b/tests/Shared/Domain/WordMother.php @@ -6,8 +6,8 @@ final class WordMother { - public static function create(): string - { - return MotherCreator::random()->word; - } + public static function create(): string + { + return MotherCreator::random()->word; + } } diff --git a/tests/Shared/Infrastructure/ArchitectureTest.php b/tests/Shared/Infrastructure/ArchitectureTest.php index 17d97198b..6a82b2b18 100644 --- a/tests/Shared/Infrastructure/ArchitectureTest.php +++ b/tests/Shared/Infrastructure/ArchitectureTest.php @@ -20,21 +20,21 @@ final class ArchitectureTest { - public static function languageClasses(): array - { - return [ - Selector::classname(Throwable::class), - Selector::classname(InvalidArgumentException::class), - Selector::classname(RuntimeException::class), - Selector::classname(DateTimeImmutable::class), - Selector::classname(DateTimeInterface::class), - Selector::classname(DomainException::class), - Selector::classname(Stringable::class), - Selector::classname(BackedEnum::class), - Selector::classname(Countable::class), - Selector::classname(IteratorAggregate::class), - Selector::classname(Traversable::class), - Selector::classname(ArrayIterator::class), - ]; - } + public static function languageClasses(): array + { + return [ + Selector::classname(Throwable::class), + Selector::classname(InvalidArgumentException::class), + Selector::classname(RuntimeException::class), + Selector::classname(DateTimeImmutable::class), + Selector::classname(DateTimeInterface::class), + Selector::classname(DomainException::class), + Selector::classname(Stringable::class), + Selector::classname(BackedEnum::class), + Selector::classname(Countable::class), + Selector::classname(IteratorAggregate::class), + Selector::classname(Traversable::class), + Selector::classname(ArrayIterator::class), + ]; + } } diff --git a/tests/Shared/Infrastructure/Arranger/EnvironmentArranger.php b/tests/Shared/Infrastructure/Arranger/EnvironmentArranger.php index aeb983a7a..525b38852 100644 --- a/tests/Shared/Infrastructure/Arranger/EnvironmentArranger.php +++ b/tests/Shared/Infrastructure/Arranger/EnvironmentArranger.php @@ -6,7 +6,7 @@ interface EnvironmentArranger { - public function arrange(): void; + public function arrange(): void; - public function close(): void; + public function close(): void; } diff --git a/tests/Shared/Infrastructure/Behat/ApiContext.php b/tests/Shared/Infrastructure/Behat/ApiContext.php index a3bd747eb..eeddfca35 100644 --- a/tests/Shared/Infrastructure/Behat/ApiContext.php +++ b/tests/Shared/Infrastructure/Behat/ApiContext.php @@ -13,96 +13,96 @@ final class ApiContext extends RawMinkContext { - private readonly MinkHelper $sessionHelper; - private readonly MinkSessionRequestHelper $request; - - public function __construct(private readonly Session $minkSession) - { - $this->sessionHelper = new MinkHelper($this->minkSession); - $this->request = new MinkSessionRequestHelper(new MinkHelper($minkSession)); - } - - /** - * @Given I send a :method request to :url - */ - public function iSendARequestTo(string $method, string $url): void - { - $this->request->sendRequest($method, $this->locatePath($url)); - } - - /** - * @Given I send a :method request to :url with body: - */ - public function iSendARequestToWithBody(string $method, string $url, PyStringNode $body): void - { - $this->request->sendRequestWithPyStringNode($method, $this->locatePath($url), $body); - } - - /** - * @Then the response content should be: - */ - public function theResponseContentShouldBe(PyStringNode $expectedResponse): void - { - $expected = $this->sanitizeOutput($expectedResponse->getRaw()); - $actual = $this->sanitizeOutput($this->sessionHelper->getResponse()); - - if ($expected === false || $actual === false) { - throw new RuntimeException('The outputs could not be parsed as JSON'); - } - - if ($expected !== $actual) { - throw new RuntimeException( - sprintf("The outputs does not match!\n\n-- Expected:\n%s\n\n-- Actual:\n%s", $expected, $actual) - ); - } - } - - /** - * @Then the response should be empty - */ - public function theResponseShouldBeEmpty(): void - { - $actual = trim($this->sessionHelper->getResponse()); - - if (!empty($actual)) { - throw new RuntimeException(sprintf("The outputs is not empty, Actual:\n%s", $actual)); - } - } - - /** - * @Then print last api response - */ - public function printApiResponse(): void - { - print_r($this->sessionHelper->getResponse()); - } - - /** - * @Then print response headers - */ - public function printResponseHeaders(): void - { - print_r($this->sessionHelper->getResponseHeaders()); - } - - /** - * @Then the response status code should be :expectedResponseCode - */ - public function theResponseStatusCodeShouldBe(mixed $expectedResponseCode): void - { - if ($this->minkSession->getStatusCode() !== (int) $expectedResponseCode) { - throw new RuntimeException( - sprintf( - 'The status code <%s> does not match the expected <%s>', - $this->minkSession->getStatusCode(), - $expectedResponseCode - ) - ); - } - } - - private function sanitizeOutput(string $output): false|string - { - return json_encode(json_decode(trim($output), true, 512, JSON_THROW_ON_ERROR), JSON_THROW_ON_ERROR); - } + private readonly MinkHelper $sessionHelper; + private readonly MinkSessionRequestHelper $request; + + public function __construct(private readonly Session $minkSession) + { + $this->sessionHelper = new MinkHelper($this->minkSession); + $this->request = new MinkSessionRequestHelper(new MinkHelper($minkSession)); + } + + /** + * @Given I send a :method request to :url + */ + public function iSendARequestTo(string $method, string $url): void + { + $this->request->sendRequest($method, $this->locatePath($url)); + } + + /** + * @Given I send a :method request to :url with body: + */ + public function iSendARequestToWithBody(string $method, string $url, PyStringNode $body): void + { + $this->request->sendRequestWithPyStringNode($method, $this->locatePath($url), $body); + } + + /** + * @Then the response content should be: + */ + public function theResponseContentShouldBe(PyStringNode $expectedResponse): void + { + $expected = $this->sanitizeOutput($expectedResponse->getRaw()); + $actual = $this->sanitizeOutput($this->sessionHelper->getResponse()); + + if ($expected === false || $actual === false) { + throw new RuntimeException('The outputs could not be parsed as JSON'); + } + + if ($expected !== $actual) { + throw new RuntimeException( + sprintf("The outputs does not match!\n\n-- Expected:\n%s\n\n-- Actual:\n%s", $expected, $actual) + ); + } + } + + /** + * @Then the response should be empty + */ + public function theResponseShouldBeEmpty(): void + { + $actual = trim($this->sessionHelper->getResponse()); + + if (!empty($actual)) { + throw new RuntimeException(sprintf("The outputs is not empty, Actual:\n%s", $actual)); + } + } + + /** + * @Then print last api response + */ + public function printApiResponse(): void + { + print_r($this->sessionHelper->getResponse()); + } + + /** + * @Then print response headers + */ + public function printResponseHeaders(): void + { + print_r($this->sessionHelper->getResponseHeaders()); + } + + /** + * @Then the response status code should be :expectedResponseCode + */ + public function theResponseStatusCodeShouldBe(mixed $expectedResponseCode): void + { + if ($this->minkSession->getStatusCode() !== (int) $expectedResponseCode) { + throw new RuntimeException( + sprintf( + 'The status code <%s> does not match the expected <%s>', + $this->minkSession->getStatusCode(), + $expectedResponseCode + ) + ); + } + } + + private function sanitizeOutput(string $output): false|string + { + return json_encode(json_decode(trim($output), true, 512, JSON_THROW_ON_ERROR), JSON_THROW_ON_ERROR); + } } diff --git a/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php b/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php index 157041b44..29d6788a8 100644 --- a/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php +++ b/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php @@ -12,26 +12,26 @@ final readonly class ApplicationFeatureContext implements Context { - public function __construct( - private DatabaseConnections $connections, - private InMemorySymfonyEventBus $bus, - private DomainEventJsonDeserializer $deserializer - ) {} + public function __construct( + private DatabaseConnections $connections, + private InMemorySymfonyEventBus $bus, + private DomainEventJsonDeserializer $deserializer + ) {} - /** @BeforeScenario */ - public function cleanEnvironment(): void - { - $this->connections->clear(); - $this->connections->truncate(); - } + /** @BeforeScenario */ + public function cleanEnvironment(): void + { + $this->connections->clear(); + $this->connections->truncate(); + } - /** - * @Given /^I send an event to the event bus:$/ - */ - public function iSendAnEventToTheEventBus(PyStringNode $event): void - { - $domainEvent = $this->deserializer->deserialize($event->getRaw()); + /** + * @Given /^I send an event to the event bus:$/ + */ + public function iSendAnEventToTheEventBus(PyStringNode $event): void + { + $domainEvent = $this->deserializer->deserialize($event->getRaw()); - $this->bus->publish($domainEvent); - } + $this->bus->publish($domainEvent); + } } diff --git a/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php b/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php index 291e9eb14..27133c192 100644 --- a/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php @@ -13,43 +13,43 @@ final class InMemorySymfonyCommandBusTest extends UnitTestCase { - private InMemorySymfonyCommandBus|null $commandBus; - - protected function setUp(): void - { - parent::setUp(); - - $this->commandBus = new InMemorySymfonyCommandBus([$this->commandHandler()]); - } - - /** @test */ - public function it_should_be_able_to_handle_a_command(): void - { - $this->expectException(RuntimeException::class); - - $this->commandBus->dispatch(new FakeCommand()); - } - - /** @test */ - public function it_should_raise_an_exception_dispatching_a_non_registered_command(): void - { - $this->expectException(CommandNotRegisteredError::class); - - $this->commandBus->dispatch($this->command()); - } - - private function commandHandler(): object - { - return new class() { - public function __invoke(FakeCommand $command): never - { - throw new RuntimeException('This works fine!'); - } - }; - } - - private function command(): Command|MockInterface - { - return $this->mock(Command::class); - } + private InMemorySymfonyCommandBus|null $commandBus; + + protected function setUp(): void + { + parent::setUp(); + + $this->commandBus = new InMemorySymfonyCommandBus([$this->commandHandler()]); + } + + /** @test */ + public function it_should_be_able_to_handle_a_command(): void + { + $this->expectException(RuntimeException::class); + + $this->commandBus->dispatch(new FakeCommand()); + } + + /** @test */ + public function it_should_raise_an_exception_dispatching_a_non_registered_command(): void + { + $this->expectException(CommandNotRegisteredError::class); + + $this->commandBus->dispatch($this->command()); + } + + private function commandHandler(): object + { + return new class() { + public function __invoke(FakeCommand $command): never + { + throw new RuntimeException('This works fine!'); + } + }; + } + + private function command(): Command|MockInterface + { + return $this->mock(Command::class); + } } diff --git a/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php b/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php index 8b3f48364..4ad562ae1 100644 --- a/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php @@ -16,39 +16,36 @@ final class MySqlDoctrineEventBusTest extends InfrastructureTestCase { - private MySqlDoctrineEventBus|null $bus; - private MySqlDoctrineDomainEventsConsumer|null $consumer; - - protected function setUp(): void - { - parent::setUp(); - - $this->bus = new MySqlDoctrineEventBus($this->service(EntityManager::class)); - $this->consumer = new MySqlDoctrineDomainEventsConsumer( - $this->service(EntityManager::class), - $this->service(DomainEventMapping::class) - ); - } - - /** @test */ - public function it_should_publish_and_consume_domain_events_from_msql(): void - { - $domainEvent = CourseCreatedDomainEventMother::create(); - $anotherDomainEvent = CoursesCounterIncrementedDomainEventMother::create(); - - $this->bus->publish($domainEvent, $anotherDomainEvent); - - $this->consumer->consume( - subscribers: fn (DomainEvent ...$expectedEvents) => $this->assertContainsEquals( - $domainEvent, - $expectedEvents - ), - eventsToConsume: 2 - ); - } - - protected function kernelClass(): string - { - return MoocBackendKernel::class; - } + private MySqlDoctrineEventBus|null $bus; + private MySqlDoctrineDomainEventsConsumer|null $consumer; + + protected function setUp(): void + { + parent::setUp(); + + $this->bus = new MySqlDoctrineEventBus($this->service(EntityManager::class)); + $this->consumer = new MySqlDoctrineDomainEventsConsumer( + $this->service(EntityManager::class), + $this->service(DomainEventMapping::class) + ); + } + + /** @test */ + public function it_should_publish_and_consume_domain_events_from_msql(): void + { + $domainEvent = CourseCreatedDomainEventMother::create(); + $anotherDomainEvent = CoursesCounterIncrementedDomainEventMother::create(); + + $this->bus->publish($domainEvent, $anotherDomainEvent); + + $this->consumer->consume( + subscribers: fn (DomainEvent ...$expectedEvents) => $this->assertContainsEquals($domainEvent, $expectedEvents), + eventsToConsume: 2 + ); + } + + protected function kernelClass(): string + { + return MoocBackendKernel::class; + } } diff --git a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php index e57638dbc..b3d5b09e8 100644 --- a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php @@ -21,164 +21,161 @@ final class RabbitMqEventBusTest extends InfrastructureTestCase { - private mixed $connection; - private string $exchangeName; - private RabbitMqConfigurer $configurer; - private RabbitMqEventBus $publisher; - private RabbitMqDomainEventsConsumer $consumer; - private TestAllWorksOnRabbitMqEventsPublished $fakeSubscriber; - private bool $consumerHasBeenExecuted; + private mixed $connection; + private string $exchangeName; + private RabbitMqConfigurer $configurer; + private RabbitMqEventBus $publisher; + private RabbitMqDomainEventsConsumer $consumer; + private TestAllWorksOnRabbitMqEventsPublished $fakeSubscriber; + private bool $consumerHasBeenExecuted; - protected function setUp(): void - { - parent::setUp(); + protected function setUp(): void + { + parent::setUp(); - $this->connection = $this->service(RabbitMqConnection::class); + $this->connection = $this->service(RabbitMqConnection::class); - $this->exchangeName = 'test_domain_events'; - $this->configurer = new RabbitMqConfigurer($this->connection); - $this->publisher = new RabbitMqEventBus( - $this->connection, - $this->exchangeName, - $this->service(MySqlDoctrineEventBus::class) - ); - $this->consumer = new RabbitMqDomainEventsConsumer( - $this->connection, - $this->service(DomainEventJsonDeserializer::class), - $this->exchangeName, - $maxRetries = 1 - ); - $this->fakeSubscriber = new TestAllWorksOnRabbitMqEventsPublished(); - $this->consumerHasBeenExecuted = false; + $this->exchangeName = 'test_domain_events'; + $this->configurer = new RabbitMqConfigurer($this->connection); + $this->publisher = new RabbitMqEventBus( + $this->connection, + $this->exchangeName, + $this->service(MySqlDoctrineEventBus::class) + ); + $this->consumer = new RabbitMqDomainEventsConsumer( + $this->connection, + $this->service(DomainEventJsonDeserializer::class), + $this->exchangeName, + $maxRetries = 1 + ); + $this->fakeSubscriber = new TestAllWorksOnRabbitMqEventsPublished(); + $this->consumerHasBeenExecuted = false; - $this->cleanEnvironment($this->connection); - } + $this->cleanEnvironment($this->connection); + } - /** @test */ - public function it_should_publish_and_consume_domain_events_from_rabbitmq(): void - { - $domainEvent = CourseCreatedDomainEventMother::create(); + /** @test */ + public function it_should_publish_and_consume_domain_events_from_rabbitmq(): void + { + $domainEvent = CourseCreatedDomainEventMother::create(); - $this->configurer->configure($this->exchangeName, $this->fakeSubscriber); - - $this->publisher->publish($domainEvent); + $this->configurer->configure($this->exchangeName, $this->fakeSubscriber); - $this->consumer->consume( - $this->assertConsumer($domainEvent), - RabbitMqQueueNameFormatter::format($this->fakeSubscriber) - ); - - $this->assertTrue($this->consumerHasBeenExecuted); - } - - /** @test */ - public function it_should_throw_an_exception_consuming_non_existing_domain_events(): void - { - $this->expectException(RuntimeException::class); - - $domainEvent = CoursesCounterIncrementedDomainEventMother::create(); - - $this->configurer->configure($this->exchangeName, $this->fakeSubscriber); - - $this->publisher->publish($domainEvent); - - $this->consumer->consume( - $this->assertConsumer($domainEvent), - RabbitMqQueueNameFormatter::format($this->fakeSubscriber) - ); - - $this->assertTrue($this->consumerHasBeenExecuted); - } - - /** @test */ - public function it_should_retry_failed_domain_events(): void - { - $domainEvent = CourseCreatedDomainEventMother::create(); - - $this->configurer->configure($this->exchangeName, $this->fakeSubscriber); - - $this->publisher->publish($domainEvent); - - $this->simulateErrorConsuming(); - - sleep(1); - - $this->consumer->consume( - $this->assertConsumer($domainEvent), - RabbitMqQueueNameFormatter::format($this->fakeSubscriber) - ); - - $this->assertTrue($this->consumerHasBeenExecuted); - } - - /** @test */ - public function it_should_send_events_to_dead_letter_after_retry_failed_domain_events(): void - { - $domainEvent = CourseCreatedDomainEventMother::create(); - - $this->configurer->configure($this->exchangeName, $this->fakeSubscriber); - - $this->publisher->publish($domainEvent); - - $this->simulateErrorConsuming(); - - sleep(1); - - $this->simulateErrorConsuming(); - - $this->assertDeadLetterContainsEvent(1); - } + $this->publisher->publish($domainEvent); - protected function kernelClass(): string - { - return MoocBackendKernel::class; - } - - private function assertConsumer(DomainEvent ...$expectedDomainEvents): callable - { - return function (DomainEvent $domainEvent) use ($expectedDomainEvents): void { - $this->assertContainsEquals($domainEvent, $expectedDomainEvents); + $this->consumer->consume( + $this->assertConsumer($domainEvent), + RabbitMqQueueNameFormatter::format($this->fakeSubscriber) + ); - $this->consumerHasBeenExecuted = true; - }; - } + $this->assertTrue($this->consumerHasBeenExecuted); + } - private function failingConsumer(): callable - { - return static function (DomainEvent $domainEvent): never { - throw new RuntimeException('To test'); - }; - } + /** @test */ + public function it_should_throw_an_exception_consuming_non_existing_domain_events(): void + { + $this->expectException(RuntimeException::class); - private function simulateErrorConsuming(): void - { - try { - $this->consumer->consume( - $this->failingConsumer(), - RabbitMqQueueNameFormatter::format($this->fakeSubscriber) - ); - } catch (Throwable $error) { - $this->assertInstanceOf(RuntimeException::class, $error); - } - } + $domainEvent = CoursesCounterIncrementedDomainEventMother::create(); + + $this->configurer->configure($this->exchangeName, $this->fakeSubscriber); + + $this->publisher->publish($domainEvent); + + $this->consumer->consume( + $this->assertConsumer($domainEvent), + RabbitMqQueueNameFormatter::format($this->fakeSubscriber) + ); + + $this->assertTrue($this->consumerHasBeenExecuted); + } + + /** @test */ + public function it_should_retry_failed_domain_events(): void + { + $domainEvent = CourseCreatedDomainEventMother::create(); + + $this->configurer->configure($this->exchangeName, $this->fakeSubscriber); + + $this->publisher->publish($domainEvent); + + $this->simulateErrorConsuming(); + + sleep(1); + + $this->consumer->consume( + $this->assertConsumer($domainEvent), + RabbitMqQueueNameFormatter::format($this->fakeSubscriber) + ); + + $this->assertTrue($this->consumerHasBeenExecuted); + } + + /** @test */ + public function it_should_send_events_to_dead_letter_after_retry_failed_domain_events(): void + { + $domainEvent = CourseCreatedDomainEventMother::create(); + + $this->configurer->configure($this->exchangeName, $this->fakeSubscriber); + + $this->publisher->publish($domainEvent); + + $this->simulateErrorConsuming(); + + sleep(1); - private function cleanEnvironment(RabbitMqConnection $connection): void - { - $connection->queue(RabbitMqQueueNameFormatter::format($this->fakeSubscriber))->delete(); - $connection->queue(RabbitMqQueueNameFormatter::formatRetry($this->fakeSubscriber))->delete(); - $connection->queue(RabbitMqQueueNameFormatter::formatDeadLetter($this->fakeSubscriber))->delete(); - } + $this->simulateErrorConsuming(); - private function assertDeadLetterContainsEvent(int $expectedNumberOfEvents): void - { - $totalEventsInDeadLetter = 0; + $this->assertDeadLetterContainsEvent(1); + } - while ($this->connection->queue(RabbitMqQueueNameFormatter::formatDeadLetter($this->fakeSubscriber))->get( - AMQP_AUTOACK - )) { - $totalEventsInDeadLetter++; - } + protected function kernelClass(): string + { + return MoocBackendKernel::class; + } - $this->assertSame($expectedNumberOfEvents, $totalEventsInDeadLetter); - } + private function assertConsumer(DomainEvent ...$expectedDomainEvents): callable + { + return function (DomainEvent $domainEvent) use ($expectedDomainEvents): void { + $this->assertContainsEquals($domainEvent, $expectedDomainEvents); + + $this->consumerHasBeenExecuted = true; + }; + } + + private function failingConsumer(): callable + { + return static function (DomainEvent $domainEvent): never { + throw new RuntimeException('To test'); + }; + } + + private function simulateErrorConsuming(): void + { + try { + $this->consumer->consume($this->failingConsumer(), RabbitMqQueueNameFormatter::format($this->fakeSubscriber)); + } catch (Throwable $error) { + $this->assertInstanceOf(RuntimeException::class, $error); + } + } + + private function cleanEnvironment(RabbitMqConnection $connection): void + { + $connection->queue(RabbitMqQueueNameFormatter::format($this->fakeSubscriber))->delete(); + $connection->queue(RabbitMqQueueNameFormatter::formatRetry($this->fakeSubscriber))->delete(); + $connection->queue(RabbitMqQueueNameFormatter::formatDeadLetter($this->fakeSubscriber))->delete(); + } + + private function assertDeadLetterContainsEvent(int $expectedNumberOfEvents): void + { + $totalEventsInDeadLetter = 0; + + while ($this->connection->queue(RabbitMqQueueNameFormatter::formatDeadLetter($this->fakeSubscriber))->get( + AMQP_AUTOACK + )) { + $totalEventsInDeadLetter++; + } + + $this->assertSame($expectedNumberOfEvents, $totalEventsInDeadLetter); + } } diff --git a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php index 70a8623e4..61debc9ee 100644 --- a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php +++ b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php @@ -10,10 +10,10 @@ final class TestAllWorksOnRabbitMqEventsPublished implements DomainEventSubscriber { - public static function subscribedTo(): array - { - return [CourseCreatedDomainEvent::class, CoursesCounterIncrementedDomainEvent::class, ]; - } + public static function subscribedTo(): array + { + return [CourseCreatedDomainEvent::class, CoursesCounterIncrementedDomainEvent::class, ]; + } - public function __invoke(CourseCreatedDomainEvent|CoursesCounterIncrementedDomainEvent $event): void {} + public function __invoke(CourseCreatedDomainEvent|CoursesCounterIncrementedDomainEvent $event): void {} } diff --git a/tests/Shared/Infrastructure/Bus/Query/FakeResponse.php b/tests/Shared/Infrastructure/Bus/Query/FakeResponse.php index 323c50493..41386dca5 100644 --- a/tests/Shared/Infrastructure/Bus/Query/FakeResponse.php +++ b/tests/Shared/Infrastructure/Bus/Query/FakeResponse.php @@ -8,10 +8,10 @@ final readonly class FakeResponse implements Response { - public function __construct(private int $number) {} + public function __construct(private int $number) {} - public function number(): int - { - return $this->number; - } + public function number(): int + { + return $this->number; + } } diff --git a/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php b/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php index 3dbb86fe8..5037795cb 100644 --- a/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php @@ -13,43 +13,43 @@ final class InMemorySymfonyQueryBusTest extends UnitTestCase { - private InMemorySymfonyQueryBus|null $queryBus; - - protected function setUp(): void - { - parent::setUp(); - - $this->queryBus = new InMemorySymfonyQueryBus([$this->queryHandler()]); - } - - /** @test */ - public function it_should_return_a_response_successfully(): void - { - $this->expectException(RuntimeException::class); - - $this->queryBus->ask(new FakeQuery()); - } - - /** @test */ - public function it_should_raise_an_exception_dispatching_a_non_registered_query(): void - { - $this->expectException(QueryNotRegisteredError::class); - - $this->queryBus->ask($this->query()); - } - - private function queryHandler(): object - { - return new class() { - public function __invoke(FakeQuery $query): never - { - throw new RuntimeException('This works fine!'); - } - }; - } - - private function query(): MockInterface|Query - { - return $this->mock(Query::class); - } + private InMemorySymfonyQueryBus|null $queryBus; + + protected function setUp(): void + { + parent::setUp(); + + $this->queryBus = new InMemorySymfonyQueryBus([$this->queryHandler()]); + } + + /** @test */ + public function it_should_return_a_response_successfully(): void + { + $this->expectException(RuntimeException::class); + + $this->queryBus->ask(new FakeQuery()); + } + + /** @test */ + public function it_should_raise_an_exception_dispatching_a_non_registered_query(): void + { + $this->expectException(QueryNotRegisteredError::class); + + $this->queryBus->ask($this->query()); + } + + private function queryHandler(): object + { + return new class() { + public function __invoke(FakeQuery $query): never + { + throw new RuntimeException('This works fine!'); + } + }; + } + + private function query(): MockInterface|Query + { + return $this->mock(Query::class); + } } diff --git a/tests/Shared/Infrastructure/ConstantRandomNumberGenerator.php b/tests/Shared/Infrastructure/ConstantRandomNumberGenerator.php index 2a5ef9eb7..810e216cc 100644 --- a/tests/Shared/Infrastructure/ConstantRandomNumberGenerator.php +++ b/tests/Shared/Infrastructure/ConstantRandomNumberGenerator.php @@ -8,8 +8,8 @@ final class ConstantRandomNumberGenerator implements RandomNumberGenerator { - public function generate(): int - { - return 1; - } + public function generate(): int + { + return 1; + } } diff --git a/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php b/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php index c58c5ce57..3c7cf7afc 100644 --- a/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php +++ b/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php @@ -12,30 +12,30 @@ final class MySqlDatabaseCleaner { - public function __invoke(EntityManagerInterface $entityManager): void - { - $connection = $entityManager->getConnection(); + public function __invoke(EntityManagerInterface $entityManager): void + { + $connection = $entityManager->getConnection(); - $tables = $this->tables($connection); - $truncateTablesSql = $this->truncateDatabaseSql($tables); + $tables = $this->tables($connection); + $truncateTablesSql = $this->truncateDatabaseSql($tables); - $connection->executeQuery($truncateTablesSql); - } + $connection->executeQuery($truncateTablesSql); + } - private function truncateDatabaseSql(array $tables): string - { - $truncateTables = map($this->truncateTableSql(), $tables); + private function truncateDatabaseSql(array $tables): string + { + $truncateTables = map($this->truncateTableSql(), $tables); - return sprintf('SET FOREIGN_KEY_CHECKS = 0; %s SET FOREIGN_KEY_CHECKS = 1;', implode(' ', $truncateTables)); - } + return sprintf('SET FOREIGN_KEY_CHECKS = 0; %s SET FOREIGN_KEY_CHECKS = 1;', implode(' ', $truncateTables)); + } - private function truncateTableSql(): callable - { - return fn (array $table): string => sprintf('TRUNCATE TABLE `%s`;', (string) first($table)); - } + private function truncateTableSql(): callable + { + return fn (array $table): string => sprintf('TRUNCATE TABLE `%s`;', (string) first($table)); + } - private function tables(Connection $connection): array - { - return $connection->executeQuery('SHOW TABLES')->fetchAllAssociative(); - } + private function tables(Connection $connection): array + { + return $connection->executeQuery('SHOW TABLES')->fetchAllAssociative(); + } } diff --git a/tests/Shared/Infrastructure/Elastic/ElasticDatabaseCleaner.php b/tests/Shared/Infrastructure/Elastic/ElasticDatabaseCleaner.php index 4dc86b3c3..293d5284a 100644 --- a/tests/Shared/Infrastructure/Elastic/ElasticDatabaseCleaner.php +++ b/tests/Shared/Infrastructure/Elastic/ElasticDatabaseCleaner.php @@ -10,18 +10,18 @@ final class ElasticDatabaseCleaner { - public function __invoke(ElasticsearchClient $client): void - { - $indices = $client->client()->cat()->indices(); + public function __invoke(ElasticsearchClient $client): void + { + $indices = $client->client()->cat()->indices(); - each( - static function (array $index) use ($client): void { - $indexName = $index['index']; + each( + static function (array $index) use ($client): void { + $indexName = $index['index']; - $client->client()->indices()->delete(['index' => $indexName]); - $client->client()->indices()->create(['index' => $indexName]); - }, - $indices - ); - } + $client->client()->indices()->delete(['index' => $indexName]); + $client->client()->indices()->create(['index' => $indexName]); + }, + $indices + ); + } } diff --git a/tests/Shared/Infrastructure/Mink/MinkHelper.php b/tests/Shared/Infrastructure/Mink/MinkHelper.php index 976ccc0d5..1d9da8a1c 100644 --- a/tests/Shared/Infrastructure/Mink/MinkHelper.php +++ b/tests/Shared/Infrastructure/Mink/MinkHelper.php @@ -11,80 +11,78 @@ final readonly class MinkHelper { - public function __construct(private Session $session) {} - - public function sendRequest(string $method, string $url, array $optionalParams = []): Crawler - { - $defaultOptionalParams = [ - 'parameters' => [], - 'files' => [], - 'server' => ['HTTP_ACCEPT' => 'application/json', 'CONTENT_TYPE' => 'application/json'], - 'content' => null, - 'changeHistory' => true, - ]; - - $optionalParams = array_merge($defaultOptionalParams, $optionalParams); - - $crawler = $this->getClient()->request( - $method, - $url, - $optionalParams['parameters'], - $optionalParams['files'], - $optionalParams['server'], - $optionalParams['content'], - $optionalParams['changeHistory'] - ); - - $this->resetRequestStuff(); - - return $crawler; - } - - public function getResponse(): string - { - return $this->getSession()->getPage()->getContent(); - } - - public function getResponseHeaders(): array - { - return $this->normalizeHeaders( - array_change_key_case($this->getSession()->getResponseHeaders(), CASE_LOWER) - ); - } - - public function resetServerParameters(): void - { - $this->getClient()->setServerParameters([]); - } - - public function getRequest(): object - { - return $this->getClient()->getRequest(); - } - - private function getSession(): Session - { - return $this->session; - } - - private function getDriver(): DriverInterface - { - return $this->getSession()->getDriver(); - } - - private function getClient(): AbstractBrowser - { - return $this->getDriver()->getClient(); - } - - private function normalizeHeaders(array $headers): array - { - return array_map('implode', array_filter($headers)); - } - - private function resetRequestStuff(): void - { - $this->getSession()->reset(); - $this->resetServerParameters(); - } + public function __construct(private Session $session) {} + + public function sendRequest(string $method, string $url, array $optionalParams = []): Crawler + { + $defaultOptionalParams = [ + 'parameters' => [], + 'files' => [], + 'server' => ['HTTP_ACCEPT' => 'application/json', 'CONTENT_TYPE' => 'application/json'], + 'content' => null, + 'changeHistory' => true, + ]; + + $optionalParams = array_merge($defaultOptionalParams, $optionalParams); + + $crawler = $this->getClient()->request( + $method, + $url, + $optionalParams['parameters'], + $optionalParams['files'], + $optionalParams['server'], + $optionalParams['content'], + $optionalParams['changeHistory'] + ); + + $this->resetRequestStuff(); + + return $crawler; + } + + public function getResponse(): string + { + return $this->getSession()->getPage()->getContent(); + } + + public function getResponseHeaders(): array + { + return $this->normalizeHeaders(array_change_key_case($this->getSession()->getResponseHeaders(), CASE_LOWER)); + } + + public function resetServerParameters(): void + { + $this->getClient()->setServerParameters([]); + } + + public function getRequest(): object + { + return $this->getClient()->getRequest(); + } + + private function getSession(): Session + { + return $this->session; + } + + private function getDriver(): DriverInterface + { + return $this->getSession()->getDriver(); + } + + private function getClient(): AbstractBrowser + { + return $this->getDriver()->getClient(); + } + + private function normalizeHeaders(array $headers): array + { + return array_map('implode', array_filter($headers)); + } + + private function resetRequestStuff(): void + { + $this->getSession()->reset(); + $this->resetServerParameters(); + } } diff --git a/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php b/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php index c5909ef43..df914dd98 100644 --- a/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php +++ b/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php @@ -9,20 +9,20 @@ final readonly class MinkSessionRequestHelper { - public function __construct(private MinkHelper $sessionHelper) {} + public function __construct(private MinkHelper $sessionHelper) {} - public function sendRequest($method, $url, array $optionalParams = []): void - { - $this->request($method, $url, $optionalParams); - } + public function sendRequest($method, $url, array $optionalParams = []): void + { + $this->request($method, $url, $optionalParams); + } - public function sendRequestWithPyStringNode($method, $url, PyStringNode $body): void - { - $this->request($method, $url, ['content' => $body->getRaw()]); - } + public function sendRequestWithPyStringNode($method, $url, PyStringNode $body): void + { + $this->request($method, $url, ['content' => $body->getRaw()]); + } - public function request(string $method, string $url, array $optionalParams = []): Crawler - { - return $this->sessionHelper->sendRequest($method, $url, $optionalParams); - } + public function request(string $method, string $url, array $optionalParams = []): Crawler + { + return $this->sessionHelper->sendRequest($method, $url, $optionalParams); + } } diff --git a/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php b/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php index 00271c0a6..430373dc4 100644 --- a/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php +++ b/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php @@ -10,22 +10,22 @@ final class CodelyTvMatcherIsSimilar extends MatcherAbstract implements Stringable { - private readonly CodelyTvConstraintIsSimilar $constraint; + private readonly CodelyTvConstraintIsSimilar $constraint; - public function __construct(mixed $value, float $delta = 0.0) - { - parent::__construct($value); + public function __construct(mixed $value, float $delta = 0.0) + { + parent::__construct($value); - $this->constraint = new CodelyTvConstraintIsSimilar($value, $delta); - } + $this->constraint = new CodelyTvConstraintIsSimilar($value, $delta); + } - public function match(&$actual): bool - { - return $this->constraint->evaluate($actual, '', true); - } + public function match(&$actual): bool + { + return $this->constraint->evaluate($actual, '', true); + } - public function __toString(): string - { - return 'Is similar'; - } + public function __toString(): string + { + return 'Is similar'; + } } diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php index 25d4017d6..22ee1fccf 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php @@ -15,35 +15,35 @@ final class AggregateRootArraySimilarComparator extends Comparator { - public function accepts($expected, $actual): bool - { - return is_array($expected) - && is_array($actual) - && (all(instance_of(AggregateRoot::class), $expected) - && all(instance_of(AggregateRoot::class), $actual)); - } - - public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false): void - { - if (!$this->contains($expected, $actual) || count($expected) !== count($actual)) { - throw new ComparisonFailure( - $expected, - $actual, - $this->exporter->export($expected), - $this->exporter->export($actual), - false, - 'Failed asserting the collection of AGs contains all the expected elements.' - ); - } - } - - private function contains(array $expectedArray, array $actualArray): bool - { - $exists = fn (AggregateRoot $expected): bool => any( - fn (AggregateRoot $actual): bool => TestUtils::isSimilar($expected, $actual), - $actualArray - ); - - return all($exists, $expectedArray); - } + public function accepts($expected, $actual): bool + { + return is_array($expected) + && is_array($actual) + && (all(instance_of(AggregateRoot::class), $expected) + && all(instance_of(AggregateRoot::class), $actual)); + } + + public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false): void + { + if (!$this->contains($expected, $actual) || count($expected) !== count($actual)) { + throw new ComparisonFailure( + $expected, + $actual, + $this->exporter->export($expected), + $this->exporter->export($actual), + false, + 'Failed asserting the collection of AGs contains all the expected elements.' + ); + } + } + + private function contains(array $expectedArray, array $actualArray): bool + { + $exists = fn (AggregateRoot $expected): bool => any( + fn (AggregateRoot $actual): bool => TestUtils::isSimilar($expected, $actual), + $actualArray + ); + + return all($exists, $expectedArray); + } } diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php index b475419ea..aefd86a36 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php @@ -12,63 +12,63 @@ final class AggregateRootSimilarComparator extends Comparator { - public function accepts($expected, $actual): bool - { - $aggregateRootClass = AggregateRoot::class; - - return $expected instanceof $aggregateRootClass && $actual instanceof $aggregateRootClass; - } - - public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false): void - { - $actualEntity = clone $actual; - $actualEntity->pullDomainEvents(); - - if (!$this->aggregateRootsAreSimilar($expected, $actualEntity)) { - throw new ComparisonFailure( - $expected, - $actual, - $this->exporter->export($expected), - $this->exporter->export($actual), - false, - 'Failed asserting the aggregate roots are equal.' - ); - } - } - - private function aggregateRootsAreSimilar(AggregateRoot $expected, AggregateRoot $actual): bool - { - if (!$this->aggregateRootsAreTheSameClass($expected, $actual)) { - return false; - } - - return $this->aggregateRootPropertiesAreSimilar($expected, $actual); - } - - private function aggregateRootsAreTheSameClass(AggregateRoot $expected, AggregateRoot $actual): bool - { - return $expected::class === $actual::class; - } - - private function aggregateRootPropertiesAreSimilar(AggregateRoot $expected, AggregateRoot $actual): bool - { - $expectedReflected = new ReflectionObject($expected); - $actualReflected = new ReflectionObject($actual); - - foreach ($expectedReflected->getProperties() as $expectedReflectedProperty) { - $actualReflectedProperty = $actualReflected->getProperty($expectedReflectedProperty->getName()); - - $expectedReflectedProperty->setAccessible(true); - $actualReflectedProperty->setAccessible(true); - - $expectedProperty = $expectedReflectedProperty->getValue($expected); - $actualProperty = $actualReflectedProperty->getValue($actual); - - if (!TestUtils::isSimilar($expectedProperty, $actualProperty)) { - return false; - } - } - - return true; - } + public function accepts($expected, $actual): bool + { + $aggregateRootClass = AggregateRoot::class; + + return $expected instanceof $aggregateRootClass && $actual instanceof $aggregateRootClass; + } + + public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false): void + { + $actualEntity = clone $actual; + $actualEntity->pullDomainEvents(); + + if (!$this->aggregateRootsAreSimilar($expected, $actualEntity)) { + throw new ComparisonFailure( + $expected, + $actual, + $this->exporter->export($expected), + $this->exporter->export($actual), + false, + 'Failed asserting the aggregate roots are equal.' + ); + } + } + + private function aggregateRootsAreSimilar(AggregateRoot $expected, AggregateRoot $actual): bool + { + if (!$this->aggregateRootsAreTheSameClass($expected, $actual)) { + return false; + } + + return $this->aggregateRootPropertiesAreSimilar($expected, $actual); + } + + private function aggregateRootsAreTheSameClass(AggregateRoot $expected, AggregateRoot $actual): bool + { + return $expected::class === $actual::class; + } + + private function aggregateRootPropertiesAreSimilar(AggregateRoot $expected, AggregateRoot $actual): bool + { + $expectedReflected = new ReflectionObject($expected); + $actualReflected = new ReflectionObject($actual); + + foreach ($expectedReflected->getProperties() as $expectedReflectedProperty) { + $actualReflectedProperty = $actualReflected->getProperty($expectedReflectedProperty->getName()); + + $expectedReflectedProperty->setAccessible(true); + $actualReflectedProperty->setAccessible(true); + + $expectedProperty = $expectedReflectedProperty->getValue($expected); + $actualProperty = $actualReflectedProperty->getValue($actual); + + if (!TestUtils::isSimilar($expectedProperty, $actualProperty)) { + return false; + } + } + + return true; + } } diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeSimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeSimilarComparator.php index ad064d3e1..67d3b5605 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeSimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeSimilarComparator.php @@ -12,39 +12,39 @@ final class DateTimeSimilarComparator extends ObjectComparator { - public function accepts($expected, $actual): bool - { - return $expected instanceof DateTimeInterface && $actual instanceof DateTimeInterface; - } - - public function assertEquals( - $expected, - $actual, - $delta = 0.0, - $canonicalize = false, - $ignoreCase = false, - array &$processed = [] - ): void { - $normalizedDelta = $delta === 0.0 ? 10 : $delta; - $intervalWithDelta = new DateInterval(sprintf('PT%sS', abs($normalizedDelta))); - - $expectedLower = clone $expected; - $expectedUpper = clone $expected; - - if ($actual < $expectedLower->sub($intervalWithDelta) || $actual > $expectedUpper->add($intervalWithDelta)) { - throw new ComparisonFailure( - $expected, - $actual, - $this->dateTimeToString($expected), - $this->dateTimeToString($actual), - false, - 'Failed asserting that two DateTime objects are equal.' - ); - } - } - - protected function dateTimeToString(DateTimeInterface $datetime): string - { - return $datetime->format(DateTime::ATOM) ?: 'Invalid DateTime object'; - } + public function accepts($expected, $actual): bool + { + return $expected instanceof DateTimeInterface && $actual instanceof DateTimeInterface; + } + + public function assertEquals( + $expected, + $actual, + $delta = 0.0, + $canonicalize = false, + $ignoreCase = false, + array &$processed = [] + ): void { + $normalizedDelta = $delta === 0.0 ? 10 : $delta; + $intervalWithDelta = new DateInterval(sprintf('PT%sS', abs($normalizedDelta))); + + $expectedLower = clone $expected; + $expectedUpper = clone $expected; + + if ($actual < $expectedLower->sub($intervalWithDelta) || $actual > $expectedUpper->add($intervalWithDelta)) { + throw new ComparisonFailure( + $expected, + $actual, + $this->dateTimeToString($expected), + $this->dateTimeToString($actual), + false, + 'Failed asserting that two DateTime objects are equal.' + ); + } + } + + protected function dateTimeToString(DateTimeInterface $datetime): string + { + return $datetime->format(DateTime::ATOM) ?: 'Invalid DateTime object'; + } } diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php index e3cc9d557..546c75cb9 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php @@ -14,58 +14,58 @@ final class DateTimeStringSimilarComparator extends ObjectComparator { - public function accepts($expected, $actual): bool - { - return is_string($expected) - && is_string($actual) - && $this->isValidDateTimeString($expected) - && $this->isValidDateTimeString($actual); - } + public function accepts($expected, $actual): bool + { + return is_string($expected) + && is_string($actual) + && $this->isValidDateTimeString($expected) + && $this->isValidDateTimeString($actual); + } - public function assertEquals( - $expected, - $actual, - $delta = 0.0, - $canonicalize = false, - $ignoreCase = false, - array &$processed = [] - ): void { - $expectedDate = new DateTimeImmutable($expected); - $actualDate = new DateTimeImmutable($actual); + public function assertEquals( + $expected, + $actual, + $delta = 0.0, + $canonicalize = false, + $ignoreCase = false, + array &$processed = [] + ): void { + $expectedDate = new DateTimeImmutable($expected); + $actualDate = new DateTimeImmutable($actual); - $normalizedDelta = $delta === 0.0 ? 10 : $delta; - $intervalWithDelta = new DateInterval(sprintf('PT%sS', abs($normalizedDelta))); + $normalizedDelta = $delta === 0.0 ? 10 : $delta; + $intervalWithDelta = new DateInterval(sprintf('PT%sS', abs($normalizedDelta))); - if ($actualDate < $expectedDate->sub($intervalWithDelta) - || $actualDate > $expectedDate->add($intervalWithDelta)) { - throw new ComparisonFailure( - $expectedDate, - $actualDate, - $this->dateTimeToString($expectedDate), - $this->dateTimeToString($actualDate), - false, - 'Failed asserting that two DateTime strings are equal.' - ); - } - } + if ($actualDate < $expectedDate->sub($intervalWithDelta) + || $actualDate > $expectedDate->add($intervalWithDelta)) { + throw new ComparisonFailure( + $expectedDate, + $actualDate, + $this->dateTimeToString($expectedDate), + $this->dateTimeToString($actualDate), + false, + 'Failed asserting that two DateTime strings are equal.' + ); + } + } - protected function dateTimeToString(DateTimeInterface $datetime): string - { - $string = $datetime->format(DateTime::ATOM); + protected function dateTimeToString(DateTimeInterface $datetime): string + { + $string = $datetime->format(DateTime::ATOM); - return $string ?: 'Invalid DateTime object'; - } + return $string ?: 'Invalid DateTime object'; + } - private function isValidDateTimeString(string $expected): bool - { - $isValid = true; + private function isValidDateTimeString(string $expected): bool + { + $isValid = true; - try { - new DateTimeImmutable($expected); - } catch (Throwable) { - $isValid = false; - } + try { + new DateTimeImmutable($expected); + } catch (Throwable) { + $isValid = false; + } - return $isValid; - } + return $isValid; + } } diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php index db43dfd09..c191f7fb0 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php @@ -15,35 +15,35 @@ final class DomainEventArraySimilarComparator extends Comparator { - public function accepts($expected, $actual): bool - { - return is_array($expected) - && is_array($actual) - && (all(instance_of(DomainEvent::class), $expected) - && all(instance_of(DomainEvent::class), $actual)); - } - - public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false): void - { - if (!$this->contains($expected, $actual) || count($expected) !== count($actual)) { - throw new ComparisonFailure( - $expected, - $actual, - $this->exporter->export($expected), - $this->exporter->export($actual), - false, - 'Failed asserting the collection of Events contains all the expected elements.' - ); - } - } - - private function contains(array $expectedArray, array $actualArray): bool - { - $exists = static fn (DomainEvent $expected): bool => any( - static fn (DomainEvent $actual): bool => TestUtils::isSimilar($expected, $actual), - $actualArray - ); - - return all($exists, $expectedArray); - } + public function accepts($expected, $actual): bool + { + return is_array($expected) + && is_array($actual) + && (all(instance_of(DomainEvent::class), $expected) + && all(instance_of(DomainEvent::class), $actual)); + } + + public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false): void + { + if (!$this->contains($expected, $actual) || count($expected) !== count($actual)) { + throw new ComparisonFailure( + $expected, + $actual, + $this->exporter->export($expected), + $this->exporter->export($actual), + false, + 'Failed asserting the collection of Events contains all the expected elements.' + ); + } + } + + private function contains(array $expectedArray, array $actualArray): bool + { + $exists = static fn (DomainEvent $expected): bool => any( + static fn (DomainEvent $actual): bool => TestUtils::isSimilar($expected, $actual), + $actualArray + ); + + return all($exists, $expectedArray); + } } diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php index 34f061ebf..f14cb6a77 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php @@ -12,64 +12,64 @@ final class DomainEventSimilarComparator extends Comparator { - private static array $ignoredAttributes = ['eventId', 'occurredOn']; - - public function accepts($expected, $actual): bool - { - $domainEventRootClass = DomainEvent::class; - - return $expected instanceof $domainEventRootClass && $actual instanceof $domainEventRootClass; - } - - public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false): void - { - if (!$this->areSimilar($expected, $actual)) { - throw new ComparisonFailure( - $expected, - $actual, - $this->exporter->export($expected), - $this->exporter->export($actual), - false, - 'Failed asserting the events are equal.' - ); - } - } - - private function areSimilar(DomainEvent $expected, DomainEvent $actual): bool - { - if (!$this->areTheSameClass($expected, $actual)) { - return false; - } - - return $this->propertiesAreSimilar($expected, $actual); - } - - private function areTheSameClass(DomainEvent $expected, DomainEvent $actual): bool - { - return $expected::class === $actual::class; - } - - private function propertiesAreSimilar(DomainEvent $expected, DomainEvent $actual): bool - { - $expectedReflected = new ReflectionObject($expected); - $actualReflected = new ReflectionObject($actual); - - foreach ($expectedReflected->getProperties() as $expectedReflectedProperty) { - if (!in_array($expectedReflectedProperty->getName(), self::$ignoredAttributes, false)) { - $actualReflectedProperty = $actualReflected->getProperty($expectedReflectedProperty->getName()); - - $expectedReflectedProperty->setAccessible(true); - $actualReflectedProperty->setAccessible(true); - - $expectedProperty = $expectedReflectedProperty->getValue($expected); - $actualProperty = $actualReflectedProperty->getValue($actual); - - if (!TestUtils::isSimilar($expectedProperty, $actualProperty)) { - return false; - } - } - } - - return true; - } + private static array $ignoredAttributes = ['eventId', 'occurredOn']; + + public function accepts($expected, $actual): bool + { + $domainEventRootClass = DomainEvent::class; + + return $expected instanceof $domainEventRootClass && $actual instanceof $domainEventRootClass; + } + + public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false): void + { + if (!$this->areSimilar($expected, $actual)) { + throw new ComparisonFailure( + $expected, + $actual, + $this->exporter->export($expected), + $this->exporter->export($actual), + false, + 'Failed asserting the events are equal.' + ); + } + } + + private function areSimilar(DomainEvent $expected, DomainEvent $actual): bool + { + if (!$this->areTheSameClass($expected, $actual)) { + return false; + } + + return $this->propertiesAreSimilar($expected, $actual); + } + + private function areTheSameClass(DomainEvent $expected, DomainEvent $actual): bool + { + return $expected::class === $actual::class; + } + + private function propertiesAreSimilar(DomainEvent $expected, DomainEvent $actual): bool + { + $expectedReflected = new ReflectionObject($expected); + $actualReflected = new ReflectionObject($actual); + + foreach ($expectedReflected->getProperties() as $expectedReflectedProperty) { + if (!in_array($expectedReflectedProperty->getName(), self::$ignoredAttributes, false)) { + $actualReflectedProperty = $actualReflected->getProperty($expectedReflectedProperty->getName()); + + $expectedReflectedProperty->setAccessible(true); + $actualReflectedProperty->setAccessible(true); + + $expectedProperty = $expectedReflectedProperty->getValue($expected); + $actualProperty = $actualReflectedProperty->getValue($actual); + + if (!TestUtils::isSimilar($expectedProperty, $actualProperty)) { + return false; + } + } + } + + return true; + } } diff --git a/tests/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php b/tests/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php index 7c8847dcc..e5b4ca53a 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php +++ b/tests/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php @@ -21,55 +21,55 @@ // Based on \PHPUnit\Framework\Constraint\IsEqual final class CodelyTvConstraintIsSimilar extends Constraint { - public function __construct(private $value, private readonly float $delta = 0.0) {} + public function __construct(private $value, private readonly float $delta = 0.0) {} - public function evaluate($other, $description = '', $returnResult = false): bool - { - if ($this->value === $other) { - return true; - } + public function evaluate($other, $description = '', $returnResult = false): bool + { + if ($this->value === $other) { + return true; + } - $isValid = true; - $comparatorFactory = new Factory(); + $isValid = true; + $comparatorFactory = new Factory(); - $comparatorFactory->register(new AggregateRootArraySimilarComparator()); - $comparatorFactory->register(new AggregateRootSimilarComparator()); - $comparatorFactory->register(new DomainEventArraySimilarComparator()); - $comparatorFactory->register(new DomainEventSimilarComparator()); - $comparatorFactory->register(new DateTimeSimilarComparator()); - $comparatorFactory->register(new DateTimeStringSimilarComparator()); + $comparatorFactory->register(new AggregateRootArraySimilarComparator()); + $comparatorFactory->register(new AggregateRootSimilarComparator()); + $comparatorFactory->register(new DomainEventArraySimilarComparator()); + $comparatorFactory->register(new DomainEventSimilarComparator()); + $comparatorFactory->register(new DateTimeSimilarComparator()); + $comparatorFactory->register(new DateTimeStringSimilarComparator()); - try { - $comparator = $comparatorFactory->getComparatorFor($other, $this->value); + try { + $comparator = $comparatorFactory->getComparatorFor($other, $this->value); - $comparator->assertEquals($this->value, $other, $this->delta); - } catch (ComparisonFailure $f) { - if (!$returnResult) { - throw new ExpectationFailedException(trim($description . "\n" . $f->getMessage()), $f); - } + $comparator->assertEquals($this->value, $other, $this->delta); + } catch (ComparisonFailure $f) { + if (!$returnResult) { + throw new ExpectationFailedException(trim($description . "\n" . $f->getMessage()), $f); + } - $isValid = false; - } + $isValid = false; + } - return $isValid; - } + return $isValid; + } - public function toString(): string - { - $delta = ''; + public function toString(): string + { + $delta = ''; - if (is_string($this->value)) { - if (str_contains($this->value, "\n")) { - return 'is equal to '; - } + if (is_string($this->value)) { + if (str_contains($this->value, "\n")) { + return 'is equal to '; + } - return sprintf("is equal to '%s'", $this->value); - } + return sprintf("is equal to '%s'", $this->value); + } - if ($this->delta !== 0) { - $delta = sprintf(' with delta <%F>', $this->delta); - } + if ($this->delta !== 0) { + $delta = sprintf(' with delta <%F>', $this->delta); + } - return sprintf('is equal to %s%s', $this->exporter()->export($this->value), $delta); - } + return sprintf('is equal to %s%s', $this->exporter()->export($this->value), $delta); + } } diff --git a/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php b/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php index 5ef80b395..52438a8f0 100644 --- a/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php +++ b/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php @@ -11,54 +11,54 @@ abstract class InfrastructureTestCase extends KernelTestCase { - abstract protected function kernelClass(): string; + abstract protected function kernelClass(): string; - protected function setUp(): void - { - $_SERVER['KERNEL_CLASS'] = $this->kernelClass(); + protected function setUp(): void + { + $_SERVER['KERNEL_CLASS'] = $this->kernelClass(); - self::bootKernel(['environment' => 'test']); + self::bootKernel(['environment' => 'test']); - parent::setUp(); - } + parent::setUp(); + } - protected function assertSimilar(mixed $expected, mixed $actual): void - { - TestUtils::assertSimilar($expected, $actual); - } + protected function assertSimilar(mixed $expected, mixed $actual): void + { + TestUtils::assertSimilar($expected, $actual); + } - protected function service(string $id): mixed - { - return self::getContainer()->get($id); - } + protected function service(string $id): mixed + { + return self::getContainer()->get($id); + } - protected function parameter(string $parameter): mixed - { - return self::getContainer()->getParameter($parameter); - } + protected function parameter(string $parameter): mixed + { + return self::getContainer()->getParameter($parameter); + } - protected function clearUnitOfWork(): void - { - $this->service(EntityManager::class)->clear(); - } + protected function clearUnitOfWork(): void + { + $this->service(EntityManager::class)->clear(); + } - /** @param int<0, max> $timeToWaitOnErrorInSeconds */ - protected function eventually( - callable $fn, - int $totalRetries = 3, - int $timeToWaitOnErrorInSeconds = 1, - int $attempt = 0 - ): void { - try { - $fn(); - } catch (Throwable $error) { - if ($totalRetries === $attempt) { - throw $error; - } + /** @param int<0, max> $timeToWaitOnErrorInSeconds */ + protected function eventually( + callable $fn, + int $totalRetries = 3, + int $timeToWaitOnErrorInSeconds = 1, + int $attempt = 0 + ): void { + try { + $fn(); + } catch (Throwable $error) { + if ($totalRetries === $attempt) { + throw $error; + } - sleep($timeToWaitOnErrorInSeconds); + sleep($timeToWaitOnErrorInSeconds); - $this->eventually($fn, $totalRetries, $timeToWaitOnErrorInSeconds, $attempt + 1); - } - } + $this->eventually($fn, $totalRetries, $timeToWaitOnErrorInSeconds, $attempt + 1); + } + } } diff --git a/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php b/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php index 1776ca089..3ffac0ca0 100644 --- a/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php +++ b/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php @@ -19,86 +19,86 @@ abstract class UnitTestCase extends MockeryTestCase { - private EventBus|MockInterface|null $eventBus = null; - private MockInterface|UuidGenerator|null $uuidGenerator = null; - - protected function mock(string $className): MockInterface - { - return Mockery::mock($className); - } - - protected function shouldPublishDomainEvent(DomainEvent $domainEvent): void - { - $this->eventBus() - ->shouldReceive('publish') - ->with($this->similarTo($domainEvent)) - ->andReturnNull(); - } - - protected function shouldNotPublishDomainEvent(): void - { - $this->eventBus() - ->shouldReceive('publish') - ->withNoArgs() - ->andReturnNull(); - } - - protected function eventBus(): EventBus|MockInterface - { - return $this->eventBus ??= $this->mock(EventBus::class); - } - - protected function shouldGenerateUuid(string $uuid): void - { - $this->uuidGenerator() - ->shouldReceive('generate') - ->once() - ->withNoArgs() - ->andReturn($uuid); - } - - protected function uuidGenerator(): MockInterface|UuidGenerator - { - return $this->uuidGenerator ??= $this->mock(UuidGenerator::class); - } - - protected function notify(DomainEvent $event, callable $subscriber): void - { - $subscriber($event); - } - - protected function dispatch(Command $command, callable $commandHandler): void - { - $commandHandler($command); - } - - protected function assertAskResponse(Response $expected, Query $query, callable $queryHandler): void - { - $actual = $queryHandler($query); - - $this->assertEquals($expected, $actual); - } - - /** @param class-string $expectedErrorClass */ - protected function assertAskThrowsException(string $expectedErrorClass, Query $query, callable $queryHandler): void - { - $this->expectException($expectedErrorClass); - - $queryHandler($query); - } - - protected function isSimilar(mixed $expected, mixed $actual): bool - { - return TestUtils::isSimilar($expected, $actual); - } - - protected function assertSimilar(mixed $expected, mixed $actual): void - { - TestUtils::assertSimilar($expected, $actual); - } - - protected function similarTo(mixed $value, float $delta = 0.0): MatcherAbstract - { - return TestUtils::similarTo($value, $delta); - } + private EventBus|MockInterface|null $eventBus = null; + private MockInterface|UuidGenerator|null $uuidGenerator = null; + + protected function mock(string $className): MockInterface + { + return Mockery::mock($className); + } + + protected function shouldPublishDomainEvent(DomainEvent $domainEvent): void + { + $this->eventBus() + ->shouldReceive('publish') + ->with($this->similarTo($domainEvent)) + ->andReturnNull(); + } + + protected function shouldNotPublishDomainEvent(): void + { + $this->eventBus() + ->shouldReceive('publish') + ->withNoArgs() + ->andReturnNull(); + } + + protected function eventBus(): EventBus|MockInterface + { + return $this->eventBus ??= $this->mock(EventBus::class); + } + + protected function shouldGenerateUuid(string $uuid): void + { + $this->uuidGenerator() + ->shouldReceive('generate') + ->once() + ->withNoArgs() + ->andReturn($uuid); + } + + protected function uuidGenerator(): MockInterface|UuidGenerator + { + return $this->uuidGenerator ??= $this->mock(UuidGenerator::class); + } + + protected function notify(DomainEvent $event, callable $subscriber): void + { + $subscriber($event); + } + + protected function dispatch(Command $command, callable $commandHandler): void + { + $commandHandler($command); + } + + protected function assertAskResponse(Response $expected, Query $query, callable $queryHandler): void + { + $actual = $queryHandler($query); + + $this->assertEquals($expected, $actual); + } + + /** @param class-string $expectedErrorClass */ + protected function assertAskThrowsException(string $expectedErrorClass, Query $query, callable $queryHandler): void + { + $this->expectException($expectedErrorClass); + + $queryHandler($query); + } + + protected function isSimilar(mixed $expected, mixed $actual): bool + { + return TestUtils::isSimilar($expected, $actual); + } + + protected function assertSimilar(mixed $expected, mixed $actual): void + { + TestUtils::assertSimilar($expected, $actual); + } + + protected function similarTo(mixed $value, float $delta = 0.0): MatcherAbstract + { + return TestUtils::similarTo($value, $delta); + } } diff --git a/tests/Shared/SharedArchitectureTest.php b/tests/Shared/SharedArchitectureTest.php index 08561532d..4e7489762 100644 --- a/tests/Shared/SharedArchitectureTest.php +++ b/tests/Shared/SharedArchitectureTest.php @@ -16,46 +16,46 @@ final class SharedArchitectureTest { - public function test_shared_domain_should_not_import_from_outside(): Rule - { - return PHPat::rule() - ->classes(Selector::inNamespace('CodelyTv\Shared\Domain')) - ->canOnlyDependOn() - ->classes(...array_merge(ArchitectureTest::languageClasses(), [ - // Itself - Selector::inNamespace('CodelyTv\Shared\Domain'), - // Dependencies treated as domain - Selector::classname(Uuid::class), - ])) - ->because('shared domain cannot import from outside'); - } + public function test_shared_domain_should_not_import_from_outside(): Rule + { + return PHPat::rule() + ->classes(Selector::inNamespace('CodelyTv\Shared\Domain')) + ->canOnlyDependOn() + ->classes(...array_merge(ArchitectureTest::languageClasses(), [ + // Itself + Selector::inNamespace('CodelyTv\Shared\Domain'), + // Dependencies treated as domain + Selector::classname(Uuid::class), + ])) + ->because('shared domain cannot import from outside'); + } - public function test_shared_infrastructure_should_not_import_from_other_contexts(): Rule - { - return PHPat::rule() - ->classes(Selector::inNamespace('CodelyTv\Shared\Infrastructure')) - ->shouldNotDependOn() - ->classes(Selector::inNamespace('CodelyTv')) - ->excluding( - // Itself - Selector::inNamespace('CodelyTv\Shared'), - // This need to be refactored - Selector::classname(MySqlDatabaseCleaner::class), - Selector::classname(AuthenticateUserCommand::class), - ); - } + public function test_shared_infrastructure_should_not_import_from_other_contexts(): Rule + { + return PHPat::rule() + ->classes(Selector::inNamespace('CodelyTv\Shared\Infrastructure')) + ->shouldNotDependOn() + ->classes(Selector::inNamespace('CodelyTv')) + ->excluding( + // Itself + Selector::inNamespace('CodelyTv\Shared'), + // This need to be refactored + Selector::classname(MySqlDatabaseCleaner::class), + Selector::classname(AuthenticateUserCommand::class), + ); + } - public function test_all_use_cases_can_only_have_one_public_method(): Rule - { - return PHPat::rule() - ->classes( - Selector::classname('/^CodelyTv\\\\.+\\\\.+\\\\Application\\\\.+\\\\(?!.*(?:Command|Query)$).*$/', true) - ) - ->excluding( - Selector::implements(Response::class), - Selector::implements(DomainEventSubscriber::class), - Selector::inNamespace('/.*\\\\Tests\\\\.*/', true) - ) - ->shouldHaveOnlyOnePublicMethod(); - } + public function test_all_use_cases_can_only_have_one_public_method(): Rule + { + return PHPat::rule() + ->classes( + Selector::classname('/^CodelyTv\\\\.+\\\\.+\\\\Application\\\\.+\\\\(?!.*(?:Command|Query)$).*$/', true) + ) + ->excluding( + Selector::implements(Response::class), + Selector::implements(DomainEventSubscriber::class), + Selector::inNamespace('/.*\\\\Tests\\\\.*/', true) + ) + ->shouldHaveOnlyOnePublicMethod(); + } } From b34318ba74db5370269ae9f19b634607bd17b398 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Mon, 23 Oct 2023 12:19:24 +0200 Subject: [PATCH 29/40] feat: update codely coding standard --- composer.lock | 14 +++++++------- ecs.php | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/composer.lock b/composer.lock index 7f2369ac4..4c9c29173 100644 --- a/composer.lock +++ b/composer.lock @@ -6064,16 +6064,16 @@ }, { "name": "codelytv/coding-style", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/CodelyTV/php-coding_style-codely.git", - "reference": "6aa1ff99eb1ac817dbf2be6bf3288b7925784e9d" + "reference": "2d350ba91ba0f56a4d159d81f5f193410dd7484c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CodelyTV/php-coding_style-codely/zipball/6aa1ff99eb1ac817dbf2be6bf3288b7925784e9d", - "reference": "6aa1ff99eb1ac817dbf2be6bf3288b7925784e9d", + "url": "https://api.github.com/repos/CodelyTV/php-coding_style-codely/zipball/2d350ba91ba0f56a4d159d81f5f193410dd7484c", + "reference": "2d350ba91ba0f56a4d159d81f5f193410dd7484c", "shasum": "" }, "require": { @@ -6082,7 +6082,7 @@ "type": "library", "autoload": { "psr-4": { - "Codelytv\\CodingStyle\\": "src/" + "CodelyTv\\CodingStyle\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -6096,7 +6096,7 @@ ], "support": { "issues": "https://github.com/CodelyTV/php-coding_style-codely/issues", - "source": "https://github.com/CodelyTV/php-coding_style-codely/tree/1.0.0" + "source": "https://github.com/CodelyTV/php-coding_style-codely/tree/1.0.1" }, "funding": [ { @@ -6104,7 +6104,7 @@ "type": "custom" } ], - "time": "2023-10-23T09:55:18+00:00" + "time": "2023-10-23T10:16:47+00:00" }, { "name": "composer/package-versions-deprecated", diff --git a/ecs.php b/ecs.php index 97f55586a..34bc1f191 100644 --- a/ecs.php +++ b/ecs.php @@ -2,7 +2,7 @@ declare(strict_types=1); -use Codelytv\CodingStyle\CodelyRules; +use CodelyTv\CodingStyle\CodelyRules; use PhpCsFixer\Fixer\ClassNotation\FinalClassFixer; use Symplify\EasyCodingStandard\Config\ECSConfig; From 5f4fc51b3cd08f6d98369e9ae696d8f04011433a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Mon, 23 Oct 2023 12:58:56 +0200 Subject: [PATCH 30/40] feat: update codely coding standard --- composer.json | 2 +- composer.lock | 22 ++++++++++++++-------- ecs.php | 4 ++-- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/composer.json b/composer.json index a616f67eb..635ba2e6d 100644 --- a/composer.json +++ b/composer.json @@ -61,7 +61,7 @@ "phpstan/phpstan": "^1.10", "phpat/phpat": "^0.10.10", "phpmd/phpmd": "^2.14", - "codelytv/coding-style": "^1.0" + "codelytv/coding-style": "^1.1" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index 4c9c29173..dd6f12abd 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": "ba195cf69db5f97d61146955643ca749", + "content-hash": "9718b84494ae39b585647c5eb80984df", "packages": [ { "name": "brick/math", @@ -6064,16 +6064,16 @@ }, { "name": "codelytv/coding-style", - "version": "1.0.1", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/CodelyTV/php-coding_style-codely.git", - "reference": "2d350ba91ba0f56a4d159d81f5f193410dd7484c" + "reference": "9178d43b9b8996e6b04108f102dac358fe642df1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CodelyTV/php-coding_style-codely/zipball/2d350ba91ba0f56a4d159d81f5f193410dd7484c", - "reference": "2d350ba91ba0f56a4d159d81f5f193410dd7484c", + "url": "https://api.github.com/repos/CodelyTV/php-coding_style-codely/zipball/9178d43b9b8996e6b04108f102dac358fe642df1", + "reference": "9178d43b9b8996e6b04108f102dac358fe642df1", "shasum": "" }, "require": { @@ -6082,13 +6082,19 @@ "type": "library", "autoload": { "psr-4": { - "CodelyTv\\CodingStyle\\": "src/" + "CodelyTv\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "AGPL-3.0-or-later" ], + "authors": [ + { + "name": "Codely", + "homepage": "https://codely.com" + } + ], "description": "PHP Coding Style rules we use in Codely", "keywords": [ "Code style", @@ -6096,7 +6102,7 @@ ], "support": { "issues": "https://github.com/CodelyTV/php-coding_style-codely/issues", - "source": "https://github.com/CodelyTV/php-coding_style-codely/tree/1.0.1" + "source": "https://github.com/CodelyTV/php-coding_style-codely/tree/1.1.1" }, "funding": [ { @@ -6104,7 +6110,7 @@ "type": "custom" } ], - "time": "2023-10-23T10:16:47+00:00" + "time": "2023-10-23T10:56:55+00:00" }, { "name": "composer/package-versions-deprecated", diff --git a/ecs.php b/ecs.php index 34bc1f191..3e87e64ce 100644 --- a/ecs.php +++ b/ecs.php @@ -2,7 +2,7 @@ declare(strict_types=1); -use CodelyTv\CodingStyle\CodelyRules; +use CodelyTv\CodingStyle; use PhpCsFixer\Fixer\ClassNotation\FinalClassFixer; use Symplify\EasyCodingStandard\Config\ECSConfig; @@ -13,7 +13,7 @@ __DIR__ . '/tests', ]); - $ecsConfig->sets([CodelyRules::CODING_STYLE]); + $ecsConfig->sets([CodingStyle::DEFAULT]); $ecsConfig->skip([ FinalClassFixer::class => [ From 0fb5690cb5c33b941dc86db594509629d1a745fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Mon, 23 Oct 2023 13:31:34 +0200 Subject: [PATCH 31/40] feat: update codely coding standard to indent arrays --- .../src/Controller/Home/HomeGetWebController.php | 6 +++--- composer.lock | 12 ++++++------ .../Symfony/BasicHttpAuthMiddleware.php | 4 ++-- .../Domain/BackofficeCourseCriteriaMother.php | 8 ++++---- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/apps/backoffice/frontend/src/Controller/Home/HomeGetWebController.php b/apps/backoffice/frontend/src/Controller/Home/HomeGetWebController.php index b318f388a..30e011847 100644 --- a/apps/backoffice/frontend/src/Controller/Home/HomeGetWebController.php +++ b/apps/backoffice/frontend/src/Controller/Home/HomeGetWebController.php @@ -13,9 +13,9 @@ final class HomeGetWebController extends WebController public function __invoke(Request $request): Response { return $this->render('pages/home.html.twig', [ - 'title' => 'Welcome', - 'description' => 'CodelyTV - Backoffice', - ]); + 'title' => 'Welcome', + 'description' => 'CodelyTV - Backoffice', + ]); } protected function exceptions(): array diff --git a/composer.lock b/composer.lock index dd6f12abd..a5f25e0d0 100644 --- a/composer.lock +++ b/composer.lock @@ -6064,16 +6064,16 @@ }, { "name": "codelytv/coding-style", - "version": "1.1.1", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/CodelyTV/php-coding_style-codely.git", - "reference": "9178d43b9b8996e6b04108f102dac358fe642df1" + "reference": "2e00fde930bb1a51d6e7494bfc3a44cb60196fff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CodelyTV/php-coding_style-codely/zipball/9178d43b9b8996e6b04108f102dac358fe642df1", - "reference": "9178d43b9b8996e6b04108f102dac358fe642df1", + "url": "https://api.github.com/repos/CodelyTV/php-coding_style-codely/zipball/2e00fde930bb1a51d6e7494bfc3a44cb60196fff", + "reference": "2e00fde930bb1a51d6e7494bfc3a44cb60196fff", "shasum": "" }, "require": { @@ -6102,7 +6102,7 @@ ], "support": { "issues": "https://github.com/CodelyTV/php-coding_style-codely/issues", - "source": "https://github.com/CodelyTV/php-coding_style-codely/tree/1.1.1" + "source": "https://github.com/CodelyTV/php-coding_style-codely/tree/1.1.2" }, "funding": [ { @@ -6110,7 +6110,7 @@ "type": "custom" } ], - "time": "2023-10-23T10:56:55+00:00" + "time": "2023-10-23T11:29:20+00:00" }, { "name": "composer/package-versions-deprecated", diff --git a/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php b/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php index ad1106448..410b6a295 100644 --- a/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php +++ b/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php @@ -55,8 +55,8 @@ private function askForCredentials(RequestEvent $event): void { $event->setResponse( new Response('', Response::HTTP_UNAUTHORIZED, [ -'WWW-Authenticate' => 'Basic realm="CodelyTV"', -]) + 'WWW-Authenticate' => 'Basic realm="CodelyTV"', + ]) ); } } diff --git a/tests/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php b/tests/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php index 666d30ab0..58e38d029 100644 --- a/tests/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php +++ b/tests/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php @@ -16,10 +16,10 @@ public static function nameContains(string $text): Criteria return CriteriaMother::create( FiltersMother::createOne( FilterMother::fromValues([ - 'field' => 'name', - 'operator' => 'CONTAINS', - 'value' => $text, - ]) + 'field' => 'name', + 'operator' => 'CONTAINS', + 'value' => $text, + ]) ) ); } From ecf8d27ea25885a8f21cbc60da87e9912daf4aba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Mon, 23 Oct 2023 18:18:49 +0200 Subject: [PATCH 32/40] chore: add always var folders --- .gitignore | 1 + apps/backoffice/backend/var/.gitkeep | 0 apps/backoffice/frontend/var/.gitkeep | 0 apps/mooc/backend/var/.gitkeep | 0 apps/mooc/frontend/var/.gitkeep | 0 5 files changed, 1 insertion(+) create mode 100644 apps/backoffice/backend/var/.gitkeep create mode 100644 apps/backoffice/frontend/var/.gitkeep create mode 100644 apps/mooc/backend/var/.gitkeep create mode 100644 apps/mooc/frontend/var/.gitkeep diff --git a/.gitignore b/.gitignore index ee27af29d..a4b4f3437 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ /.env.*.local /apps/*/*/var/ +!/apps/*/*/var/.gitkeep /apps/*/*/build/ !/apps/*/*/build/supervisor/.gitkeep diff --git a/apps/backoffice/backend/var/.gitkeep b/apps/backoffice/backend/var/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/apps/backoffice/frontend/var/.gitkeep b/apps/backoffice/frontend/var/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/apps/mooc/backend/var/.gitkeep b/apps/mooc/backend/var/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/apps/mooc/frontend/var/.gitkeep b/apps/mooc/frontend/var/.gitkeep new file mode 100644 index 000000000..e69de29bb From de40b2673dfd18853567d0fbfd27f283349a69a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Mon, 20 Nov 2023 16:47:52 +0100 Subject: [PATCH 33/40] chore: add cdc pattern example (#369) * chore: add mutations table * refactor: use codely for commands instead of codelytv * chore: remove symfony deprecations * chore: add command to publish mutations as domain events * fix: no finalize kernel classes --- .../backend/src/BackofficeBackendKernel.php | 2 +- .../frontend/src/BackofficeFrontendKernel.php | 2 +- .../MySql/ConsumeMySqlDomainEventsCommand.php | 8 +- ...ublishDomainEventsFromMutationsCommand.php | 91 ++++++++++++++ .../RabbitMq/ConfigureRabbitMqCommand.php | 12 +- .../ConsumeRabbitMqDomainEventsCommand.php | 8 +- ...SupervisorRabbitMqConsumerFilesCommand.php | 12 +- apps/mooc/backend/src/MoocBackendKernel.php | 2 +- ecs.php | 32 +++-- etc/databases/mooc.sql | 112 ++++++++++++++---- ...baseMutationToCourseCreatedDomainEvent.php | 40 +++++++ .../Persistence/Doctrine/CourseIdsType.php | 4 +- .../Cdc/DatabaseMutationAction.php | 12 ++ .../Cdc/DatabaseMutationToDomainEvent.php | 17 +++ .../Doctrine/DoctrineEntityManagerFactory.php | 9 +- .../Persistence/Doctrine/UuidType.php | 4 +- 16 files changed, 297 insertions(+), 70 deletions(-) create mode 100644 apps/mooc/backend/src/Command/DomainEvents/PublishDomainEventsFromMutationsCommand.php create mode 100644 src/Mooc/Courses/Infrastructure/Cdc/DatabaseMutationToCourseCreatedDomainEvent.php create mode 100644 src/Shared/Infrastructure/Cdc/DatabaseMutationAction.php create mode 100644 src/Shared/Infrastructure/Cdc/DatabaseMutationToDomainEvent.php diff --git a/apps/backoffice/backend/src/BackofficeBackendKernel.php b/apps/backoffice/backend/src/BackofficeBackendKernel.php index 793ede8c0..6ed60b1be 100644 --- a/apps/backoffice/backend/src/BackofficeBackendKernel.php +++ b/apps/backoffice/backend/src/BackofficeBackendKernel.php @@ -36,7 +36,7 @@ public function getProjectDir(): string protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void { $container->addResource(new FileResource($this->getProjectDir() . '/config/bundles.php')); - $container->setParameter('container.dumper.inline_class_loader', true); + $container->setParameter('.container.dumper.inline_class_loader', true); $confDir = $this->getProjectDir() . '/config'; $loader->load($confDir . '/services' . self::CONFIG_EXTS, 'glob'); diff --git a/apps/backoffice/frontend/src/BackofficeFrontendKernel.php b/apps/backoffice/frontend/src/BackofficeFrontendKernel.php index 28852a38a..dd793f7ab 100644 --- a/apps/backoffice/frontend/src/BackofficeFrontendKernel.php +++ b/apps/backoffice/frontend/src/BackofficeFrontendKernel.php @@ -36,7 +36,7 @@ public function getProjectDir(): string protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void { $container->addResource(new FileResource($this->getProjectDir() . '/config/bundles.php')); - $container->setParameter('container.dumper.inline_class_loader', true); + $container->setParameter('.container.dumper.inline_class_loader', true); $confDir = $this->getProjectDir() . '/config'; $loader->load($confDir . '/services' . self::CONFIG_EXTS, 'glob'); diff --git a/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php b/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php index 359264a69..16d96c2a6 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php @@ -8,6 +8,7 @@ use CodelyTv\Shared\Infrastructure\Bus\Event\DomainEventSubscriberLocator; use CodelyTv\Shared\Infrastructure\Bus\Event\MySql\MySqlDoctrineDomainEventsConsumer; use CodelyTv\Shared\Infrastructure\Doctrine\DatabaseConnections; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -15,10 +16,9 @@ use function Lambdish\Phunctional\pipe; +#[AsCommand(name: 'codely:domain-events:mysql:consume', description: 'Consume domain events from MySql',)] final class ConsumeMySqlDomainEventsCommand extends Command { - protected static $defaultName = 'codelytv:domain-events:mysql:consume'; - public function __construct( private readonly MySqlDoctrineDomainEventsConsumer $consumer, private readonly DatabaseConnections $connections, @@ -29,9 +29,7 @@ public function __construct( protected function configure(): void { - $this - ->setDescription('Consume domain events from MySql') - ->addArgument('quantity', InputArgument::REQUIRED, 'Quantity of events to process'); + $this->addArgument('quantity', InputArgument::REQUIRED, 'Quantity of events to process'); } protected function execute(InputInterface $input, OutputInterface $output): int diff --git a/apps/mooc/backend/src/Command/DomainEvents/PublishDomainEventsFromMutationsCommand.php b/apps/mooc/backend/src/Command/DomainEvents/PublishDomainEventsFromMutationsCommand.php new file mode 100644 index 000000000..945784311 --- /dev/null +++ b/apps/mooc/backend/src/Command/DomainEvents/PublishDomainEventsFromMutationsCommand.php @@ -0,0 +1,91 @@ +transformers = [ + 'courses' => [ + DatabaseMutationAction::INSERT->value => DatabaseMutationToCourseCreatedDomainEvent::class, + DatabaseMutationAction::UPDATE->value => null, + DatabaseMutationAction::DELETE->value => null, + ], + ]; + } + + protected function configure(): void + { + $this->addArgument('quantity', InputArgument::REQUIRED, 'Quantity of mutations to process'); + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $totalMutations = (int) $input->getArgument('quantity'); + + $this->entityManager->wrapInTransaction(function (EntityManager $entityManager) use ($totalMutations) { + $mutations = $entityManager->getConnection() + ->executeQuery("SELECT * FROM mutations ORDER BY id ASC LIMIT $totalMutations FOR UPDATE") + ->fetchAllAssociative(); + + foreach ($mutations as $mutation) { + $transformer = $this->findTransformer($mutation['table_name'], $mutation['operation']); + + if ($transformer === null) { + echo sprintf("Ignoring %s %s\n", $mutation['table_name'], $mutation['operation']); + continue; + } + + $domainEvents = $transformer->transform($mutation); + + $this->eventBus->publish(...$domainEvents); + } + + $entityManager->getConnection()->executeStatement( + sprintf('DELETE FROM mutations WHERE id IN (%s)', implode(',', array_column($mutations, 'id'))) + ); + }); + + return 0; + } + + private function findTransformer(string $tableName, string $operation): ?DatabaseMutationToDomainEvent + { + if (!array_key_exists($tableName, $this->transformers) && array_key_exists( + $operation, + $this->transformers[$tableName] + )) { + throw new RuntimeException("Transformer not found for table $tableName and operation $operation"); + } + + /** @var class-string|null $class */ + $class = $this->transformers[$tableName][$operation]; + + return $class ? new $class() : null; + } +} diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php index e42c35ba6..72801af71 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php @@ -5,15 +5,18 @@ namespace CodelyTv\Apps\Mooc\Backend\Command\DomainEvents\RabbitMq; use CodelyTv\Shared\Infrastructure\Bus\Event\RabbitMq\RabbitMqConfigurer; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Traversable; +#[AsCommand( + name: 'codely:domain-events:rabbitmq:configure', + description: 'Configure the RabbitMQ to allow publish & consume domain events', +)] final class ConfigureRabbitMqCommand extends Command { - protected static $defaultName = 'codelytv:domain-events:rabbitmq:configure'; - public function __construct( private readonly RabbitMqConfigurer $configurer, private readonly string $exchangeName, @@ -22,11 +25,6 @@ public function __construct( parent::__construct(); } - protected function configure(): void - { - $this->setDescription('Configure the RabbitMQ to allow publish & consume domain events'); - } - protected function execute(InputInterface $input, OutputInterface $output): int { $this->configurer->configure($this->exchangeName, ...iterator_to_array($this->subscribers)); diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php index 856f40b04..c29c056d8 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php @@ -7,6 +7,7 @@ use CodelyTv\Shared\Infrastructure\Bus\Event\DomainEventSubscriberLocator; use CodelyTv\Shared\Infrastructure\Bus\Event\RabbitMq\RabbitMqDomainEventsConsumer; use CodelyTv\Shared\Infrastructure\Doctrine\DatabaseConnections; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -14,10 +15,12 @@ use function Lambdish\Phunctional\repeat; +#[AsCommand( + name: 'codely:domain-events:rabbitmq:consume', + description: 'Consume domain events from the RabbitMQ', +)] final class ConsumeRabbitMqDomainEventsCommand extends Command { - protected static $defaultName = 'codelytv:domain-events:rabbitmq:consume'; - public function __construct( private readonly RabbitMqDomainEventsConsumer $consumer, private readonly DatabaseConnections $connections, @@ -29,7 +32,6 @@ public function __construct( protected function configure(): void { $this - ->setDescription('Consume domain events from the RabbitMQ') ->addArgument('queue', InputArgument::REQUIRED, 'Queue name') ->addArgument('quantity', InputArgument::REQUIRED, 'Quantity of events to process'); } diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php index f806d57da..646392bf3 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php @@ -7,6 +7,7 @@ use CodelyTv\Shared\Domain\Bus\Event\DomainEventSubscriber; use CodelyTv\Shared\Infrastructure\Bus\Event\DomainEventSubscriberLocator; use CodelyTv\Shared\Infrastructure\Bus\Event\RabbitMq\RabbitMqQueueNameFormatter; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -14,12 +15,15 @@ use function Lambdish\Phunctional\each; +#[AsCommand( + name: 'codely:domain-events:rabbitmq:generate-supervisor-files', + description: 'Generate the supervisor configuration for every RabbitMQ subscriber', +)] final class GenerateSupervisorRabbitMqConsumerFilesCommand extends Command { private const EVENTS_TO_PROCESS_AT_TIME = 200; private const NUMBERS_OF_PROCESSES_PER_SUBSCRIBER = 1; private const SUPERVISOR_PATH = __DIR__ . '/../../../../build/supervisor'; - protected static $defaultName = 'codelytv:domain-events:rabbitmq:generate-supervisor-files'; public function __construct(private readonly DomainEventSubscriberLocator $locator) { @@ -28,9 +32,7 @@ public function __construct(private readonly DomainEventSubscriberLocator $locat protected function configure(): void { - $this - ->setDescription('Generate the supervisor configuration for every RabbitMQ subscriber') - ->addArgument('command-path', InputArgument::OPTIONAL, 'Path on this is gonna be deployed', '/var/www'); + $this->addArgument('command-path', InputArgument::OPTIONAL, 'Path on this is gonna be deployed', '/var/www'); } protected function execute(InputInterface $input, OutputInterface $output): int @@ -68,7 +70,7 @@ private function template(): string { return <<addResource(new FileResource($this->getProjectDir() . '/config/bundles.php')); - $container->setParameter('container.dumper.inline_class_loader', true); + $container->setParameter('.container.dumper.inline_class_loader', true); $confDir = $this->getProjectDir() . '/config'; $loader->load($confDir . '/services' . self::CONFIG_EXTS, 'glob'); diff --git a/ecs.php b/ecs.php index 3e87e64ce..e3ed961ba 100644 --- a/ecs.php +++ b/ecs.php @@ -7,24 +7,20 @@ use Symplify\EasyCodingStandard\Config\ECSConfig; return function (ECSConfig $ecsConfig): void { - $ecsConfig->paths([ - __DIR__ . '/apps', - __DIR__ . '/src', - __DIR__ . '/tests', - ]); + $ecsConfig->paths([__DIR__ . '/apps', __DIR__ . '/src', __DIR__ . '/tests', ]); - $ecsConfig->sets([CodingStyle::DEFAULT]); + $ecsConfig->sets([CodingStyle::DEFAULT]); - $ecsConfig->skip([ - FinalClassFixer::class => [ - __DIR__ . '/apps/backoffice/backend/src/BackofficeBackendKernel.php', - __DIR__ . '/apps/backoffice/frontend/src/BackofficeFrontendKernel.php', - __DIR__ . '/apps/mooc/backend/src/MoocBackendKernel.php', - __DIR__ . '/src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php', - ], - __DIR__ . '/apps/backoffice/backend/var', - __DIR__ . '/apps/backoffice/frontend/var', - __DIR__ . '/apps/mooc/backend/var', - __DIR__ . '/apps/mooc/frontend/var', - ]); + $ecsConfig->skip([ + FinalClassFixer::class => [ + __DIR__ . '/apps/backoffice/backend/src/BackofficeBackendKernel.php', + __DIR__ . '/apps/backoffice/frontend/src/BackofficeFrontendKernel.php', + __DIR__ . '/apps/mooc/backend/src/MoocBackendKernel.php', + __DIR__ . '/src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php', + ], + __DIR__ . '/apps/backoffice/backend/var', + __DIR__ . '/apps/backoffice/frontend/var', + __DIR__ . '/apps/mooc/backend/var', + __DIR__ . '/apps/mooc/frontend/var', + ]); }; diff --git a/etc/databases/mooc.sql b/etc/databases/mooc.sql index e236cbc46..a999ef78e 100644 --- a/etc/databases/mooc.sql +++ b/etc/databases/mooc.sql @@ -1,31 +1,95 @@ +/* ------------------------- + MOOC CONTEXT +---------------------------- */ + +-- Generic tables + +CREATE TABLE `mutations` ( + `id` BIGINT AUTO_INCREMENT PRIMARY KEY, + `table_name` VARCHAR(255) NOT NULL, + `operation` ENUM ('INSERT', 'UPDATE', 'DELETE') NOT NULL, + `old_value` JSON NULL, + `new_value` JSON NULL, + `mutation_timestamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci; + +CREATE TABLE `domain_events` ( + `id` CHAR(36) NOT NULL, + `aggregate_id` CHAR(36) NOT NULL, + `name` VARCHAR(255) NOT NULL, + `body` JSON NOT NULL, + `occurred_on` TIMESTAMP NOT NULL, + PRIMARY KEY (`id`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci; + +-- Aggregates tables + CREATE TABLE `courses` ( - `id` CHAR(36) NOT NULL, - `name` VARCHAR(255) NOT NULL, - `duration` VARCHAR(255) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + `id` CHAR(36) NOT NULL, + `name` VARCHAR(255) NOT NULL, + `duration` VARCHAR(255) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci; + +CREATE TRIGGER after_courses_insert + AFTER INSERT + ON courses + FOR EACH ROW +BEGIN + INSERT INTO mutations (table_name, operation, new_value, mutation_timestamp) + VALUES ('courses', 'INSERT', JSON_OBJECT('id', new.id, 'name', new.name, 'duration', new.duration), NOW()); +END; + +CREATE TRIGGER after_courses_update + AFTER UPDATE + ON courses + FOR EACH ROW +BEGIN + INSERT INTO mutations (table_name, operation, old_value, new_value, mutation_timestamp) + VALUES ('courses', + 'UPDATE', + JSON_OBJECT('id', old.id, 'name', old.name, 'duration', old.duration), + JSON_OBJECT('id', new.id, 'name', new.name, 'duration', new.duration), + NOW()); +END; + +CREATE TRIGGER after_courses_delete + AFTER DELETE + ON courses + FOR EACH ROW +BEGIN + INSERT INTO mutations (table_name, operation, old_value, mutation_timestamp) + VALUES ('courses', 'DELETE', JSON_OBJECT('id', old.id, 'name', old.name, 'duration', old.duration), NOW()); +END; CREATE TABLE `courses_counter` ( - `id` CHAR(36) NOT NULL, - `total` INT NOT NULL, - `existing_courses` JSON NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + `id` CHAR(36) NOT NULL, + `total` INT NOT NULL, + `existing_courses` JSON NOT NULL, + PRIMARY KEY (`id`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci; -INSERT INTO `courses_counter` VALUES ("cdf26d7d-3deb-4e8c-9f73-4ac085a8d6f3", 0, "[]"); +INSERT INTO `courses_counter` +VALUES ("cdf26d7d-3deb-4e8c-9f73-4ac085a8d6f3", 0, "[]"); -CREATE TABLE `domain_events` ( - `id` CHAR(36) NOT NULL, - `aggregate_id` CHAR(36) NOT NULL, - `name` VARCHAR(255) NOT NULL, - `body` JSON NOT NULL, - `occurred_on` timestamp NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +/* ------------------------- + BACKOFFICE CONTEXT +---------------------------- */ CREATE TABLE `backoffice_courses` ( - `id` CHAR(36) NOT NULL, - `name` VARCHAR(255) NOT NULL, - `duration` VARCHAR(255) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + `id` CHAR(36) NOT NULL, + `name` VARCHAR(255) NOT NULL, + `duration` VARCHAR(255) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci; diff --git a/src/Mooc/Courses/Infrastructure/Cdc/DatabaseMutationToCourseCreatedDomainEvent.php b/src/Mooc/Courses/Infrastructure/Cdc/DatabaseMutationToCourseCreatedDomainEvent.php new file mode 100644 index 000000000..59f78fe54 --- /dev/null +++ b/src/Mooc/Courses/Infrastructure/Cdc/DatabaseMutationToCourseCreatedDomainEvent.php @@ -0,0 +1,40 @@ + $id->value(), $value), $platform); } - public function convertToPHPValue($value, AbstractPlatform $platform) + public function convertToPHPValue($value, AbstractPlatform $platform): array { $scalars = parent::convertToPHPValue($value, $platform); diff --git a/src/Shared/Infrastructure/Cdc/DatabaseMutationAction.php b/src/Shared/Infrastructure/Cdc/DatabaseMutationAction.php new file mode 100644 index 000000000..fdad67057 --- /dev/null +++ b/src/Shared/Infrastructure/Cdc/DatabaseMutationAction.php @@ -0,0 +1,12 @@ +setMetadataDriverImpl(new SimplifiedXmlDriver(array_merge(self::$sharedPrefixes, $contextPrefixes))); + $config->setSchemaManagerFactory(new DefaultSchemaManagerFactory()); return $config; } diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php b/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php index f90ebbe32..1ef8213bc 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php @@ -26,14 +26,14 @@ final public function getName(): string return self::customTypeName(); } - final public function convertToPHPValue($value, AbstractPlatform $platform) + final public function convertToPHPValue($value, AbstractPlatform $platform): mixed { $className = $this->typeClassName(); return new $className($value); } - final public function convertToDatabaseValue($value, AbstractPlatform $platform) + final public function convertToDatabaseValue($value, AbstractPlatform $platform): string { /** @var Uuid $value */ return $value->value(); From faf1a6a30ad37e1e98ddfb1c2105aa0288422b43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Ferrer=20Gonz=C3=A1lez?= Date: Mon, 4 Dec 2023 17:32:16 +0100 Subject: [PATCH 34/40] chore: update to PHP 8.3 (#371) * chore: update Docker image to PHP 8.3 * chore: update PHP extensions for PHP 8.3 * chore: enable APCu in CLI * chore: explicitly enable APCu --- Dockerfile | 4 +- composer.json | 6 +- composer.lock | 1992 +++++++++--------------- etc/infrastructure/php/conf.d/apcu.ini | 2 + 4 files changed, 753 insertions(+), 1251 deletions(-) diff --git a/Dockerfile b/Dockerfile index 5a269cece..dd0f725bf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,10 @@ -FROM php:8.2-fpm-alpine +FROM php:8.3-fpm-alpine WORKDIR /app RUN apk --update upgrade \ && apk add --no-cache autoconf automake make gcc g++ git bash icu-dev libzip-dev rabbitmq-c rabbitmq-c-dev linux-headers -RUN pecl install apcu-5.1.22 && pecl install amqp-2.1.0 && pecl install xdebug-3.2.2 +RUN pecl install apcu-5.1.23 && pecl install amqp-2.1.1 && pecl install xdebug-3.3.0 RUN docker-php-ext-install -j$(nproc) \ bcmath \ diff --git a/composer.json b/composer.json index 635ba2e6d..4a6249ffe 100644 --- a/composer.json +++ b/composer.json @@ -4,7 +4,7 @@ "type": "project", "description": "An example project applying Domain-Driven Design, Hexagonal Architecture and CQRS in a Monorepository", "require": { - "php": "^8.2", + "php": "^8.3", "ext-amqp": "*", "ext-apcu": "*", @@ -33,7 +33,7 @@ "elasticsearch/elasticsearch": "^7", "monolog/monolog": "^3", - "endclothing/prometheus_client_php": "^1" + "promphp/prometheus_client_php": "^2.7.2" }, "require-dev": { "ext-xdebug": "*", @@ -54,7 +54,7 @@ "symplify/easy-coding-standard": "^12.0", "vimeo/psalm": "^5.15", - "rector/rector": "^0.18.4", + "rector/rector": "^0.18.12", "psalm/plugin-mockery": "^1.1", "psalm/plugin-symfony": "^5.0", "psalm/plugin-phpunit": "^0.18.4", diff --git a/composer.lock b/composer.lock index a5f25e0d0..794251bd2 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": "9718b84494ae39b585647c5eb80984df", + "content-hash": "49058a852a48e51de5183cc45f049da6", "packages": [ { "name": "brick/math", @@ -156,16 +156,16 @@ }, { "name": "doctrine/collections", - "version": "2.1.3", + "version": "2.1.4", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "3023e150f90a38843856147b58190aa8b46cc155" + "reference": "72328a11443a0de79967104ad36ba7b30bded134" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/3023e150f90a38843856147b58190aa8b46cc155", - "reference": "3023e150f90a38843856147b58190aa8b46cc155", + "url": "https://api.github.com/repos/doctrine/collections/zipball/72328a11443a0de79967104ad36ba7b30bded134", + "reference": "72328a11443a0de79967104ad36ba7b30bded134", "shasum": "" }, "require": { @@ -173,7 +173,7 @@ "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^10.0", + "doctrine/coding-standard": "^12", "ext-json": "*", "phpstan/phpstan": "^1.8", "phpstan/phpstan-phpunit": "^1.0", @@ -222,7 +222,7 @@ ], "support": { "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/2.1.3" + "source": "https://github.com/doctrine/collections/tree/2.1.4" }, "funding": [ { @@ -238,7 +238,7 @@ "type": "tidelift" } ], - "time": "2023-07-06T15:15:36+00:00" + "time": "2023-10-03T09:22:33+00:00" }, { "name": "doctrine/common", @@ -333,16 +333,16 @@ }, { "name": "doctrine/dbal", - "version": "3.7.0", + "version": "3.7.2", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "00d03067f07482f025d41ab55e4ba0db5eca2cdf" + "reference": "0ac3c270590e54910715e9a1a044cc368df282b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/00d03067f07482f025d41ab55e4ba0db5eca2cdf", - "reference": "00d03067f07482f025d41ab55e4ba0db5eca2cdf", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/0ac3c270590e54910715e9a1a044cc368df282b2", + "reference": "0ac3c270590e54910715e9a1a044cc368df282b2", "shasum": "" }, "require": { @@ -358,7 +358,7 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.10.35", + "phpstan/phpstan": "1.10.42", "phpstan/phpstan-strict-rules": "^1.5", "phpunit/phpunit": "9.6.13", "psalm/plugin-phpunit": "0.18.4", @@ -426,7 +426,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.7.0" + "source": "https://github.com/doctrine/dbal/tree/3.7.2" }, "funding": [ { @@ -442,20 +442,20 @@ "type": "tidelift" } ], - "time": "2023-09-26T20:56:55+00:00" + "time": "2023-11-19T08:06:58+00:00" }, { "name": "doctrine/deprecations", - "version": "v1.1.1", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3" + "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", - "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931", + "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931", "shasum": "" }, "require": { @@ -487,9 +487,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.1.1" + "source": "https://github.com/doctrine/deprecations/tree/1.1.2" }, - "time": "2023-06-03T09:27:29+00:00" + "time": "2023-09-27T20:04:15+00:00" }, { "name": "doctrine/event-manager", @@ -823,16 +823,16 @@ }, { "name": "doctrine/orm", - "version": "2.16.2", + "version": "2.17.1", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "17500f56eaa930f5cd14d765bc2cd851c7d37cc0" + "reference": "1a4fe6e0bb67762370937a7e6cee3da40a9122d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/17500f56eaa930f5cd14d765bc2cd851c7d37cc0", - "reference": "17500f56eaa930f5cd14d765bc2cd851c7d37cc0", + "url": "https://api.github.com/repos/doctrine/orm/zipball/1a4fe6e0bb67762370937a7e6cee3da40a9122d1", + "reference": "1a4fe6e0bb67762370937a7e6cee3da40a9122d1", "shasum": "" }, "require": { @@ -850,7 +850,7 @@ "ext-ctype": "*", "php": "^7.1 || ^8.0", "psr/cache": "^1 || ^2 || ^3", - "symfony/console": "^4.2 || ^5.0 || ^6.0", + "symfony/console": "^4.2 || ^5.0 || ^6.0 || ^7.0", "symfony/polyfill-php72": "^1.23", "symfony/polyfill-php80": "^1.16" }, @@ -861,14 +861,14 @@ "doctrine/annotations": "^1.13 || ^2", "doctrine/coding-standard": "^9.0.2 || ^12.0", "phpbench/phpbench": "^0.16.10 || ^1.0", - "phpstan/phpstan": "~1.4.10 || 1.10.28", + "phpstan/phpstan": "~1.4.10 || 1.10.35", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", "psr/log": "^1 || ^2 || ^3", "squizlabs/php_codesniffer": "3.7.2", "symfony/cache": "^4.4 || ^5.4 || ^6.0", "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2", "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0", - "vimeo/psalm": "4.30.0 || 5.14.1" + "vimeo/psalm": "4.30.0 || 5.15.0" }, "suggest": { "ext-dom": "Provides support for XSD validation for XML mapping files", @@ -918,9 +918,9 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.16.2" + "source": "https://github.com/doctrine/orm/tree/2.17.1" }, - "time": "2023-08-27T18:21:56+00:00" + "time": "2023-11-17T06:25:40+00:00" }, { "name": "doctrine/persistence", @@ -1083,55 +1083,6 @@ ], "time": "2023-04-21T15:31:12+00:00" }, - { - "name": "endclothing/prometheus_client_php", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/endclothing/prometheus_client_php.git", - "reference": "ae61369d8667343cfff70fec648b3448a2076778" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/endclothing/prometheus_client_php/zipball/ae61369d8667343cfff70fec648b3448a2076778", - "reference": "ae61369d8667343cfff70fec648b3448a2076778", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/guzzle": "^6.2", - "php": "^7.1", - "symfony/polyfill-apcu": "^1.6" - }, - "require-dev": { - "phpunit/phpunit": "^7.5" - }, - "suggest": { - "ext-apc": "Required if using APCu.", - "ext-redis": "Required if using Redis." - }, - "type": "library", - "autoload": { - "psr-4": { - "Prometheus\\": "src/Prometheus/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Daniel Noel-Davies", - "email": "Daniel.Noel-Davies@endclothing.com" - } - ], - "support": { - "issues": "https://github.com/endclothing/prometheus_client_php/issues", - "source": "https://github.com/endclothing/prometheus_client_php/tree/v1.0.1" - }, - "time": "2019-10-04T10:46:29+00:00" - }, { "name": "ezimuel/guzzlestreams", "version": "3.1.0", @@ -1324,305 +1275,6 @@ ], "time": "2023-05-24T07:17:17+00:00" }, - { - "name": "guzzlehttp/guzzle", - "version": "6.5.8", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "a52f0440530b54fa079ce76e8c5d196a42cad981" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a52f0440530b54fa079ce76e8c5d196a42cad981", - "reference": "a52f0440530b54fa079ce76e8c5d196a42cad981", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.9", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.17" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.1" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.5-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Jeremy Lindblom", - "email": "jeremeamia@gmail.com", - "homepage": "https://github.com/jeremeamia" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/6.5.8" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", - "type": "tidelift" - } - ], - "time": "2022-06-20T22:16:07+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "1.5.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/67ab6e18aaa14d753cc148911d273f6e6cb6721e", - "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", - "type": "tidelift" - } - ], - "time": "2023-05-21T12:31:43+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.9.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/e4490cabc77465aaee90b20cfc9a770f8c04be6b", - "reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.9.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", - "type": "tidelift" - } - ], - "time": "2023-04-17T16:00:37+00:00" - }, { "name": "lambdish/phunctional", "version": "v2.1.0", @@ -1681,29 +1333,29 @@ }, { "name": "laminas/laminas-code", - "version": "4.12.0", + "version": "4.13.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-code.git", - "reference": "36cbee228b427446419dd51944bdfb6bb8ddbcd0" + "reference": "7353d4099ad5388e84737dd16994316a04f48dbf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/36cbee228b427446419dd51944bdfb6bb8ddbcd0", - "reference": "36cbee228b427446419dd51944bdfb6bb8ddbcd0", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/7353d4099ad5388e84737dd16994316a04f48dbf", + "reference": "7353d4099ad5388e84737dd16994316a04f48dbf", "shasum": "" }, "require": { - "php": "~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "require-dev": { - "doctrine/annotations": "^2.0.0", + "doctrine/annotations": "^2.0.1", "ext-phar": "*", - "laminas/laminas-coding-standard": "^2.3.0", - "laminas/laminas-stdlib": "^3.6.1", - "phpunit/phpunit": "^10.0.9", + "laminas/laminas-coding-standard": "^2.5.0", + "laminas/laminas-stdlib": "^3.17.0", + "phpunit/phpunit": "^10.3.3", "psalm/plugin-phpunit": "^0.18.4", - "vimeo/psalm": "^5.7.1" + "vimeo/psalm": "^5.15.0" }, "suggest": { "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", @@ -1740,30 +1392,30 @@ "type": "community_bridge" } ], - "time": "2023-09-06T14:56:25+00:00" + "time": "2023-10-18T10:00:55+00:00" }, { "name": "laminas/laminas-zendframework-bridge", - "version": "1.7.0", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-zendframework-bridge.git", - "reference": "5ef52e26392777a26dbb8f20fe24f91b406459f6" + "reference": "eb0d96c708b92177a92bc2239543d3ed523452c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/5ef52e26392777a26dbb8f20fe24f91b406459f6", - "reference": "5ef52e26392777a26dbb8f20fe24f91b406459f6", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/eb0d96c708b92177a92bc2239543d3ed523452c6", + "reference": "eb0d96c708b92177a92bc2239543d3ed523452c6", "shasum": "" }, "require": { - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0" }, "require-dev": { - "phpunit/phpunit": "^9.5.26", + "phpunit/phpunit": "^10.4", "psalm/plugin-phpunit": "^0.18.0", "squizlabs/php_codesniffer": "^3.7.1", - "vimeo/psalm": "^4.29.0" + "vimeo/psalm": "^5.16.0" }, "type": "library", "extra": { @@ -1802,20 +1454,21 @@ "type": "community_bridge" } ], - "time": "2022-12-12T11:44:10+00:00" + "abandoned": true, + "time": "2023-11-24T13:56:19+00:00" }, { "name": "monolog/monolog", - "version": "3.4.0", + "version": "3.5.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "e2392369686d420ca32df3803de28b5d6f76867d" + "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/e2392369686d420ca32df3803de28b5d6f76867d", - "reference": "e2392369686d420ca32df3803de28b5d6f76867d", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c915e2634718dbc8a4a15c61b0e62e7a44e14448", + "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448", "shasum": "" }, "require": { @@ -1891,7 +1544,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.4.0" + "source": "https://github.com/Seldaek/monolog/tree/3.5.0" }, "funding": [ { @@ -1903,7 +1556,74 @@ "type": "tidelift" } ], - "time": "2023-06-21T08:46:11+00:00" + "time": "2023-10-27T15:32:31+00:00" + }, + { + "name": "promphp/prometheus_client_php", + "version": "v2.7.2", + "source": { + "type": "git", + "url": "https://github.com/PromPHP/prometheus_client_php.git", + "reference": "735ace7ec6f5ff66d73b91baf8f6d36cbe3f8b76" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PromPHP/prometheus_client_php/zipball/735ace7ec6f5ff66d73b91baf8f6d36cbe3f8b76", + "reference": "735ace7ec6f5ff66d73b91baf8f6d36cbe3f8b76", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.2|^8.0" + }, + "replace": { + "endclothing/prometheus_client_php": "*", + "jimdo/prometheus_client_php": "*", + "lkaemmerling/prometheus_client_php": "*" + }, + "require-dev": { + "guzzlehttp/guzzle": "^6.3|^7.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5.4", + "phpstan/phpstan-phpunit": "^1.1.0", + "phpstan/phpstan-strict-rules": "^1.1.0", + "phpunit/phpunit": "^9.4", + "squizlabs/php_codesniffer": "^3.6", + "symfony/polyfill-apcu": "^1.6" + }, + "suggest": { + "ext-apc": "Required if using APCu.", + "ext-redis": "Required if using Redis.", + "promphp/prometheus_push_gateway_php": "An easy client for using Prometheus PushGateway.", + "symfony/polyfill-apcu": "Required if you use APCu on PHP8.0+" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Prometheus\\": "src/Prometheus/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Lukas Kämmerling", + "email": "kontakt@lukas-kaemmerling.de" + } + ], + "description": "Prometheus instrumentation library for PHP applications.", + "support": { + "issues": "https://github.com/PromPHP/prometheus_client_php/issues", + "source": "https://github.com/PromPHP/prometheus_client_php/tree/v2.7.2" + }, + "time": "2023-11-06T12:38:23+00:00" }, { "name": "psr/cache", @@ -2105,59 +1825,6 @@ }, "time": "2019-01-08T18:20:26+00:00" }, - { - "name": "psr/http-message", - "version": "1.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/1.1" - }, - "time": "2023-04-04T09:50:52+00:00" - }, { "name": "psr/log", "version": "3.0.0", @@ -2208,50 +1875,6 @@ }, "time": "2021-07-14T16:46:02+00:00" }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, { "name": "ramsey/collection", "version": "2.0.0", @@ -2343,16 +1966,16 @@ }, { "name": "ramsey/uuid", - "version": "4.7.4", + "version": "4.7.5", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "60a4c63ab724854332900504274f6150ff26d286" + "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/60a4c63ab724854332900504274f6150ff26d286", - "reference": "60a4c63ab724854332900504274f6150ff26d286", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", + "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", "shasum": "" }, "require": { @@ -2419,7 +2042,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.4" + "source": "https://github.com/ramsey/uuid/tree/4.7.5" }, "funding": [ { @@ -2431,27 +2054,27 @@ "type": "tidelift" } ], - "time": "2023-04-15T23:01:58+00:00" + "time": "2023-11-08T05:53:05+00:00" }, { "name": "react/promise", - "version": "v2.10.0", + "version": "v2.11.0", "source": { "type": "git", "url": "https://github.com/reactphp/promise.git", - "reference": "f913fb8cceba1e6644b7b90c4bfb678ed8a3ef38" + "reference": "1a8460931ea36dc5c76838fec5734d55c88c6831" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/f913fb8cceba1e6644b7b90c4bfb678ed8a3ef38", - "reference": "f913fb8cceba1e6644b7b90c4bfb678ed8a3ef38", + "url": "https://api.github.com/repos/reactphp/promise/zipball/1a8460931ea36dc5c76838fec5734d55c88c6831", + "reference": "1a8460931ea36dc5c76838fec5734d55c88c6831", "shasum": "" }, "require": { "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.36" + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" }, "type": "library", "autoload": { @@ -2495,7 +2118,7 @@ ], "support": { "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v2.10.0" + "source": "https://github.com/reactphp/promise/tree/v2.11.0" }, "funding": [ { @@ -2503,20 +2126,20 @@ "type": "open_collective" } ], - "time": "2023-05-02T15:15:43+00:00" + "time": "2023-11-16T16:16:50+00:00" }, { "name": "symfony/cache", - "version": "v6.3.4", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "e60d00b4f633efa4c1ef54e77c12762d9073e7b3" + "reference": "ac2d25f97b17eec6e19760b6b9962a4f7c44356a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/e60d00b4f633efa4c1ef54e77c12762d9073e7b3", - "reference": "e60d00b4f633efa4c1ef54e77c12762d9073e7b3", + "url": "https://api.github.com/repos/symfony/cache/zipball/ac2d25f97b17eec6e19760b6b9962a4f7c44356a", + "reference": "ac2d25f97b17eec6e19760b6b9962a4f7c44356a", "shasum": "" }, "require": { @@ -2525,7 +2148,7 @@ "psr/log": "^1.1|^2|^3", "symfony/cache-contracts": "^2.5|^3", "symfony/service-contracts": "^2.5|^3", - "symfony/var-exporter": "^6.2.10" + "symfony/var-exporter": "^6.3.6|^7.0" }, "conflict": { "doctrine/dbal": "<2.13.1", @@ -2540,15 +2163,15 @@ }, "require-dev": { "cache/integration-tests": "dev-master", - "doctrine/dbal": "^2.13.1|^3.0", + "doctrine/dbal": "^2.13.1|^3|^4", "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0|^3.0", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/filesystem": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/messenger": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -2583,7 +2206,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.3.4" + "source": "https://github.com/symfony/cache/tree/v6.4.0" }, "funding": [ { @@ -2599,20 +2222,20 @@ "type": "tidelift" } ], - "time": "2023-08-05T09:10:27+00:00" + "time": "2023-11-24T19:28:07+00:00" }, { "name": "symfony/cache-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "ad945640ccc0ae6e208bcea7d7de4b39b569896b" + "reference": "1d74b127da04ffa87aa940abe15446fa89653778" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/ad945640ccc0ae6e208bcea7d7de4b39b569896b", - "reference": "ad945640ccc0ae6e208bcea7d7de4b39b569896b", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/1d74b127da04ffa87aa940abe15446fa89653778", + "reference": "1d74b127da04ffa87aa940abe15446fa89653778", "shasum": "" }, "require": { @@ -2659,7 +2282,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.4.0" }, "funding": [ { @@ -2675,25 +2298,26 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2023-09-25T12:52:38+00:00" }, { "name": "symfony/clock", - "version": "v6.3.4", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", - "reference": "a74086d3db70d0f06ffd84480daa556248706e98" + "reference": "c696b075befdd4bcffe5ef2eab9a32a1a9c0d29d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/a74086d3db70d0f06ffd84480daa556248706e98", - "reference": "a74086d3db70d0f06ffd84480daa556248706e98", + "url": "https://api.github.com/repos/symfony/clock/zipball/c696b075befdd4bcffe5ef2eab9a32a1a9c0d29d", + "reference": "c696b075befdd4bcffe5ef2eab9a32a1a9c0d29d", "shasum": "" }, "require": { - "php": ">=8.1", - "psr/clock": "^1.0" + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" }, "provide": { "psr/clock-implementation": "1.0" @@ -2732,7 +2356,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/v6.3.4" + "source": "https://github.com/symfony/clock/tree/v7.0.0" }, "funding": [ { @@ -2748,26 +2372,26 @@ "type": "tidelift" } ], - "time": "2023-07-31T11:35:03+00:00" + "time": "2023-11-25T20:15:12+00:00" }, { "name": "symfony/config", - "version": "v6.3.2", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "b47ca238b03e7b0d7880ffd1cf06e8d637ca1467" + "reference": "5d33e0fb707d603330e0edfd4691803a1253572e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/b47ca238b03e7b0d7880ffd1cf06e8d637ca1467", - "reference": "b47ca238b03e7b0d7880ffd1cf06e8d637ca1467", + "url": "https://api.github.com/repos/symfony/config/zipball/5d33e0fb707d603330e0edfd4691803a1253572e", + "reference": "5d33e0fb707d603330e0edfd4691803a1253572e", "shasum": "" }, "require": { "php": ">=8.1", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/filesystem": "^5.4|^6.0", + "symfony/filesystem": "^5.4|^6.0|^7.0", "symfony/polyfill-ctype": "~1.8" }, "conflict": { @@ -2775,11 +2399,11 @@ "symfony/service-contracts": "<2.5" }, "require-dev": { - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/messenger": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0" + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -2807,7 +2431,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/v6.3.2" + "source": "https://github.com/symfony/config/tree/v6.4.0" }, "funding": [ { @@ -2823,20 +2447,20 @@ "type": "tidelift" } ], - "time": "2023-07-19T20:22:16+00:00" + "time": "2023-11-09T08:28:32+00:00" }, { "name": "symfony/console", - "version": "v6.3.4", + "version": "v6.4.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6" + "reference": "a550a7c99daeedef3f9d23fb82e3531525ff11fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6", - "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6", + "url": "https://api.github.com/repos/symfony/console/zipball/a550a7c99daeedef3f9d23fb82e3531525ff11fd", + "reference": "a550a7c99daeedef3f9d23fb82e3531525ff11fd", "shasum": "" }, "require": { @@ -2844,7 +2468,7 @@ "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0" + "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { "symfony/dependency-injection": "<5.4", @@ -2858,12 +2482,16 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" + "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": { @@ -2897,7 +2525,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.3.4" + "source": "https://github.com/symfony/console/tree/v6.4.1" }, "funding": [ { @@ -2913,20 +2541,20 @@ "type": "tidelift" } ], - "time": "2023-08-16T10:10:12+00:00" + "time": "2023-11-30T10:54:28+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.3.4", + "version": "v6.4.1", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "68a5a9570806a087982f383f6109c5e925892a49" + "reference": "f88ff6428afbeb17cc648c8003bd608534750baf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/68a5a9570806a087982f383f6109c5e925892a49", - "reference": "68a5a9570806a087982f383f6109c5e925892a49", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/f88ff6428afbeb17cc648c8003bd608534750baf", + "reference": "f88ff6428afbeb17cc648c8003bd608534750baf", "shasum": "" }, "require": { @@ -2934,7 +2562,7 @@ "psr/container": "^1.1|^2.0", "symfony/deprecation-contracts": "^2.5|^3", "symfony/service-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.2.10" + "symfony/var-exporter": "^6.2.10|^7.0" }, "conflict": { "ext-psr": "<1.1|>=2", @@ -2948,9 +2576,9 @@ "symfony/service-implementation": "1.1|2.0|3.0" }, "require-dev": { - "symfony/config": "^6.1", - "symfony/expression-language": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" + "symfony/config": "^6.1|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -2978,7 +2606,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/v6.3.4" + "source": "https://github.com/symfony/dependency-injection/tree/v6.4.1" }, "funding": [ { @@ -2994,11 +2622,11 @@ "type": "tidelift" } ], - "time": "2023-08-16T17:55:17+00:00" + "time": "2023-12-01T14:56:37+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", @@ -3045,7 +2673,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" }, "funding": [ { @@ -3065,16 +2693,16 @@ }, { "name": "symfony/dotenv", - "version": "v6.3.0", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "ceadb434fe2a6763a03d2d110441745834f3dd1e" + "reference": "d0d584a91422ddaa2c94317200d4c4e5b935555f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/ceadb434fe2a6763a03d2d110441745834f3dd1e", - "reference": "ceadb434fe2a6763a03d2d110441745834f3dd1e", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/d0d584a91422ddaa2c94317200d4c4e5b935555f", + "reference": "d0d584a91422ddaa2c94317200d4c4e5b935555f", "shasum": "" }, "require": { @@ -3085,8 +2713,8 @@ "symfony/process": "<5.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0" + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -3119,7 +2747,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v6.3.0" + "source": "https://github.com/symfony/dotenv/tree/v6.4.0" }, "funding": [ { @@ -3135,34 +2763,35 @@ "type": "tidelift" } ], - "time": "2023-04-21T14:41:17+00:00" + "time": "2023-10-26T18:19:48+00:00" }, { "name": "symfony/error-handler", - "version": "v6.3.2", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a" + "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/85fd65ed295c4078367c784e8a5a6cee30348b7a", - "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c873490a1c97b3a0a4838afc36ff36c112d02788", + "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "conflict": { - "symfony/deprecation-contracts": "<2.5" + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" }, "require-dev": { "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^5.4|^6.0|^7.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -3193,7 +2822,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/v6.3.2" + "source": "https://github.com/symfony/error-handler/tree/v6.4.0" }, "funding": [ { @@ -3209,20 +2838,20 @@ "type": "tidelift" } ], - "time": "2023-07-16T17:05:46+00:00" + "time": "2023-10-18T09:43:34+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.3.2", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" + "reference": "d76d2632cfc2206eecb5ad2b26cd5934082941b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d76d2632cfc2206eecb5ad2b26cd5934082941b6", + "reference": "d76d2632cfc2206eecb5ad2b26cd5934082941b6", "shasum": "" }, "require": { @@ -3239,13 +2868,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0" + "symfony/stopwatch": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -3273,7 +2902,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/v6.3.2" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.0" }, "funding": [ { @@ -3289,11 +2918,11 @@ "type": "tidelift" } ], - "time": "2023-07-06T06:56:43+00:00" + "time": "2023-07-27T06:52:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", @@ -3349,7 +2978,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0" }, "funding": [ { @@ -3369,20 +2998,20 @@ }, { "name": "symfony/filesystem", - "version": "v6.3.1", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" + "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", - "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/7da8ea2362a283771478c5f7729cfcb43a76b8b7", + "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, @@ -3412,7 +3041,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.3.1" + "source": "https://github.com/symfony/filesystem/tree/v7.0.0" }, "funding": [ { @@ -3428,27 +3057,27 @@ "type": "tidelift" } ], - "time": "2023-06-01T08:30:39+00:00" + "time": "2023-07-27T06:33:22+00:00" }, { "name": "symfony/finder", - "version": "v6.3.3", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e" + "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/9915db259f67d21eefee768c1abcf1cc61b1fc9e", - "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e", + "url": "https://api.github.com/repos/symfony/finder/zipball/6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", + "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.0" + "symfony/filesystem": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -3476,7 +3105,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.3.3" + "source": "https://github.com/symfony/finder/tree/v7.0.0" }, "funding": [ { @@ -3492,38 +3121,38 @@ "type": "tidelift" } ], - "time": "2023-07-31T08:31:44+00:00" + "time": "2023-10-31T17:59:56+00:00" }, { "name": "symfony/framework-bundle", - "version": "v6.3.4", + "version": "v6.4.1", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "f822f54ff05cd88878910b4559f66c12176d952c" + "reference": "ac22d760bf9ff4440a1b6c7caef34d38b44290aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/f822f54ff05cd88878910b4559f66c12176d952c", - "reference": "f822f54ff05cd88878910b4559f66c12176d952c", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/ac22d760bf9ff4440a1b6c7caef34d38b44290aa", + "reference": "ac22d760bf9ff4440a1b6c7caef34d38b44290aa", "shasum": "" }, "require": { "composer-runtime-api": ">=2.1", "ext-xml": "*", "php": ">=8.1", - "symfony/cache": "^5.4|^6.0", - "symfony/config": "^6.1", - "symfony/dependency-injection": "^6.3.1", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/config": "^6.1|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.1", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/filesystem": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/http-foundation": "^6.3", - "symfony/http-kernel": "^6.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": "^5.4|^6.0" + "symfony/routing": "^6.4|^7.0" }, "conflict": { "doctrine/annotations": "<1.13.1", @@ -3531,67 +3160,71 @@ "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", - "symfony/dom-crawler": "<6.3", + "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.2", + "symfony/mime": "<6.4", "symfony/property-access": "<5.4", "symfony/property-info": "<5.4", + "symfony/scheduler": "<6.4", "symfony/security-core": "<5.4", "symfony/security-csrf": "<5.4", - "symfony/serializer": "<6.3", + "symfony/serializer": "<6.4", "symfony/stopwatch": "<5.4", - "symfony/translation": "<6.2.8", + "symfony/translation": "<6.4", "symfony/twig-bridge": "<5.4", "symfony/twig-bundle": "<5.4", - "symfony/validator": "<6.3", - "symfony/web-profiler-bundle": "<5.4", - "symfony/workflow": "<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", - "symfony/asset": "^5.4|^6.0", - "symfony/asset-mapper": "^6.3", - "symfony/browser-kit": "^5.4|^6.0", - "symfony/clock": "^6.2", - "symfony/console": "^5.4.9|^6.0.9", - "symfony/css-selector": "^5.4|^6.0", - "symfony/dom-crawler": "^6.3", - "symfony/dotenv": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/form": "^5.4|^6.0", - "symfony/html-sanitizer": "^6.1", - "symfony/http-client": "^6.3", - "symfony/lock": "^5.4|^6.0", - "symfony/mailer": "^5.4|^6.0", - "symfony/messenger": "^6.3", - "symfony/mime": "^6.2", - "symfony/notifier": "^5.4|^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|^7.0", + "symfony/notifier": "^5.4|^6.0|^7.0", "symfony/polyfill-intl-icu": "~1.0", - "symfony/process": "^5.4|^6.0", - "symfony/property-info": "^5.4|^6.0", - "symfony/rate-limiter": "^5.4|^6.0", - "symfony/scheduler": "^6.3", - "symfony/security-bundle": "^5.4|^6.0", - "symfony/semaphore": "^5.4|^6.0", - "symfony/serializer": "^6.3", - "symfony/stopwatch": "^5.4|^6.0", - "symfony/string": "^5.4|^6.0", - "symfony/translation": "^6.2.8", - "symfony/twig-bundle": "^5.4|^6.0", - "symfony/uid": "^5.4|^6.0", - "symfony/validator": "^6.3", - "symfony/web-link": "^5.4|^6.0", - "symfony/workflow": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.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|^7.0", + "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" }, "type": "symfony-bundle", @@ -3620,7 +3253,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.3.4" + "source": "https://github.com/symfony/framework-bundle/tree/v6.4.1" }, "funding": [ { @@ -3636,40 +3269,40 @@ "type": "tidelift" } ], - "time": "2023-08-16T18:04:38+00:00" + "time": "2023-12-01T16:35:22+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.3.4", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "cac1556fdfdf6719668181974104e6fcfa60e844" + "reference": "47d72323200934694def5d57083899d774a2b110" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/cac1556fdfdf6719668181974104e6fcfa60e844", - "reference": "cac1556fdfdf6719668181974104e6fcfa60e844", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/47d72323200934694def5d57083899d774a2b110", + "reference": "47d72323200934694def5d57083899d774a2b110", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.1", "symfony/polyfill-php83": "^1.27" }, "conflict": { - "symfony/cache": "<6.2" + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4" }, "require-dev": { - "doctrine/dbal": "^2.13.1|^3.0", + "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", - "symfony/mime": "^5.4|^6.0", - "symfony/rate-limiter": "^5.2|^6.0" + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -3697,7 +3330,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.3.4" + "source": "https://github.com/symfony/http-foundation/tree/v7.0.0" }, "funding": [ { @@ -3713,29 +3346,29 @@ "type": "tidelift" } ], - "time": "2023-08-22T08:20:46+00:00" + "time": "2023-11-07T15:10:37+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.3.4", + "version": "v6.4.1", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb" + "reference": "2953274c16a229b3933ef73a6898e18388e12e1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb", - "reference": "36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/2953274c16a229b3933ef73a6898e18388e12e1b", + "reference": "2953274c16a229b3933ef73a6898e18388e12e1b", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.3", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/http-foundation": "^6.3.4", + "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": { @@ -3743,7 +3376,7 @@ "symfony/cache": "<5.4", "symfony/config": "<6.1", "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.3.4", + "symfony/dependency-injection": "<6.4", "symfony/doctrine-bridge": "<5.4", "symfony/form": "<5.4", "symfony/http-client": "<5.4", @@ -3753,7 +3386,7 @@ "symfony/translation": "<5.4", "symfony/translation-contracts": "<2.5", "symfony/twig-bridge": "<5.4", - "symfony/validator": "<5.4", + "symfony/validator": "<6.4", "symfony/var-dumper": "<6.3", "twig/twig": "<2.13" }, @@ -3762,26 +3395,26 @@ }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0", - "symfony/clock": "^6.2", - "symfony/config": "^6.1", - "symfony/console": "^5.4|^6.0", - "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^6.3.4", - "symfony/dom-crawler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.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|^7.0", + "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", - "symfony/property-access": "^5.4.5|^6.0.5", - "symfony/routing": "^5.4|^6.0", - "symfony/serializer": "^6.3", - "symfony/stopwatch": "^5.4|^6.0", - "symfony/translation": "^5.4|^6.0", + "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.3|^7.0", + "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", - "symfony/validator": "^6.3", - "symfony/var-exporter": "^6.2", + "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-exporter": "^6.2|^7.0", "twig/twig": "^2.13|^3.0.4" }, "type": "library", @@ -3810,7 +3443,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.3.4" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.1" }, "funding": [ { @@ -3826,28 +3459,30 @@ "type": "tidelift" } ], - "time": "2023-08-26T13:54:49+00:00" + "time": "2023-12-01T17:02:02+00:00" }, { "name": "symfony/messenger", - "version": "v6.3.4", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/messenger.git", - "reference": "bf460982736a4b99d11a3a90005ef438c3780df7" + "reference": "a6f32d0e9b9c7d2d47c7bea3cd1e8a9c0f781fb4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/messenger/zipball/bf460982736a4b99d11a3a90005ef438c3780df7", - "reference": "bf460982736a4b99d11a3a90005ef438c3780df7", + "url": "https://api.github.com/repos/symfony/messenger/zipball/a6f32d0e9b9c7d2d47c7bea3cd1e8a9c0f781fb4", + "reference": "a6f32d0e9b9c7d2d47c7bea3cd1e8a9c0f781fb4", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/clock": "^6.3" + "symfony/clock": "^6.3|^7.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { + "symfony/console": "<6.3", "symfony/event-dispatcher": "<5.4", "symfony/event-dispatcher-contracts": "<2.5", "symfony/framework-bundle": "<5.4", @@ -3856,19 +3491,18 @@ }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/rate-limiter": "^5.4|^6.0", - "symfony/routing": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0", + "symfony/console": "^6.3|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/rate-limiter": "^5.4|^6.0|^7.0", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/serializer": "^5.4|^6.0|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0", - "symfony/validator": "^5.4|^6.0" + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/validator": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -3896,7 +3530,7 @@ "description": "Helps applications send and receive messages to/from other applications or via message queues", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/messenger/tree/v6.3.4" + "source": "https://github.com/symfony/messenger/tree/v6.4.0" }, "funding": [ { @@ -3912,84 +3546,7 @@ "type": "tidelift" } ], - "time": "2023-08-14T14:06:04+00:00" - }, - { - "name": "symfony/polyfill-apcu", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-apcu.git", - "reference": "c6c2c0f5f4cb0b100c5dfea807ef5cd27bbe9899" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/c6c2c0f5f4cb0b100c5dfea807ef5cd27bbe9899", - "reference": "c6c2c0f5f4cb0b100c5dfea807ef5cd27bbe9899", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Apcu\\": "" - } - }, - "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 apcu_* functions to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "apcu", - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-apcu/tree/v1.28.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": "2023-01-26T09:26:14+00:00" + "time": "2023-11-24T19:28:07+00:00" }, { "name": "symfony/polyfill-ctype", @@ -4154,93 +3711,6 @@ ], "time": "2023-01-26T09:26:14+00:00" }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.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": "2023-01-26T09:30:37+00:00" - }, { "name": "symfony/polyfill-intl-normalizer", "version": "v1.28.0", @@ -4649,36 +4119,34 @@ }, { "name": "symfony/routing", - "version": "v6.3.3", + "version": "v7.0.1", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a" + "reference": "fc55062907669835af6408558ae4d1dafef74b1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/e7243039ab663822ff134fbc46099b5fdfa16f6a", - "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a", + "url": "https://api.github.com/repos/symfony/routing/zipball/fc55062907669835af6408558ae4d1dafef74b1e", + "reference": "fc55062907669835af6408558ae4d1dafef74b1e", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { - "doctrine/annotations": "<1.12", - "symfony/config": "<6.2", - "symfony/dependency-injection": "<5.4", - "symfony/yaml": "<5.4" + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "symfony/config": "^6.2", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4712,7 +4180,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.3.3" + "source": "https://github.com/symfony/routing/tree/v7.0.1" }, "funding": [ { @@ -4728,20 +4196,20 @@ "type": "tidelift" } ], - "time": "2023-07-31T07:08:24+00:00" + "time": "2023-12-01T15:10:06+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" + "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b3313c2dbffaf71c8de2934e2ea56ed2291a3838", + "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838", "shasum": "" }, "require": { @@ -4794,7 +4262,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.0" }, "funding": [ { @@ -4810,24 +4278,24 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2023-07-30T20:28:31+00:00" }, { "name": "symfony/string", - "version": "v6.3.2", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "53d1a83225002635bca3482fcbf963001313fb68" + "reference": "92bd2bfbba476d4a1838e5e12168bef2fd1e6620" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/53d1a83225002635bca3482fcbf963001313fb68", - "reference": "53d1a83225002635bca3482fcbf963001313fb68", + "url": "https://api.github.com/repos/symfony/string/zipball/92bd2bfbba476d4a1838e5e12168bef2fd1e6620", + "reference": "92bd2bfbba476d4a1838e5e12168bef2fd1e6620", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -4837,11 +4305,11 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/intl": "^6.2", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0" + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4880,7 +4348,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.3.2" + "source": "https://github.com/symfony/string/tree/v7.0.0" }, "funding": [ { @@ -4896,20 +4364,20 @@ "type": "tidelift" } ], - "time": "2023-07-05T08:41:27+00:00" + "time": "2023-11-29T08:40:23+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86" + "reference": "dee0c6e5b4c07ce851b462530088e64b255ac9c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/02c24deb352fb0d79db5486c0c79905a85e37e86", - "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/dee0c6e5b4c07ce851b462530088e64b255ac9c5", + "reference": "dee0c6e5b4c07ce851b462530088e64b255ac9c5", "shasum": "" }, "require": { @@ -4958,7 +4426,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.4.0" }, "funding": [ { @@ -4974,24 +4442,25 @@ "type": "tidelift" } ], - "time": "2023-05-30T17:17:10+00:00" + "time": "2023-07-25T15:08:44+00:00" }, { "name": "symfony/twig-bridge", - "version": "v6.3.2", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "6f8435db76a2d79917489a19a82679276c1b4e32" + "reference": "142bc3ad4a61d7eedf7cc21d8ef2bd8a8e7417bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/6f8435db76a2d79917489a19a82679276c1b4e32", - "reference": "6f8435db76a2d79917489a19a82679276c1b4e32", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/142bc3ad4a61d7eedf7cc21d8ef2bd8a8e7417bf", + "reference": "142bc3ad4a61d7eedf7cc21d8ef2bd8a8e7417bf", "shasum": "" }, "require": { "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/translation-contracts": "^2.5|^3", "twig/twig": "^2.13|^3.0.4" }, @@ -5001,41 +4470,41 @@ "symfony/console": "<5.4", "symfony/form": "<6.3", "symfony/http-foundation": "<5.4", - "symfony/http-kernel": "<6.2", + "symfony/http-kernel": "<6.4", "symfony/mime": "<6.2", + "symfony/serializer": "<6.4", "symfony/translation": "<5.4", "symfony/workflow": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.12|^2", "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", - "symfony/asset-mapper": "^6.3", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/form": "^6.3", - "symfony/html-sanitizer": "^6.1", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/http-kernel": "^6.2", - "symfony/intl": "^5.4|^6.0", - "symfony/mime": "^6.2", + "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|^7.0", + "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", - "symfony/routing": "^5.4|^6.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", - "symfony/security-csrf": "^5.4|^6.0", - "symfony/security-http": "^5.4|^6.0", - "symfony/serializer": "^6.2", - "symfony/stopwatch": "^5.4|^6.0", - "symfony/translation": "^6.1", - "symfony/web-link": "^5.4|^6.0", - "symfony/workflow": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.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|^7.0", + "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" @@ -5066,7 +4535,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v6.3.2" + "source": "https://github.com/symfony/twig-bridge/tree/v6.4.0" }, "funding": [ { @@ -5082,30 +4551,30 @@ "type": "tidelift" } ], - "time": "2023-07-20T16:42:33+00:00" + "time": "2023-11-25T08:25:13+00:00" }, { "name": "symfony/twig-bundle", - "version": "v6.3.0", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "d0cd4d1675c0582d27c2e8bb0dc27c0303d8e3ea" + "reference": "35d84393e598dfb774e6a2bf49e5229a8a6dbe4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/d0cd4d1675c0582d27c2e8bb0dc27c0303d8e3ea", - "reference": "d0cd4d1675c0582d27c2e8bb0dc27c0303d8e3ea", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/35d84393e598dfb774e6a2bf49e5229a8a6dbe4c", + "reference": "35d84393e598dfb774e6a2bf49e5229a8a6dbe4c", "shasum": "" }, "require": { "composer-runtime-api": ">=2.1", "php": ">=8.1", - "symfony/config": "^6.1", - "symfony/dependency-injection": "^6.1", - "symfony/http-foundation": "^5.4|^6.0", + "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.3", + "symfony/twig-bridge": "^6.4", "twig/twig": "^2.13|^3.0.4" }, "conflict": { @@ -5113,17 +4582,16 @@ "symfony/translation": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.10.4|^2", - "symfony/asset": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/form": "^5.4|^6.0", - "symfony/framework-bundle": "^5.4|^6.0", - "symfony/routing": "^5.4|^6.0", - "symfony/stopwatch": "^5.4|^6.0", - "symfony/translation": "^5.4|^6.0", - "symfony/web-link": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" + "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": { @@ -5151,7 +4619,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.3.0" + "source": "https://github.com/symfony/twig-bundle/tree/v6.4.0" }, "funding": [ { @@ -5167,20 +4635,20 @@ "type": "tidelift" } ], - "time": "2023-05-06T09:53:41+00:00" + "time": "2023-11-07T14:57:07+00:00" }, { "name": "symfony/validator", - "version": "v6.3.4", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "0c8435154920b9bbe93bece675234c244cadf73b" + "reference": "33e1f3bb76ef70e3170e12f878aefb9c69b0fc4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/0c8435154920b9bbe93bece675234c244cadf73b", - "reference": "0c8435154920b9bbe93bece675234c244cadf73b", + "url": "https://api.github.com/repos/symfony/validator/zipball/33e1f3bb76ef70e3170e12f878aefb9c69b0fc4c", + "reference": "33e1f3bb76ef70e3170e12f878aefb9c69b0fc4c", "shasum": "" }, "require": { @@ -5205,21 +4673,21 @@ "require-dev": { "doctrine/annotations": "^1.13|^2", "egulias/email-validator": "^2.1.10|^3|^4", - "symfony/cache": "^5.4|^6.0", - "symfony/config": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/intl": "^5.4|^6.0", - "symfony/mime": "^5.4|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/property-info": "^5.4|^6.0", - "symfony/translation": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" + "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|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -5247,7 +4715,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.3.4" + "source": "https://github.com/symfony/validator/tree/v6.4.0" }, "funding": [ { @@ -5263,37 +4731,36 @@ "type": "tidelift" } ], - "time": "2023-08-17T15:49:05+00:00" + "time": "2023-11-29T07:47:42+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.3.4", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45" + "reference": "cf0220fc7607476fd0d001ab3ed9e830d1fdda56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2027be14f8ae8eae999ceadebcda5b4909b81d45", - "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cf0220fc7607476fd0d001ab3ed9e830d1fdda56", + "reference": "cf0220fc7607476fd0d001ab3ed9e830d1fdda56", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/uid": "^5.4|^6.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.0.4" }, "bin": [ "Resources/bin/var-dump-server" @@ -5331,7 +4798,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.3.4" + "source": "https://github.com/symfony/var-dumper/tree/v7.0.0" }, "funding": [ { @@ -5347,27 +4814,27 @@ "type": "tidelift" } ], - "time": "2023-08-24T14:51:05+00:00" + "time": "2023-11-27T12:39:18+00:00" }, { "name": "symfony/var-exporter", - "version": "v6.3.4", + "version": "v7.0.1", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "df1f8aac5751871b83d30bf3e2c355770f8f0691" + "reference": "a3d7c877414fcd59ab7075ecdc3b8f9c00f7bcc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/df1f8aac5751871b83d30bf3e2c355770f8f0691", - "reference": "df1f8aac5751871b83d30bf3e2c355770f8f0691", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/a3d7c877414fcd59ab7075ecdc3b8f9c00f7bcc3", + "reference": "a3d7c877414fcd59ab7075ecdc3b8f9c00f7bcc3", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "symfony/var-dumper": "^5.4|^6.0" + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -5405,7 +4872,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.3.4" + "source": "https://github.com/symfony/var-exporter/tree/v7.0.1" }, "funding": [ { @@ -5421,20 +4888,20 @@ "type": "tidelift" } ], - "time": "2023-08-16T18:14:47+00:00" + "time": "2023-11-30T11:38:21+00:00" }, { "name": "symfony/yaml", - "version": "v6.3.3", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add" + "reference": "4f9237a1bb42455d609e6687d2613dde5b41a587" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/e23292e8c07c85b971b44c1c4b87af52133e2add", - "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add", + "url": "https://api.github.com/repos/symfony/yaml/zipball/4f9237a1bb42455d609e6687d2613dde5b41a587", + "reference": "4f9237a1bb42455d609e6687d2613dde5b41a587", "shasum": "" }, "require": { @@ -5446,7 +4913,7 @@ "symfony/console": "<5.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0" + "symfony/console": "^5.4|^6.0|^7.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -5477,7 +4944,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.3.3" + "source": "https://github.com/symfony/yaml/tree/v6.4.0" }, "funding": [ { @@ -5493,30 +4960,31 @@ "type": "tidelift" } ], - "time": "2023-07-31T07:08:24+00:00" + "time": "2023-11-06T11:00:25+00:00" }, { "name": "twig/twig", - "version": "v3.7.1", + "version": "v3.8.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "a0ce373a0ca3bf6c64b9e3e2124aca502ba39554" + "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/a0ce373a0ca3bf6c64b9e3e2124aca502ba39554", - "reference": "a0ce373a0ca3bf6c64b9e3e2124aca502ba39554", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/9d15f0ac07f44dc4217883ec6ae02fd555c6f71d", + "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-mbstring": "^1.3" + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php80": "^1.22" }, "require-dev": { "psr/container": "^1.0|^2.0", - "symfony/phpunit-bridge": "^5.4.9|^6.3" + "symfony/phpunit-bridge": "^5.4.9|^6.3|^7.0" }, "type": "library", "autoload": { @@ -5552,7 +5020,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.7.1" + "source": "https://github.com/twigphp/Twig/tree/v3.8.0" }, "funding": [ { @@ -5564,7 +5032,7 @@ "type": "tidelift" } ], - "time": "2023-08-28T11:09:02+00:00" + "time": "2023-11-21T18:54:41+00:00" } ], "packages-dev": [ @@ -6064,16 +5532,16 @@ }, { "name": "codelytv/coding-style", - "version": "1.1.2", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/CodelyTV/php-coding_style-codely.git", - "reference": "2e00fde930bb1a51d6e7494bfc3a44cb60196fff" + "reference": "ffd9d00d85360350ffc07a81bc9e25abf75a59f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CodelyTV/php-coding_style-codely/zipball/2e00fde930bb1a51d6e7494bfc3a44cb60196fff", - "reference": "2e00fde930bb1a51d6e7494bfc3a44cb60196fff", + "url": "https://api.github.com/repos/CodelyTV/php-coding_style-codely/zipball/ffd9d00d85360350ffc07a81bc9e25abf75a59f6", + "reference": "ffd9d00d85360350ffc07a81bc9e25abf75a59f6", "shasum": "" }, "require": { @@ -6102,7 +5570,7 @@ ], "support": { "issues": "https://github.com/CodelyTV/php-coding_style-codely/issues", - "source": "https://github.com/CodelyTV/php-coding_style-codely/tree/1.1.2" + "source": "https://github.com/CodelyTV/php-coding_style-codely/tree/1.2.0" }, "funding": [ { @@ -6110,7 +5578,7 @@ "type": "custom" } ], - "time": "2023-10-23T11:29:20+00:00" + "time": "2023-10-24T09:12:06+00:00" }, { "name": "composer/package-versions-deprecated", @@ -6187,16 +5655,16 @@ }, { "name": "composer/pcre", - "version": "3.1.0", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" + "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "url": "https://api.github.com/repos/composer/pcre/zipball/00104306927c7a0919b4ced2aaa6782c1e61a3c9", + "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9", "shasum": "" }, "require": { @@ -6238,7 +5706,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.0" + "source": "https://github.com/composer/pcre/tree/3.1.1" }, "funding": [ { @@ -6254,7 +5722,7 @@ "type": "tidelift" } ], - "time": "2022-11-17T09:50:14+00:00" + "time": "2023-10-11T07:11:09+00:00" }, { "name": "composer/semver", @@ -7175,23 +6643,24 @@ }, { "name": "pdepend/pdepend", - "version": "2.15.1", + "version": "2.16.0", "source": { "type": "git", "url": "https://github.com/pdepend/pdepend.git", - "reference": "d12f25bcdfb7754bea458a4a5cb159d55e9950d0" + "reference": "8dfc0c46529e2073fa97986552f80646eedac562" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pdepend/pdepend/zipball/d12f25bcdfb7754bea458a4a5cb159d55e9950d0", - "reference": "d12f25bcdfb7754bea458a4a5cb159d55e9950d0", + "url": "https://api.github.com/repos/pdepend/pdepend/zipball/8dfc0c46529e2073fa97986552f80646eedac562", + "reference": "8dfc0c46529e2073fa97986552f80646eedac562", "shasum": "" }, "require": { "php": ">=5.3.7", - "symfony/config": "^2.3.0|^3|^4|^5|^6.0", - "symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0", - "symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0" + "symfony/config": "^2.3.0|^3|^4|^5|^6.0|^7.0", + "symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0|^7.0", + "symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0|^7.0", + "symfony/polyfill-mbstring": "^1.19" }, "require-dev": { "easy-doc/easy-doc": "0.0.0|^1.2.3", @@ -7226,7 +6695,7 @@ ], "support": { "issues": "https://github.com/pdepend/pdepend/issues", - "source": "https://github.com/pdepend/pdepend/tree/2.15.1" + "source": "https://github.com/pdepend/pdepend/tree/2.16.0" }, "funding": [ { @@ -7234,7 +6703,7 @@ "type": "tidelift" } ], - "time": "2023-09-28T12:00:56+00:00" + "time": "2023-11-29T08:52:35+00:00" }, { "name": "phar-io/manifest", @@ -7349,16 +6818,16 @@ }, { "name": "phpat/phpat", - "version": "0.10.10", + "version": "0.10.11", "source": { "type": "git", "url": "https://github.com/carlosas/phpat.git", - "reference": "80004c07ba5972c36758e942a95d11cc9c298e98" + "reference": "03a1c7082a67247a427ca060bb7a18e7c2158979" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/carlosas/phpat/zipball/80004c07ba5972c36758e942a95d11cc9c298e98", - "reference": "80004c07ba5972c36758e942a95d11cc9c298e98", + "url": "https://api.github.com/repos/carlosas/phpat/zipball/03a1c7082a67247a427ca060bb7a18e7c2158979", + "reference": "03a1c7082a67247a427ca060bb7a18e7c2158979", "shasum": "" }, "require": { @@ -7400,9 +6869,9 @@ "description": "PHP Architecture Tester", "support": { "issues": "https://github.com/carlosas/phpat/issues", - "source": "https://github.com/carlosas/phpat/tree/0.10.10" + "source": "https://github.com/carlosas/phpat/tree/0.10.11" }, - "time": "2023-10-05T14:16:47+00:00" + "time": "2023-11-24T18:14:30+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -7658,16 +7127,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.24.2", + "version": "1.24.4", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "bcad8d995980440892759db0c32acae7c8e79442" + "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bcad8d995980440892759db0c32acae7c8e79442", - "reference": "bcad8d995980440892759db0c32acae7c8e79442", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6bd0c26f3786cd9b7c359675cb789e35a8e07496", + "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496", "shasum": "" }, "require": { @@ -7699,22 +7168,22 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.2" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.4" }, - "time": "2023-09-26T12:28:12+00:00" + "time": "2023-11-26T18:29:22+00:00" }, { "name": "phpstan/phpstan", - "version": "1.10.37", + "version": "1.10.47", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "058ba07e92f744d4dcf6061ae75283d0c6456f2e" + "reference": "84dbb33b520ea28b6cf5676a3941f4bae1c1ff39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/058ba07e92f744d4dcf6061ae75283d0c6456f2e", - "reference": "058ba07e92f744d4dcf6061ae75283d0c6456f2e", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/84dbb33b520ea28b6cf5676a3941f4bae1c1ff39", + "reference": "84dbb33b520ea28b6cf5676a3941f4bae1c1ff39", "shasum": "" }, "require": { @@ -7763,7 +7232,7 @@ "type": "tidelift" } ], - "time": "2023-10-02T16:18:37+00:00" + "time": "2023-12-01T15:19:17+00:00" }, { "name": "phpunit/php-code-coverage", @@ -8086,16 +7555,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.13", + "version": "9.6.15", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be" + "reference": "05017b80304e0eb3f31d90194a563fd53a6021f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f3d767f7f9e191eab4189abe41ab37797e30b1be", - "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/05017b80304e0eb3f31d90194a563fd53a6021f1", + "reference": "05017b80304e0eb3f31d90194a563fd53a6021f1", "shasum": "" }, "require": { @@ -8169,7 +7638,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.13" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.15" }, "funding": [ { @@ -8185,7 +7654,7 @@ "type": "tidelift" } ], - "time": "2023-09-19T05:39:22+00:00" + "time": "2023-12-01T16:55:19+00:00" }, { "name": "psalm/plugin-mockery", @@ -8306,22 +7775,22 @@ }, { "name": "psalm/plugin-symfony", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/psalm/psalm-plugin-symfony.git", - "reference": "a6cef9c701686d17d4254b544d05345e9d3e0b88" + "reference": "f23ec3439743fb24f5c1101e52d032f23d5befa6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psalm/psalm-plugin-symfony/zipball/a6cef9c701686d17d4254b544d05345e9d3e0b88", - "reference": "a6cef9c701686d17d4254b544d05345e9d3e0b88", + "url": "https://api.github.com/repos/psalm/psalm-plugin-symfony/zipball/f23ec3439743fb24f5c1101e52d032f23d5befa6", + "reference": "f23ec3439743fb24f5c1101e52d032f23d5befa6", "shasum": "" }, "require": { "ext-simplexml": "*", "php": "^7.4 || ^8.0", - "symfony/framework-bundle": "^5.0 || ^6.0", + "symfony/framework-bundle": "^5.0 || ^6.0 || ^7.0", "vimeo/psalm": "^5.1" }, "require-dev": { @@ -8330,10 +7799,10 @@ "phpunit/phpunit": "~7.5 || ~9.5", "symfony/cache-contracts": "^1.0 || ^2.0", "symfony/console": "*", - "symfony/form": "^5.0 || ^6.0", - "symfony/messenger": "^5.0 || ^6.0", + "symfony/form": "^5.0 || ^6.0 || ^7.0", + "symfony/messenger": "^5.0 || ^6.0 || ^7.0", "symfony/security-guard": "*", - "symfony/serializer": "^5.0 || ^6.0", + "symfony/serializer": "^5.0 || ^6.0 || ^7.0", "symfony/validator": "*", "twig/twig": "^2.10 || ^3.0", "weirdan/codeception-psalm-module": "dev-master" @@ -8365,27 +7834,27 @@ "description": "Psalm Plugin for Symfony", "support": { "issues": "https://github.com/psalm/psalm-plugin-symfony/issues", - "source": "https://github.com/psalm/psalm-plugin-symfony/tree/v5.0.3" + "source": "https://github.com/psalm/psalm-plugin-symfony/tree/v5.1.0" }, - "time": "2023-04-21T15:40:12+00:00" + "time": "2023-11-12T10:04:27+00:00" }, { "name": "rector/rector", - "version": "0.18.4", + "version": "0.18.12", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "d99a91176b7eb7f2b6d509a6486b3661c6dfd370" + "reference": "ed8d5352a3faa69e4a5e315896abffd4bc29c828" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/d99a91176b7eb7f2b6d509a6486b3661c6dfd370", - "reference": "d99a91176b7eb7f2b6d509a6486b3661c6dfd370", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/ed8d5352a3faa69e4a5e315896abffd4bc29c828", + "reference": "ed8d5352a3faa69e4a5e315896abffd4bc29c828", "shasum": "" }, "require": { "php": "^7.2|^8.0", - "phpstan/phpstan": "^1.10.31" + "phpstan/phpstan": "^1.10.35" }, "conflict": { "rector/rector-doctrine": "*", @@ -8415,7 +7884,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/0.18.4" + "source": "https://github.com/rectorphp/rector/tree/0.18.12" }, "funding": [ { @@ -8423,7 +7892,7 @@ "type": "github" } ], - "time": "2023-09-25T17:07:54+00:00" + "time": "2023-12-04T08:47:30+00:00" }, { "name": "roave/security-advisories", @@ -8431,20 +7900,21 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "7818a0d2a1d8c7eb6dcd2d0bcdc7f1e3e3caafe3" + "reference": "b4728d9c4af8c60b059c1d7872759eedacccdb12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/7818a0d2a1d8c7eb6dcd2d0bcdc7f1e3e3caafe3", - "reference": "7818a0d2a1d8c7eb6dcd2d0bcdc7f1e3e3caafe3", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/b4728d9c4af8c60b059c1d7872759eedacccdb12", + "reference": "b4728d9c4af8c60b059c1d7872759eedacccdb12", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", - "admidio/admidio": "<4.2.11", + "admidio/admidio": "<4.2.13", "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", "aheinze/cockpit": "<2.2", "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", + "airesvsg/acf-to-rest-api": "<=3.1", "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", "alextselegidis/easyappointments": "<1.5", @@ -8473,16 +7943,17 @@ "azuracast/azuracast": "<0.18.3", "backdrop/backdrop": "<1.24.2", "backpack/crud": "<3.4.9", + "bacula-web/bacula-web": "<8.0.0.0-RC2-dev", "badaso/core": "<2.7", "bagisto/bagisto": "<0.1.5", "barrelstrength/sprout-base-email": "<1.2.7", "barrelstrength/sprout-forms": "<3.9", "barryvdh/laravel-translation-manager": "<0.6.2", "barzahlen/barzahlen-php": "<2.0.1", - "baserproject/basercms": "<4.7.5", + "baserproject/basercms": "<4.8", "bassjobsen/bootstrap-3-typeahead": ">4.0.2", "bigfork/silverstripe-form-capture": ">=3,<3.1.1", - "billz/raspap-webgui": "<=2.9.2", + "billz/raspap-webgui": "<2.9.5", "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3", "bmarshall511/wordpress_zero_spam": "<5.2.13", "bolt/bolt": "<3.7.2", @@ -8511,11 +7982,11 @@ "cockpit-hq/cockpit": "<=2.6.3", "codeception/codeception": "<3.1.3|>=4,<4.1.22", "codeigniter/framework": "<3.1.9", - "codeigniter4/framework": "<4.3.5", - "codeigniter4/shield": "<1.0.0.0-beta4", + "codeigniter4/framework": "<=4.4.2", + "codeigniter4/shield": "<1.0.0.0-beta8", "codiad/codiad": "<=2.8.4", - "composer/composer": "<1.10.26|>=2,<2.2.12|>=2.3,<2.3.5", - "concrete5/concrete5": "<9.2", + "composer/composer": "<1.10.27|>=2,<2.2.22|>=2.3,<2.6.4", + "concrete5/concrete5": "<9.2.2", "concrete5/core": "<8.5.8|>=9,<9.1", "contao-components/mediaelement": ">=2.14.2,<2.21.1", "contao/contao": ">=4,<4.4.56|>=4.5,<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4", @@ -8538,19 +8009,21 @@ "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1", "desperado/xml-bundle": "<=0.1.7", "directmailteam/direct-mail": "<5.2.4", - "doctrine/annotations": ">=1,<1.2.7", - "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", - "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1", + "doctrine/annotations": "<1.2.7", + "doctrine/cache": "<1.3.2|>=1.4,<1.4.2", + "doctrine/common": "<2.4.3|>=2.5,<2.5.1", "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2|>=3,<3.1.4", "doctrine/doctrine-bundle": "<1.5.2", "doctrine/doctrine-module": "<=0.7.1", - "doctrine/mongodb-odm": ">=1,<1.0.2", - "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", + "doctrine/mongodb-odm": "<1.0.2", + "doctrine/mongodb-odm-bundle": "<3.0.1", "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", - "dolibarr/dolibarr": "<17.0.1", + "dolibarr/dolibarr": "<18.0.2", "dompdf/dompdf": "<2.0.2|==2.0.2", + "doublethreedigital/guest-entries": "<3.1.2", "drupal/core": "<9.4.14|>=9.5,<9.5.8|>=10,<10.0.8", "drupal/drupal": ">=6,<6.38|>=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", + "duncanmcclean/guest-entries": "<3.1.2", "dweeves/magmi": "<=0.7.24", "ecodev/newsletter": "<=4", "ectouch/ectouch": "<=2.7.2", @@ -8561,6 +8034,7 @@ "enshrined/svg-sanitize": "<0.15", "erusev/parsedown": "<1.7.2", "ether/logs": "<3.0.4", + "evolutioncms/evolution": "<=3.2.3", "exceedone/exment": "<4.4.3|>=5,<5.0.3", "exceedone/laravel-admin": "<2.2.3|==3", "ezsystems/demobundle": ">=5.4,<5.4.6.1-dev", @@ -8571,11 +8045,12 @@ "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26", "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", - "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.26", + "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.34", "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1-dev", + "ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15", "ezsystems/ezplatform-user": ">=1,<1.0.1", - "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.30", + "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.31", "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.03.5.1", "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15", @@ -8594,9 +8069,11 @@ "flarum/mentions": "<1.6.3", "flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15", "flarum/tags": "<=0.1.0.0-beta13", + "floriangaerber/magnesium": "<0.3.1", "fluidtypo3/vhs": "<5.1.1", "fof/byobu": ">=0.3.0.0-beta2,<1.1.7", "fof/upload": "<1.2.3", + "foodcoopshop/foodcoopshop": ">=3.2,<3.6.1", "fooman/tcpdf": "<6.2.22", "forkcms/forkcms": "<5.11.1", "fossar/tcpdf-parser": "<6.2.22", @@ -8608,7 +8085,7 @@ "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", "froala/wysiwyg-editor": "<3.2.7|>=4.0.1,<=4.1.1", - "froxlor/froxlor": "<2.1", + "froxlor/froxlor": "<2.1.0.0-beta1", "fuel/core": "<1.8.1", "funadmin/funadmin": "<=3.2|>=3.3.2,<=3.3.3", "gaoming13/wechat-php-sdk": "<=1.10.2", @@ -8627,6 +8104,7 @@ "gree/jose": "<2.2.1", "gregwar/rst": "<1.0.3", "grumpydictator/firefly-iii": "<6", + "gugoan/economizzer": "<=0.9.0.0-beta1", "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", "guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5", "haffner/jh_captcha": "<=2.1.3|>=3,<=3.0.2", @@ -8640,9 +8118,10 @@ "httpsoft/http-message": "<1.0.12", "hyn/multi-tenant": ">=5.6,<5.7.2", "ibexa/admin-ui": ">=4.2,<4.2.3", - "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3", + "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3|>=4.5,<4.5.4", "ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3", "ibexa/post-install": "<=1.0.4", + "ibexa/solr": ">=4.5,<4.5.4", "ibexa/user": ">=4,<4.4.3", "icecoder/icecoder": "<=8.1", "idno/known": "<=1.3.1", @@ -8652,7 +8131,7 @@ "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", "impresscms/impresscms": "<=1.4.5", - "in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.1", + "in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.2.2", "in2code/ipandlanguageredirect": "<5.1.2", "in2code/lux": "<17.6.1|>=18,<24.0.2", "innologi/typo3-appointments": "<2.0.6", @@ -8670,7 +8149,7 @@ "joomla/filter": "<1.4.4|>=2,<2.0.1", "joomla/framework": ">=2.5.4,<=3.8.12", "joomla/input": ">=2,<2.0.2", - "joomla/joomla-cms": "<3.9.12", + "joomla/joomla-cms": ">=2.5,<3.9.12", "joomla/session": "<1.3.1", "joyqi/hyper-down": "<=2.4.27", "jsdecena/laracom": "<2.0.9", @@ -8679,7 +8158,7 @@ "kelvinmo/simplexrd": "<3.1.1", "kevinpapst/kimai2": "<1.16.7", "khodakhah/nodcms": "<=3", - "kimai/kimai": "<1.1", + "kimai/kimai": "<=2.1", "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", "klaviyo/magento2-extension": ">=1,<3", "knplabs/knp-snappy": "<=1.4.2", @@ -8713,7 +8192,7 @@ "magento/magento1ee": ">=1,<1.14.4.3-dev", "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2.0-patch2", "maikuolan/phpmussel": ">=1,<1.6", - "mantisbt/mantisbt": "<=2.25.5", + "mantisbt/mantisbt": "<=2.25.7", "marcwillmann/turn": "<0.3.3", "matyhtf/framework": "<3.0.6", "mautic/core": "<4.3", @@ -8724,7 +8203,7 @@ "melisplatform/melis-front": "<5.0.1", "mezzio/mezzio-swoole": "<3.7|>=4,<4.3", "mgallegos/laravel-jqgrid": "<=1.3", - "microweber/microweber": "<=1.3.4", + "microweber/microweber": "<=2.0.4", "miniorange/miniorange-saml": "<1.4.3", "mittwald/typo3_forum": "<1.2.1", "mobiledetect/mobiledetectlib": "<2.8.32", @@ -8732,9 +8211,13 @@ "mojo42/jirafeau": "<4.4", "mongodb/mongodb": ">=1,<1.9.2", "monolog/monolog": ">=1.8,<1.12", - "moodle/moodle": "<4.2.0.0-RC2-dev|==4.2", + "moodle/moodle": "<4.3.0.0-RC2-dev", + "mos/cimage": "<0.7.19", "movim/moxl": ">=0.8,<=0.10", "mpdf/mpdf": "<=7.1.7", + "munkireport/comment": "<4.1", + "munkireport/managedinstalls": "<2.6", + "munkireport/munkireport": ">=2.5.3,<5.6.3", "mustache/mustache": ">=2,<2.14.1", "namshi/jose": "<2.2", "neoan3-apps/template": "<1.1.1", @@ -8748,6 +8231,7 @@ "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", "nilsteampassnet/teampass": "<3.0.10", + "nonfiction/nterchange": "<4.1.1", "notrinos/notrinos-erp": "<=0.7", "noumo/easyii": "<=0.9", "nukeviet/nukeviet": "<4.5.02", @@ -8758,18 +8242,22 @@ "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", "october/october": "<=3.4.4", "october/rain": "<1.0.472|>=1.1,<1.1.2", - "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.0.66", + "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.5.2", + "omeka/omeka-s": "<4.0.3", "onelogin/php-saml": "<2.10.4", "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", "open-web-analytics/open-web-analytics": "<1.7.4", - "opencart/opencart": "<=3.0.3.7", + "opencart/opencart": "<=3.0.3.7|>=4,<4.0.2.3-dev", "openid/php-openid": "<2.3", "openmage/magento-lts": "<=19.5|>=20,<=20.1", "opensource-workshop/connect-cms": "<1.7.2|>=2,<2.3.2", "orchid/platform": ">=9,<9.4.4|>=14.0.0.0-alpha4,<14.5", - "oro/commerce": ">=4.1,<5.0.6", + "oro/calendar-bundle": ">=4.2,<=4.2.6|>=5,<=5.0.6|>=5.1,<5.1.1", + "oro/commerce": ">=4.1,<5.0.11|>=5.1,<5.1.1", "oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7", - "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<4.2.8", + "oro/crm-call-bundle": ">=4.2,<=4.2.5|>=5,<5.0.4|>=5.1,<5.1.1", + "oro/customer-portal": ">=4.2,<=4.2.8|>=5,<5.0.11|>=5.1,<5.1.1", + "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<=4.2.10|>=5,<5.0.8", "oxid-esales/oxideshop-ce": "<4.5", "packbackbooks/lti-1-3-php-library": "<5", "padraic/humbug_get_contents": "<1.1.2", @@ -8793,7 +8281,7 @@ "phpmyfaq/phpmyfaq": "<=3.1.7", "phpoffice/phpexcel": "<1.8", "phpoffice/phpspreadsheet": "<1.16", - "phpseclib/phpseclib": "<2.0.31|>=3,<3.0.19", + "phpseclib/phpseclib": "<3.0.34", "phpservermon/phpservermon": "<3.6", "phpsysinfo/phpsysinfo": "<3.2.5", "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5,<5.6.3", @@ -8801,20 +8289,23 @@ "phpxmlrpc/extras": "<0.6.1", "phpxmlrpc/phpxmlrpc": "<4.9.2", "pi/pi": "<=2.5", - "pimcore/admin-ui-classic-bundle": "<1.1.2", + "pimcore/admin-ui-classic-bundle": "<1.2.2", "pimcore/customer-management-framework-bundle": "<3.4.2", "pimcore/data-hub": "<1.2.4", + "pimcore/demo": "<10.3", "pimcore/perspective-editor": "<1.5.1", - "pimcore/pimcore": "<10.6.8", + "pimcore/pimcore": "<11.1.1", "pixelfed/pixelfed": "<=0.11.4", "pocketmine/bedrock-protocol": "<8.0.2", "pocketmine/pocketmine-mp": "<=4.23|>=5,<5.3.1", + "pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1", "pressbooks/pressbooks": "<5.18", "prestashop/autoupgrade": ">=4,<4.10.1", + "prestashop/blockreassurance": "<=5.1.3", "prestashop/blockwishlist": ">=2,<2.1.1", "prestashop/contactform": ">=1.0.1,<4.3", "prestashop/gamification": "<2.3.2", - "prestashop/prestashop": "<=8.1", + "prestashop/prestashop": "<8.1.2", "prestashop/productcomments": "<5.0.2", "prestashop/ps_emailsubscription": "<2.6.1", "prestashop/ps_facetedsearch": "<3.4.1", @@ -8824,11 +8315,12 @@ "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", "propel/propel1": ">=1,<=1.7.1", "pterodactyl/panel": "<1.7", - "ptheofan/yii2-statemachine": ">=2", + "ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2", "ptrofimov/beanstalk_console": "<1.7.14", "pusher/pusher-php-server": "<2.2.1", "pwweb/laravel-core": "<=0.3.6.0-beta", "pyrocms/pyrocms": "<=3.9.1", + "rainlab/blog-plugin": "<1.4.1", "rainlab/debugbar-plugin": "<3.1", "rainlab/user-plugin": "<=1.4.5", "rankmath/seo-by-rank-math": "<=1.0.95", @@ -8836,6 +8328,8 @@ "react/http": ">=0.7,<1.9", "really-simple-plugins/complianz-gdpr": "<6.4.2", "remdex/livehelperchat": "<3.99", + "reportico-web/reportico": "<=7.1.21", + "rhukster/dom-sanitizer": "<1.0.7", "rmccue/requests": ">=1.6,<1.8", "robrichards/xmlseclibs": "<3.0.4", "roots/soil": "<4.1", @@ -8863,7 +8357,7 @@ "silverstripe/comments": ">=1.3,<1.9.99|>=2,<2.9.99|>=3,<3.1.1", "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", "silverstripe/framework": "<4.13.14|>=5,<5.0.13", - "silverstripe/graphql": "<3.5.2|>=4.0.0.0-alpha1,<4.0.0.0-alpha2|>=4.1.1,<4.1.2|>=4.2.2,<4.2.3", + "silverstripe/graphql": "<3.8.2|>=4,<4.1.3|>=4.2,<4.2.5|>=4.3,<4.3.4|>=5,<5.0.3", "silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1", "silverstripe/recipe-cms": ">=4.5,<4.5.3", "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", @@ -8874,11 +8368,12 @@ "silverstripe/userforms": "<3", "silverstripe/versioned-admin": ">=1,<1.11.1", "simple-updates/phpwhois": "<=1", - "simplesamlphp/saml2": "<1.15.4|>=2,<2.3.8|>=3,<3.1.4", + "simplesamlphp/saml2": "<1.15.4|>=2,<2.3.8|>=3,<3.1.4|==5.0.0.0-alpha12", "simplesamlphp/simplesamlphp": "<1.18.6", "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", "simplesamlphp/simplesamlphp-module-openid": "<1", "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", + "simplesamlphp/xml-security": "==1.6.11", "simplito/elliptic-php": "<1.0.6", "sitegeist/fluid-components": "<3.5", "sjbr/sr-freecap": "<2.4.6|>=2.5,<2.5.3", @@ -8886,7 +8381,7 @@ "slim/slim": "<2.6", "slub/slub-events": "<3.0.3", "smarty/smarty": "<3.1.48|>=4,<4.3.1", - "snipe/snipe-it": "<=6.0.14", + "snipe/snipe-it": "<=6.2.2", "socalnick/scn-social-auth": "<1.15.2", "socialiteproviders/steam": "<1.1", "spatie/browsershot": "<3.57.4", @@ -8895,7 +8390,7 @@ "spoonity/tcpdf": "<6.2.22", "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", "ssddanbrown/bookstack": "<22.02.3", - "statamic/cms": "<4.10", + "statamic/cms": "<4.36", "stormpath/sdk": "<9.9.99", "studio-42/elfinder": "<2.1.62", "subhh/libconnect": "<7.0.8|>=8,<8.1", @@ -8904,6 +8399,7 @@ "sumocoders/framework-user-bundle": "<1.4", "swag/paypal": "<5.4.4", "swiftmailer/swiftmailer": ">=4,<5.4.5", + "swiftyedit/swiftyedit": "<1.2", "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", "sylius/grid-bundle": "<1.10.1", @@ -8935,14 +8431,16 @@ "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9", "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", - "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2", + "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2|>=5.4,<5.4.31|>=6,<6.3.8", "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", - "symfony/symfony": "<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", + "symfony/symfony": "<4.4.51|>=5,<5.4.31|>=6,<6.3.8", "symfony/translation": ">=2,<2.0.17", + "symfony/twig-bridge": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", "symfony/ux-autocomplete": "<2.11.2", "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", + "symfony/webhook": ">=6.3,<6.3.8", "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", "t3/dce": "<0.11.5|>=2.2,<2.6.2", "t3g/svg-sanitizer": "<1.0.3", @@ -8954,9 +8452,9 @@ "thelia/thelia": ">=2.1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", "thinkcmf/thinkcmf": "<=5.1.7", - "thorsten/phpmyfaq": "<3.2.0.0-beta2", + "thorsten/phpmyfaq": "<3.2.2", "tikiwiki/tiki-manager": "<=17.1", - "tinymce/tinymce": "<5.10.7|>=6,<6.3.1", + "tinymce/tinymce": "<5.10.9|>=6,<6.7.3", "tinymighty/wiki-seo": "<1.2.2", "titon/framework": "<9.9.99", "tobiasbg/tablepress": "<=2.0.0.0-RC1", @@ -8964,18 +8462,19 @@ "topthink/think": "<=6.1.1", "topthink/thinkphp": "<=3.2.3", "tpwd/ke_search": "<4.0.3|>=4.1,<4.6.6|>=5,<5.0.2", - "tribalsystems/zenario": "<=9.3.57595", + "tribalsystems/zenario": "<=9.4.59197", "truckersmp/phpwhois": "<=4.3.1", "ttskch/pagination-service-provider": "<1", "twig/twig": "<1.44.7|>=2,<2.15.3|>=3,<3.4.3", "typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", "typo3/cms-backend": ">=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", - "typo3/cms-core": "<8.7.51|>=9,<9.5.42|>=10,<10.4.39|>=11,<11.5.30|>=12,<12.4.4", + "typo3/cms-core": "<=8.7.54|>=9,<=9.5.43|>=10,<=10.4.40|>=11,<=11.5.32|>=12,<=12.4.7", "typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1", "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", + "typo3/cms-install": ">=12.2,<12.4.8", "typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30", "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", - "typo3/html-sanitizer": ">=1,<1.5.1|>=2,<2.1.2", + "typo3/html-sanitizer": ">=1,<=1.5.2|>=2,<=2.1.3", "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", "typo3/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", @@ -8992,7 +8491,7 @@ "vrana/adminer": "<4.8.1", "waldhacker/hcaptcha": "<2.1.2", "wallabag/tcpdf": "<6.2.22", - "wallabag/wallabag": "<=2.6.2", + "wallabag/wallabag": "<2.6.7", "wanglelecc/laracms": "<=1.0.3", "web-auth/webauthn-framework": ">=3.3,<3.3.4", "webbuilders-group/silverstripe-kapost-bridge": "<0.4", @@ -9016,7 +8515,7 @@ "yetiforce/yetiforce-crm": "<=6.4", "yidashi/yii2cmf": "<=2", "yii2mod/yii2-cms": "<1.9.2", - "yiisoft/yii": "<1.1.27", + "yiisoft/yii": "<1.1.29", "yiisoft/yii2": "<2.0.38", "yiisoft/yii2-bootstrap": "<2.0.4", "yiisoft/yii2-dev": "<2.0.43", @@ -9029,7 +8528,7 @@ "yourls/yourls": "<=1.8.2", "zencart/zencart": "<=1.5.7.0-beta", "zendesk/zendesk_api_client_php": "<2.2.11", - "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", + "zendframework/zend-cache": "<2.4.8|>=2.5,<2.5.3", "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2", "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2", "zendframework/zend-db": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.10|>=2.3,<2.3.5", @@ -9061,7 +8560,7 @@ "zenstruck/collection": "<0.2.1", "zetacomponents/mail": "<1.8.2", "zf-commons/zfc-user": "<1.2.2", - "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", + "zfcampus/zf-apigility-doctrine": "<1.0.3", "zfr/zfr-oauth2-server-module": "<0.1.2", "zoujingli/thinkadmin": "<6.0.22" }, @@ -9100,7 +8599,7 @@ "type": "tidelift" } ], - "time": "2023-09-27T09:04:28+00:00" + "time": "2023-11-30T20:04:21+00:00" }, { "name": "sebastian/cli-parser", @@ -10068,16 +9567,16 @@ }, { "name": "spatie/array-to-xml", - "version": "3.2.0", + "version": "3.2.2", "source": { "type": "git", "url": "https://github.com/spatie/array-to-xml.git", - "reference": "f9ab39c808500c347d5a8b6b13310bd5221e39e7" + "reference": "96be97e664c87613121d073ea39af4c74e57a7f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/f9ab39c808500c347d5a8b6b13310bd5221e39e7", - "reference": "f9ab39c808500c347d5a8b6b13310bd5221e39e7", + "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/96be97e664c87613121d073ea39af4c74e57a7f8", + "reference": "96be97e664c87613121d073ea39af4c74e57a7f8", "shasum": "" }, "require": { @@ -10115,7 +9614,7 @@ "xml" ], "support": { - "source": "https://github.com/spatie/array-to-xml/tree/3.2.0" + "source": "https://github.com/spatie/array-to-xml/tree/3.2.2" }, "funding": [ { @@ -10127,31 +9626,31 @@ "type": "github" } ], - "time": "2023-07-19T18:30:26+00:00" + "time": "2023-11-14T14:08:51+00:00" }, { "name": "symfony/browser-kit", - "version": "v6.3.2", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "ca4a988488f61ac18f8f845445eabdd36f89aa8d" + "reference": "a3bb210e001580ec75e1d02b27fae3452e6bf502" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/ca4a988488f61ac18f8f845445eabdd36f89aa8d", - "reference": "ca4a988488f61ac18f8f845445eabdd36f89aa8d", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/a3bb210e001580ec75e1d02b27fae3452e6bf502", + "reference": "a3bb210e001580ec75e1d02b27fae3452e6bf502", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/dom-crawler": "^5.4|^6.0" + "symfony/dom-crawler": "^5.4|^6.0|^7.0" }, "require-dev": { - "symfony/css-selector": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/mime": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0" + "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -10179,7 +9678,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v6.3.2" + "source": "https://github.com/symfony/browser-kit/tree/v6.4.0" }, "funding": [ { @@ -10195,20 +9694,20 @@ "type": "tidelift" } ], - "time": "2023-07-06T06:56:43+00:00" + "time": "2023-10-31T08:18:17+00:00" }, { "name": "symfony/css-selector", - "version": "v6.3.2", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "883d961421ab1709877c10ac99451632a3d6fa57" + "reference": "d036c6c0d0b09e24a14a35f8292146a658f986e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/883d961421ab1709877c10ac99451632a3d6fa57", - "reference": "883d961421ab1709877c10ac99451632a3d6fa57", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/d036c6c0d0b09e24a14a35f8292146a658f986e4", + "reference": "d036c6c0d0b09e24a14a35f8292146a658f986e4", "shasum": "" }, "require": { @@ -10244,7 +9743,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.3.2" + "source": "https://github.com/symfony/css-selector/tree/v6.4.0" }, "funding": [ { @@ -10260,20 +9759,20 @@ "type": "tidelift" } ], - "time": "2023-07-12T16:00:22+00:00" + "time": "2023-10-31T08:40:20+00:00" }, { "name": "symfony/dom-crawler", - "version": "v6.3.4", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1" + "reference": "14ff4fd2a5c8969d6158dbe7ef5b17d6a9c6ba33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1", - "reference": "3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/14ff4fd2a5c8969d6158dbe7ef5b17d6a9c6ba33", + "reference": "14ff4fd2a5c8969d6158dbe7ef5b17d6a9c6ba33", "shasum": "" }, "require": { @@ -10283,7 +9782,7 @@ "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "symfony/css-selector": "^5.4|^6.0" + "symfony/css-selector": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -10311,7 +9810,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v6.3.4" + "source": "https://github.com/symfony/dom-crawler/tree/v6.4.0" }, "funding": [ { @@ -10327,30 +9826,30 @@ "type": "tidelift" } ], - "time": "2023-08-01T07:43:40+00:00" + "time": "2023-11-20T16:41:16+00:00" }, { "name": "symfony/proxy-manager-bridge", - "version": "v6.3.0", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/proxy-manager-bridge.git", - "reference": "7ba2ac62c88d7c3460d41f04ceba5fc3b9071a39" + "reference": "801c4590eacf0dc40d73135dbe79ad71effd6d04" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/7ba2ac62c88d7c3460d41f04ceba5fc3b9071a39", - "reference": "7ba2ac62c88d7c3460d41f04ceba5fc3b9071a39", + "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/801c4590eacf0dc40d73135dbe79ad71effd6d04", + "reference": "801c4590eacf0dc40d73135dbe79ad71effd6d04", "shasum": "" }, "require": { "friendsofphp/proxy-manager-lts": "^1.0.2", "php": ">=8.1", - "symfony/dependency-injection": "^6.3", + "symfony/dependency-injection": "^6.3|^7.0", "symfony/deprecation-contracts": "^2.5|^3" }, "require-dev": { - "symfony/config": "^6.1" + "symfony/config": "^6.1|^7.0" }, "type": "symfony-bridge", "autoload": { @@ -10378,7 +9877,7 @@ "description": "Provides integration for ProxyManager with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/proxy-manager-bridge/tree/v6.3.0" + "source": "https://github.com/symfony/proxy-manager-bridge/tree/v6.4.0" }, "funding": [ { @@ -10394,20 +9893,20 @@ "type": "tidelift" } ], - "time": "2023-05-26T07:49:33+00:00" + "time": "2023-11-01T12:07:38+00:00" }, { "name": "symfony/translation", - "version": "v6.3.3", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd" + "reference": "b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd", - "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd", + "url": "https://api.github.com/repos/symfony/translation/zipball/b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37", + "reference": "b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37", "shasum": "" }, "require": { @@ -10432,17 +9931,17 @@ "require-dev": { "nikic/php-parser": "^4.13", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.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/finder": "^5.4|^6.0|^7.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/intl": "^5.4|^6.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", + "symfony/routing": "^5.4|^6.0|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0" + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -10473,7 +9972,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.3.3" + "source": "https://github.com/symfony/translation/tree/v6.4.0" }, "funding": [ { @@ -10489,20 +9988,20 @@ "type": "tidelift" } ], - "time": "2023-07-31T07:08:24+00:00" + "time": "2023-11-29T08:14:36+00:00" }, { "name": "symplify/easy-coding-standard", - "version": "12.0.8", + "version": "12.0.11", "source": { "type": "git", "url": "https://github.com/easy-coding-standard/easy-coding-standard.git", - "reference": "99d87d188acc712dd6655ee946569f823cfeff69" + "reference": "5f34a99d035b4eef048857ec47d2035140871f50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/99d87d188acc712dd6655ee946569f823cfeff69", - "reference": "99d87d188acc712dd6655ee946569f823cfeff69", + "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/5f34a99d035b4eef048857ec47d2035140871f50", + "reference": "5f34a99d035b4eef048857ec47d2035140871f50", "shasum": "" }, "require": { @@ -10510,7 +10009,7 @@ }, "conflict": { "friendsofphp/php-cs-fixer": "<3.0", - "squizlabs/php_codesniffer": "<3.6", + "phpcsstandards/php_codesniffer": "<3.6", "symplify/coding-standard": "<11.3" }, "bin": [ @@ -10535,7 +10034,7 @@ ], "support": { "issues": "https://github.com/easy-coding-standard/easy-coding-standard/issues", - "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.0.8" + "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.0.11" }, "funding": [ { @@ -10547,20 +10046,20 @@ "type": "github" } ], - "time": "2023-09-08T10:17:14+00:00" + "time": "2023-12-02T09:38:08+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", "shasum": "" }, "require": { @@ -10589,7 +10088,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.2" }, "funding": [ { @@ -10597,20 +10096,20 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2023-11-20T00:12:19+00:00" }, { "name": "vimeo/psalm", - "version": "5.15.0", + "version": "5.16.0", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "5c774aca4746caf3d239d9c8cadb9f882ca29352" + "reference": "2897ba636551a8cb61601cc26f6ccfbba6c36591" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/5c774aca4746caf3d239d9c8cadb9f882ca29352", - "reference": "5c774aca4746caf3d239d9c8cadb9f882ca29352", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/2897ba636551a8cb61601cc26f6ccfbba6c36591", + "reference": "2897ba636551a8cb61601cc26f6ccfbba6c36591", "shasum": "" }, "require": { @@ -10635,8 +10134,8 @@ "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", "sebastian/diff": "^4.0 || ^5.0", "spatie/array-to-xml": "^2.17.0 || ^3.0", - "symfony/console": "^4.1.6 || ^5.0 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0" + "symfony/console": "^4.1.6 || ^5.0 || ^6.0 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0" }, "conflict": { "nikic/php-parser": "4.17.0" @@ -10658,7 +10157,7 @@ "psalm/plugin-phpunit": "^0.18", "slevomat/coding-standard": "^8.4", "squizlabs/php_codesniffer": "^3.6", - "symfony/process": "^4.4 || ^5.0 || ^6.0" + "symfony/process": "^4.4 || ^5.0 || ^6.0 || ^7.0" }, "suggest": { "ext-curl": "In order to send data to shepherd", @@ -10671,7 +10170,7 @@ "psalm-refactor", "psalter" ], - "type": "library", + "type": "project", "extra": { "branch-alias": { "dev-master": "5.x-dev", @@ -10703,10 +10202,11 @@ "static analysis" ], "support": { + "docs": "https://psalm.dev/docs", "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm/tree/5.15.0" + "source": "https://github.com/vimeo/psalm" }, - "time": "2023-08-20T23:07:30+00:00" + "time": "2023-11-22T20:38:47+00:00" }, { "name": "webmozart/assert", @@ -10775,7 +10275,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^8.2", + "php": "^8.3", "ext-amqp": "*", "ext-apcu": "*", "ext-json": "*", diff --git a/etc/infrastructure/php/conf.d/apcu.ini b/etc/infrastructure/php/conf.d/apcu.ini index 3fb1fc345..8fae9c5a0 100644 --- a/etc/infrastructure/php/conf.d/apcu.ini +++ b/etc/infrastructure/php/conf.d/apcu.ini @@ -1,3 +1,5 @@ +apc.enable_cli=1 +apc.enabled=1 apc.shm_segments=1 apc.shm_size=256M apc.num_files_hint=7000 From 9d3434e57ce4d938319c0fa11a776aa8905c582e Mon Sep 17 00:00:00 2001 From: Joan Miquel Date: Mon, 11 Dec 2023 11:26:10 +0100 Subject: [PATCH 35/40] refactor: use json_decode exception (#374) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Use json_decode exception Ahora es más rápido. Lo curioso es que si lo usan el jsonEncode(). Fix: #373 * fix: remove unused import --------- Co-authored-by: Javier Ferrer González --- src/Shared/Domain/Utils.php | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/Shared/Domain/Utils.php b/src/Shared/Domain/Utils.php index 7939ff26b..443c406e0 100644 --- a/src/Shared/Domain/Utils.php +++ b/src/Shared/Domain/Utils.php @@ -6,7 +6,6 @@ use DateTimeImmutable; use DateTimeInterface; -use RuntimeException; use function Lambdish\Phunctional\filter; final class Utils @@ -38,13 +37,7 @@ public static function jsonEncode(array $values): string public static function jsonDecode(string $json): array { - $data = json_decode($json, true); - - if (json_last_error() !== JSON_ERROR_NONE) { - throw new RuntimeException('Unable to parse response body into JSON: ' . json_last_error()); - } - - return $data; + return json_decode($json, true, flags: JSON_THROW_ON_ERROR); } public static function toSnakeCase(string $text): string From 06249af609a4f374a61bb1ec64c6fd5bd7c76029 Mon Sep 17 00:00:00 2001 From: Joan Miquel Date: Mon, 11 Dec 2023 11:46:48 +0100 Subject: [PATCH 36/40] refactor: Fix DbalTypesSearcher.php to use str_ends_with() (#376) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update DbalTypesSearcher.php Para usar str_ends_with() * fix: remove unused import --------- Co-authored-by: Javier Ferrer González --- src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php b/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php index 7b203d1fa..28823de48 100644 --- a/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php +++ b/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php @@ -4,8 +4,6 @@ namespace CodelyTv\Mooc\Shared\Infrastructure\Doctrine; -use CodelyTv\Shared\Domain\Utils; - use function Lambdish\Phunctional\filter; use function Lambdish\Phunctional\map; use function Lambdish\Phunctional\reduce; @@ -51,7 +49,7 @@ private static function dbalClassesSearcher(string $contextName): callable { return static function (array $totalNamespaces, string $path) use ($contextName): array { $possibleFiles = scandir($path); - $files = filter(static fn (string $file): bool => Utils::endsWith('Type.php', $file), $possibleFiles); + $files = filter(static fn (string $file): bool => str_ends_with($file, 'Type.php'), $possibleFiles); $namespaces = map( static function (string $file) use ($path, $contextName): string { From c4d2f2537696b52951938a5998805882f24fc375 Mon Sep 17 00:00:00 2001 From: Joan Miquel Date: Mon, 11 Dec 2023 12:34:54 +0100 Subject: [PATCH 37/40] refactor: remove endsWith() in Utils class in favor of str_ends_with (#375) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PHP 8.0 tiene str_ends_with() y str_starts_with(). Co-authored-by: Javier Ferrer González --- src/Shared/Domain/Utils.php | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/Shared/Domain/Utils.php b/src/Shared/Domain/Utils.php index 443c406e0..a50521eea 100644 --- a/src/Shared/Domain/Utils.php +++ b/src/Shared/Domain/Utils.php @@ -10,16 +10,6 @@ final class Utils { - public static function endsWith(string $needle, string $haystack): bool - { - $length = strlen($needle); - if ($length === 0) { - return true; - } - - return substr($haystack, -$length) === $needle; - } - public static function dateToString(DateTimeInterface $date): string { return $date->format(DateTimeInterface::ATOM); From be65b400cff2c5d4a385eb253eeced7bbcc7bc84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Wed, 20 Dec 2023 12:52:45 +0100 Subject: [PATCH 38/40] feat: add steps (#379) * feat: add steps * feat: add steps * feat: delete steps * feat: delete steps on cascade --- etc/databases/mooc.sql | 94 +++++++++++++------ .../Create/CreateVideoStepCommandHandler.php | 14 +++ .../Application/Create/VideoStepCreator.php | 14 +++ .../Steps/Domain/Exercise/ExerciseStep.php | 22 +++++ .../Domain/Exercise/ExerciseStepContent.php | 9 ++ src/Mooc/Steps/Domain/Quiz/QuizStep.php | 27 ++++++ .../Steps/Domain/Quiz/QuizStepQuestion.php | 22 +++++ src/Mooc/Steps/Domain/Step.php | 16 ++++ src/Mooc/Steps/Domain/StepDuration.php | 9 ++ src/Mooc/Steps/Domain/StepId.php | 9 ++ src/Mooc/Steps/Domain/StepRepository.php | 14 +++ src/Mooc/Steps/Domain/StepTitle.php | 9 ++ src/Mooc/Steps/Domain/Video/VideoStep.php | 22 +++++ src/Mooc/Steps/Domain/Video/VideoStepUrl.php | 9 ++ .../Doctrine/Exercise.ExerciseStep.orm.xml | 10 ++ .../Exercise.ExerciseStepContent.orm.xml | 10 ++ .../Doctrine/Quiz.QuizStep.orm.xml | 10 ++ .../Doctrine/QuizStepQuestionsType.php | 40 ++++++++ .../Persistence/Doctrine/Step.orm.xml | 20 ++++ .../Persistence/Doctrine/StepDuration.orm.xml | 10 ++ .../Persistence/Doctrine/StepIdType.php | 16 ++++ .../Persistence/Doctrine/StepTitle.orm.xml | 10 ++ .../Doctrine/Video.VideoStep.orm.xml | 10 ++ .../Doctrine/Video.VideoStepUrl.orm.xml | 10 ++ .../Persistence/MySqlStepRepository.php | 28 ++++++ .../Exercise/ExerciseStepContentMother.php | 16 ++++ .../Domain/Exercise/ExerciseStepMother.php | 31 ++++++ .../Mooc/Steps/Domain/Quiz/QuizStepMother.php | 36 +++++++ .../Domain/Quiz/QuizStepQuestionMother.php | 20 ++++ .../Mooc/Steps/Domain/StepDurationMother.php | 16 ++++ tests/Mooc/Steps/Domain/StepIdMother.php | 16 ++++ tests/Mooc/Steps/Domain/StepTitleMother.php | 16 ++++ .../Steps/Domain/Video/VideoStepMother.php | 31 ++++++ .../Steps/Domain/Video/VideoStepUrlMother.php | 16 ++++ .../Persistence/MySqlStepRepositoryTest.php | 55 +++++++++++ .../StepsModuleInfrastructureTestCase.php | 16 ++++ 36 files changed, 703 insertions(+), 30 deletions(-) create mode 100644 src/Mooc/Steps/Application/Create/CreateVideoStepCommandHandler.php create mode 100644 src/Mooc/Steps/Application/Create/VideoStepCreator.php create mode 100644 src/Mooc/Steps/Domain/Exercise/ExerciseStep.php create mode 100644 src/Mooc/Steps/Domain/Exercise/ExerciseStepContent.php create mode 100644 src/Mooc/Steps/Domain/Quiz/QuizStep.php create mode 100644 src/Mooc/Steps/Domain/Quiz/QuizStepQuestion.php create mode 100644 src/Mooc/Steps/Domain/Step.php create mode 100644 src/Mooc/Steps/Domain/StepDuration.php create mode 100644 src/Mooc/Steps/Domain/StepId.php create mode 100644 src/Mooc/Steps/Domain/StepRepository.php create mode 100644 src/Mooc/Steps/Domain/StepTitle.php create mode 100644 src/Mooc/Steps/Domain/Video/VideoStep.php create mode 100644 src/Mooc/Steps/Domain/Video/VideoStepUrl.php create mode 100644 src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Exercise.ExerciseStep.orm.xml create mode 100644 src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Exercise.ExerciseStepContent.orm.xml create mode 100644 src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Quiz.QuizStep.orm.xml create mode 100644 src/Mooc/Steps/Infrastructure/Persistence/Doctrine/QuizStepQuestionsType.php create mode 100644 src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Step.orm.xml create mode 100644 src/Mooc/Steps/Infrastructure/Persistence/Doctrine/StepDuration.orm.xml create mode 100644 src/Mooc/Steps/Infrastructure/Persistence/Doctrine/StepIdType.php create mode 100644 src/Mooc/Steps/Infrastructure/Persistence/Doctrine/StepTitle.orm.xml create mode 100644 src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Video.VideoStep.orm.xml create mode 100644 src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Video.VideoStepUrl.orm.xml create mode 100644 src/Mooc/Steps/Infrastructure/Persistence/MySqlStepRepository.php create mode 100644 tests/Mooc/Steps/Domain/Exercise/ExerciseStepContentMother.php create mode 100644 tests/Mooc/Steps/Domain/Exercise/ExerciseStepMother.php create mode 100644 tests/Mooc/Steps/Domain/Quiz/QuizStepMother.php create mode 100644 tests/Mooc/Steps/Domain/Quiz/QuizStepQuestionMother.php create mode 100644 tests/Mooc/Steps/Domain/StepDurationMother.php create mode 100644 tests/Mooc/Steps/Domain/StepIdMother.php create mode 100644 tests/Mooc/Steps/Domain/StepTitleMother.php create mode 100644 tests/Mooc/Steps/Domain/Video/VideoStepMother.php create mode 100644 tests/Mooc/Steps/Domain/Video/VideoStepUrlMother.php create mode 100644 tests/Mooc/Steps/Infrastructure/Persistence/MySqlStepRepositoryTest.php create mode 100644 tests/Mooc/Steps/StepsModuleInfrastructureTestCase.php diff --git a/etc/databases/mooc.sql b/etc/databases/mooc.sql index a999ef78e..1a094f827 100644 --- a/etc/databases/mooc.sql +++ b/etc/databases/mooc.sql @@ -4,35 +4,35 @@ -- Generic tables -CREATE TABLE `mutations` ( - `id` BIGINT AUTO_INCREMENT PRIMARY KEY, - `table_name` VARCHAR(255) NOT NULL, - `operation` ENUM ('INSERT', 'UPDATE', 'DELETE') NOT NULL, - `old_value` JSON NULL, - `new_value` JSON NULL, - `mutation_timestamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP +CREATE TABLE mutations ( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + table_name VARCHAR(255) NOT NULL, + operation ENUM ('INSERT', 'UPDATE', 'DELETE') NOT NULL, + old_value JSON NULL, + new_value JSON NULL, + mutation_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci; -CREATE TABLE `domain_events` ( - `id` CHAR(36) NOT NULL, - `aggregate_id` CHAR(36) NOT NULL, - `name` VARCHAR(255) NOT NULL, - `body` JSON NOT NULL, - `occurred_on` TIMESTAMP NOT NULL, - PRIMARY KEY (`id`) +CREATE TABLE domain_events ( + id CHAR(36) NOT NULL, + aggregate_id CHAR(36) NOT NULL, + name VARCHAR(255) NOT NULL, + body JSON NOT NULL, + occurred_on TIMESTAMP NOT NULL, + PRIMARY KEY (id) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci; -- Aggregates tables -CREATE TABLE `courses` ( - `id` CHAR(36) NOT NULL, - `name` VARCHAR(255) NOT NULL, - `duration` VARCHAR(255) NOT NULL, - PRIMARY KEY (`id`) +CREATE TABLE courses ( + id CHAR(36) NOT NULL, + name VARCHAR(255) NOT NULL, + duration VARCHAR(255) NOT NULL, + PRIMARY KEY (id) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci; @@ -68,28 +68,62 @@ BEGIN VALUES ('courses', 'DELETE', JSON_OBJECT('id', old.id, 'name', old.name, 'duration', old.duration), NOW()); END; -CREATE TABLE `courses_counter` ( - `id` CHAR(36) NOT NULL, - `total` INT NOT NULL, - `existing_courses` JSON NOT NULL, - PRIMARY KEY (`id`) +CREATE TABLE courses_counter ( + id CHAR(36) NOT NULL, + total INT NOT NULL, + existing_courses JSON NOT NULL, + PRIMARY KEY (id) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci; -INSERT INTO `courses_counter` +INSERT INTO courses_counter (id, total, existing_courses) VALUES ("cdf26d7d-3deb-4e8c-9f73-4ac085a8d6f3", 0, "[]"); +CREATE TABLE steps ( + id CHAR(36) NOT NULL, + title VARCHAR(255) NOT NULL, + duration INT NOT NULL, + type VARCHAR(255) NOT NULL, + PRIMARY KEY (id) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci; + +CREATE TABLE steps_video ( + id CHAR(36) NOT NULL, + url VARCHAR(255) NOT NULL, + FOREIGN KEY (id) REFERENCES steps(id) ON DELETE CASCADE +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci; + +CREATE TABLE steps_exercise ( + id CHAR(36) NOT NULL, + content VARCHAR(255) NOT NULL, + FOREIGN KEY (id) REFERENCES steps(id) ON DELETE CASCADE +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci; + +CREATE TABLE steps_quiz ( + id CHAR(36) NOT NULL, + questions TEXT NOT NULL, + FOREIGN KEY (id) REFERENCES steps(id) ON DELETE CASCADE +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci; + /* ------------------------- BACKOFFICE CONTEXT ---------------------------- */ -CREATE TABLE `backoffice_courses` ( - `id` CHAR(36) NOT NULL, - `name` VARCHAR(255) NOT NULL, - `duration` VARCHAR(255) NOT NULL, - PRIMARY KEY (`id`) +CREATE TABLE backoffice_courses ( + id CHAR(36) NOT NULL, + name VARCHAR(255) NOT NULL, + duration VARCHAR(255) NOT NULL, + PRIMARY KEY (id) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci; diff --git a/src/Mooc/Steps/Application/Create/CreateVideoStepCommandHandler.php b/src/Mooc/Steps/Application/Create/CreateVideoStepCommandHandler.php new file mode 100644 index 000000000..34c301890 --- /dev/null +++ b/src/Mooc/Steps/Application/Create/CreateVideoStepCommandHandler.php @@ -0,0 +1,14 @@ +questions = $questions; + } +} diff --git a/src/Mooc/Steps/Domain/Quiz/QuizStepQuestion.php b/src/Mooc/Steps/Domain/Quiz/QuizStepQuestion.php new file mode 100644 index 000000000..157172596 --- /dev/null +++ b/src/Mooc/Steps/Domain/Quiz/QuizStepQuestion.php @@ -0,0 +1,22 @@ +question . '----' . implode('****', $this->answers); + } +} diff --git a/src/Mooc/Steps/Domain/Step.php b/src/Mooc/Steps/Domain/Step.php new file mode 100644 index 000000000..b59277cde --- /dev/null +++ b/src/Mooc/Steps/Domain/Step.php @@ -0,0 +1,16 @@ + + + + + + + diff --git a/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Exercise.ExerciseStepContent.orm.xml b/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Exercise.ExerciseStepContent.orm.xml new file mode 100644 index 000000000..09e493da9 --- /dev/null +++ b/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Exercise.ExerciseStepContent.orm.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Quiz.QuizStep.orm.xml b/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Quiz.QuizStep.orm.xml new file mode 100644 index 000000000..4b116a567 --- /dev/null +++ b/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Quiz.QuizStep.orm.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/QuizStepQuestionsType.php b/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/QuizStepQuestionsType.php new file mode 100644 index 000000000..677fee748 --- /dev/null +++ b/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/QuizStepQuestionsType.php @@ -0,0 +1,40 @@ + $question->toString(), $value), + $platform + ); + } + + public function convertToPHPValue($value, AbstractPlatform $platform): array + { + $scalars = parent::convertToPHPValue($value, $platform); + + return map(fn (string $value): QuizStepQuestion => QuizStepQuestion::fromString($value), $scalars); + } +} diff --git a/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Step.orm.xml b/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Step.orm.xml new file mode 100644 index 000000000..229add0ca --- /dev/null +++ b/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Step.orm.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + diff --git a/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/StepDuration.orm.xml b/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/StepDuration.orm.xml new file mode 100644 index 000000000..c13079530 --- /dev/null +++ b/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/StepDuration.orm.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/StepIdType.php b/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/StepIdType.php new file mode 100644 index 000000000..47b979668 --- /dev/null +++ b/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/StepIdType.php @@ -0,0 +1,16 @@ + + + + + + + diff --git a/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Video.VideoStep.orm.xml b/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Video.VideoStep.orm.xml new file mode 100644 index 000000000..5302800f2 --- /dev/null +++ b/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Video.VideoStep.orm.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Video.VideoStepUrl.orm.xml b/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Video.VideoStepUrl.orm.xml new file mode 100644 index 000000000..a4141ba8f --- /dev/null +++ b/src/Mooc/Steps/Infrastructure/Persistence/Doctrine/Video.VideoStepUrl.orm.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/src/Mooc/Steps/Infrastructure/Persistence/MySqlStepRepository.php b/src/Mooc/Steps/Infrastructure/Persistence/MySqlStepRepository.php new file mode 100644 index 000000000..45a1151d3 --- /dev/null +++ b/src/Mooc/Steps/Infrastructure/Persistence/MySqlStepRepository.php @@ -0,0 +1,28 @@ +persist($step); + } + + public function search(StepId $id): ?Step + { + return $this->repository(Step::class)->find($id); + } + + public function delete(Step $step): void + { + $this->remove($step); + } +} diff --git a/tests/Mooc/Steps/Domain/Exercise/ExerciseStepContentMother.php b/tests/Mooc/Steps/Domain/Exercise/ExerciseStepContentMother.php new file mode 100644 index 000000000..eac56c22f --- /dev/null +++ b/tests/Mooc/Steps/Domain/Exercise/ExerciseStepContentMother.php @@ -0,0 +1,16 @@ + QuizStepQuestionMother::create() + ) : $questions; + + return new QuizStep( + $id ?? StepIdMother::create(), + $title ?? StepTitleMother::create(), + $duration ?? StepDurationMother::create(), + ...$stepQuestions + ); + } +} diff --git a/tests/Mooc/Steps/Domain/Quiz/QuizStepQuestionMother.php b/tests/Mooc/Steps/Domain/Quiz/QuizStepQuestionMother.php new file mode 100644 index 000000000..04fcd8005 --- /dev/null +++ b/tests/Mooc/Steps/Domain/Quiz/QuizStepQuestionMother.php @@ -0,0 +1,20 @@ + WordMother::create()) + ); + } +} diff --git a/tests/Mooc/Steps/Domain/StepDurationMother.php b/tests/Mooc/Steps/Domain/StepDurationMother.php new file mode 100644 index 000000000..73ce6842d --- /dev/null +++ b/tests/Mooc/Steps/Domain/StepDurationMother.php @@ -0,0 +1,16 @@ +repository()->save($step); + } + + /** + * @test + * @dataProvider steps + */ + public function it_should_search_an_existing_step(Step $step): void + { + $this->repository()->save($step); + + $this->assertEquals($step, $this->repository()->search($step->id)); + } + + /** + * @test + * @dataProvider steps + */ + public function it_should_delete_an_existing_step(Step $step): void + { + $this->repository()->save($step); + $this->repository()->delete($step); + + $this->assertNull($this->repository()->search($step->id)); + } + + public function steps(): array + { + return [ + 'video' => [VideoStepMother::create()], + 'exercise' => [ExerciseStepMother::create()], + 'quiz' => [QuizStepMother::create()], + ]; + } +} diff --git a/tests/Mooc/Steps/StepsModuleInfrastructureTestCase.php b/tests/Mooc/Steps/StepsModuleInfrastructureTestCase.php new file mode 100644 index 000000000..8d0eb52ca --- /dev/null +++ b/tests/Mooc/Steps/StepsModuleInfrastructureTestCase.php @@ -0,0 +1,16 @@ +service(StepRepository::class); + } +} From 9ad5301ed2d15f0442451a78784c48948bfff741 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Mon, 5 Aug 2024 23:25:41 +0200 Subject: [PATCH 39/40] chore: upgrade to Symfony 7 (#391) --- README.md | 2 +- .../backend/src/BackofficeBackendKernel.php | 2 +- .../frontend/src/BackofficeFrontendKernel.php | 2 +- apps/mooc/backend/src/MoocBackendKernel.php | 2 +- composer.json | 22 +- composer.lock | 2693 +++++++++-------- psalm.xml | 14 + src/Shared/Domain/Utils.php | 2 +- .../Event/DomainEventSubscriberLocator.php | 2 +- .../RabbitMq/RabbitMqDomainEventsConsumer.php | 2 +- .../Doctrine/DoctrineEntityManagerFactory.php | 2 +- .../Symfony/BasicHttpAuthMiddleware.php | 2 +- .../AuthenticateUserCommandHandlerTest.php | 2 +- .../Auth/AuthModuleUnitTestCase.php | 4 +- .../Create/CreateCourseCommandHandlerTest.php | 2 +- .../Application/Update/CourseRenamerTest.php | 2 +- .../Courses/CoursesModuleUnitTestCase.php | 4 +- .../FindCoursesCounterQueryHandlerTest.php | 2 +- ...ementCoursesCounterOnCourseCreatedTest.php | 2 +- .../CoursesCounterModuleUnitTestCase.php | 4 +- .../Infrastructure/Behat/ApiContext.php | 2 +- .../Command/InMemorySymfonyCommandBusTest.php | 4 +- .../Event/MySql/MySqlDoctrineEventBusTest.php | 4 +- .../TestAllWorksOnRabbitMqEventsPublished.php | 2 +- .../Bus/Query/InMemorySymfonyQueryBusTest.php | 4 +- .../Shared/Infrastructure/Mink/MinkHelper.php | 8 - .../Mockery/CodelyTvMatcherIsSimilar.php | 8 +- .../Infrastructure/PhpUnit/UnitTestCase.php | 12 +- tests/Shared/SharedArchitectureTest.php | 1 + 29 files changed, 1465 insertions(+), 1349 deletions(-) diff --git a/README.md b/README.md index 9fb85dcca..b639c10e7 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@

codely.tv CodelyTV Courses - Symfony 6 + Symfony 7 Type Coverage CI pipeline status

diff --git a/apps/backoffice/backend/src/BackofficeBackendKernel.php b/apps/backoffice/backend/src/BackofficeBackendKernel.php index 6ed60b1be..321bf5524 100644 --- a/apps/backoffice/backend/src/BackofficeBackendKernel.php +++ b/apps/backoffice/backend/src/BackofficeBackendKernel.php @@ -16,7 +16,7 @@ class BackofficeBackendKernel extends Kernel { use MicroKernelTrait; - private const CONFIG_EXTS = '.{xml,yaml}'; + private const string CONFIG_EXTS = '.{xml,yaml}'; public function registerBundles(): iterable { diff --git a/apps/backoffice/frontend/src/BackofficeFrontendKernel.php b/apps/backoffice/frontend/src/BackofficeFrontendKernel.php index dd793f7ab..ae109b24a 100644 --- a/apps/backoffice/frontend/src/BackofficeFrontendKernel.php +++ b/apps/backoffice/frontend/src/BackofficeFrontendKernel.php @@ -16,7 +16,7 @@ class BackofficeFrontendKernel extends Kernel { use MicroKernelTrait; - private const CONFIG_EXTS = '.{xml,yaml}'; + private const string CONFIG_EXTS = '.{xml,yaml}'; public function registerBundles(): iterable { diff --git a/apps/mooc/backend/src/MoocBackendKernel.php b/apps/mooc/backend/src/MoocBackendKernel.php index cc8f8ed58..e0b82d39e 100644 --- a/apps/mooc/backend/src/MoocBackendKernel.php +++ b/apps/mooc/backend/src/MoocBackendKernel.php @@ -16,7 +16,7 @@ class MoocBackendKernel extends Kernel { use MicroKernelTrait; - private const CONFIG_EXTS = '.{xml,yaml}'; + private const string CONFIG_EXTS = '.{xml,yaml}'; public function registerBundles(): iterable { diff --git a/composer.json b/composer.json index 4a6249ffe..52f696576 100644 --- a/composer.json +++ b/composer.json @@ -12,13 +12,13 @@ "ext-zend-opcache": "*", "ext-pdo": "*", - "symfony/framework-bundle": "^6", - "symfony/messenger": "^6", - "symfony/dotenv": "^6", - "symfony/yaml": "^6", - "symfony/twig-bundle": "^6", - "symfony/validator": "^6", - "symfony/cache": "^6", + "symfony/framework-bundle": "^7", + "symfony/messenger": "^7", + "symfony/dotenv": "^7", + "symfony/yaml": "^7", + "symfony/twig-bundle": "^7", + "symfony/validator": "^7", + "symfony/cache": "^7", "lambdish/phunctional": "^2", @@ -41,16 +41,16 @@ "roave/security-advisories": "dev-master", "behat/behat": "^3.13", - "friends-of-behat/mink-extension": "2.6.1", - "friends-of-behat/symfony-extension": "2.3.1", - "behat/mink-browserkit-driver": "2.1.0", + "friends-of-behat/mink-extension": "2.7.5", + "friends-of-behat/symfony-extension": "2.6.0", + "behat/mink-browserkit-driver": "2.2.0", "phpunit/phpunit": "^9", "mockery/mockery": "^1", "fakerphp/faker": "^1", - "symfony/error-handler": "^6", + "symfony/error-handler": "^7", "symplify/easy-coding-standard": "^12.0", "vimeo/psalm": "^5.15", diff --git a/composer.lock b/composer.lock index 794251bd2..534d648f6 100644 --- a/composer.lock +++ b/composer.lock @@ -4,29 +4,29 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "49058a852a48e51de5183cc45f049da6", + "content-hash": "1384ca0a67984f7a0296f15a4373fed1", "packages": [ { "name": "brick/math", - "version": "0.11.0", + "version": "0.12.1", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" + "reference": "f510c0a40911935b77b86859eb5223d58d660df1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", + "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", + "reference": "f510c0a40911935b77b86859eb5223d58d660df1", "shasum": "" }, "require": { - "php": "^8.0" + "php": "^8.1" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^9.0", - "vimeo/psalm": "5.0.0" + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "5.16.0" }, "type": "library", "autoload": { @@ -46,12 +46,17 @@ "arithmetic", "bigdecimal", "bignum", + "bignumber", "brick", - "math" + "decimal", + "integer", + "math", + "mathematics", + "rational" ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.11.0" + "source": "https://github.com/brick/math/tree/0.12.1" }, "funding": [ { @@ -59,7 +64,7 @@ "type": "github" } ], - "time": "2023-01-15T23:15:59+00:00" + "time": "2023-11-29T23:19:16+00:00" }, { "name": "doctrine/cache", @@ -156,16 +161,16 @@ }, { "name": "doctrine/collections", - "version": "2.1.4", + "version": "2.2.2", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "72328a11443a0de79967104ad36ba7b30bded134" + "reference": "d8af7f248c74f195f7347424600fd9e17b57af59" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/72328a11443a0de79967104ad36ba7b30bded134", - "reference": "72328a11443a0de79967104ad36ba7b30bded134", + "url": "https://api.github.com/repos/doctrine/collections/zipball/d8af7f248c74f195f7347424600fd9e17b57af59", + "reference": "d8af7f248c74f195f7347424600fd9e17b57af59", "shasum": "" }, "require": { @@ -177,7 +182,7 @@ "ext-json": "*", "phpstan/phpstan": "^1.8", "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^9.5", + "phpunit/phpunit": "^10.5", "vimeo/psalm": "^5.11" }, "type": "library", @@ -222,7 +227,7 @@ ], "support": { "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/2.1.4" + "source": "https://github.com/doctrine/collections/tree/2.2.2" }, "funding": [ { @@ -238,20 +243,20 @@ "type": "tidelift" } ], - "time": "2023-10-03T09:22:33+00:00" + "time": "2024-04-18T06:56:21+00:00" }, { "name": "doctrine/common", - "version": "3.4.3", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "8b5e5650391f851ed58910b3e3d48a71062eeced" + "reference": "0aad4b7ab7ce8c6602dfbb1e1a24581275fb9d1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/8b5e5650391f851ed58910b3e3d48a71062eeced", - "reference": "8b5e5650391f851ed58910b3e3d48a71062eeced", + "url": "https://api.github.com/repos/doctrine/common/zipball/0aad4b7ab7ce8c6602dfbb1e1a24581275fb9d1a", + "reference": "0aad4b7ab7ce8c6602dfbb1e1a24581275fb9d1a", "shasum": "" }, "require": { @@ -313,7 +318,7 @@ ], "support": { "issues": "https://github.com/doctrine/common/issues", - "source": "https://github.com/doctrine/common/tree/3.4.3" + "source": "https://github.com/doctrine/common/tree/3.4.4" }, "funding": [ { @@ -329,20 +334,20 @@ "type": "tidelift" } ], - "time": "2022-10-09T11:47:59+00:00" + "time": "2024-04-16T13:35:33+00:00" }, { "name": "doctrine/dbal", - "version": "3.7.2", + "version": "3.8.6", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "0ac3c270590e54910715e9a1a044cc368df282b2" + "reference": "b7411825cf7efb7e51f9791dea19d86e43b399a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/0ac3c270590e54910715e9a1a044cc368df282b2", - "reference": "0ac3c270590e54910715e9a1a044cc368df282b2", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/b7411825cf7efb7e51f9791dea19d86e43b399a1", + "reference": "b7411825cf7efb7e51f9791dea19d86e43b399a1", "shasum": "" }, "require": { @@ -358,14 +363,14 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.10.42", - "phpstan/phpstan-strict-rules": "^1.5", - "phpunit/phpunit": "9.6.13", + "phpstan/phpstan": "1.11.5", + "phpstan/phpstan-strict-rules": "^1.6", + "phpunit/phpunit": "9.6.19", "psalm/plugin-phpunit": "0.18.4", "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.7.2", - "symfony/cache": "^5.4|^6.0", - "symfony/console": "^4.4|^5.4|^6.0", + "squizlabs/php_codesniffer": "3.10.1", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/console": "^4.4|^5.4|^6.0|^7.0", "vimeo/psalm": "4.30.0" }, "suggest": { @@ -426,7 +431,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.7.2" + "source": "https://github.com/doctrine/dbal/tree/3.8.6" }, "funding": [ { @@ -442,20 +447,20 @@ "type": "tidelift" } ], - "time": "2023-11-19T08:06:58+00:00" + "time": "2024-06-19T10:38:17+00:00" }, { "name": "doctrine/deprecations", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931", - "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", "shasum": "" }, "require": { @@ -487,22 +492,22 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.2" + "source": "https://github.com/doctrine/deprecations/tree/1.1.3" }, - "time": "2023-09-27T20:04:15+00:00" + "time": "2024-01-30T19:34:25+00:00" }, { "name": "doctrine/event-manager", - "version": "2.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32" + "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32", - "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/b680156fa328f1dfd874fd48c7026c41570b9c6e", + "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e", "shasum": "" }, "require": { @@ -512,10 +517,10 @@ "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^10", + "doctrine/coding-standard": "^12", "phpstan/phpstan": "^1.8.8", - "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^4.28" + "phpunit/phpunit": "^10.5", + "vimeo/psalm": "^5.24" }, "type": "library", "autoload": { @@ -564,7 +569,7 @@ ], "support": { "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/2.0.0" + "source": "https://github.com/doctrine/event-manager/tree/2.0.1" }, "funding": [ { @@ -580,20 +585,20 @@ "type": "tidelift" } ], - "time": "2022-10-12T20:59:15+00:00" + "time": "2024-05-22T20:47:39+00:00" }, { "name": "doctrine/inflector", - "version": "2.0.8", + "version": "2.0.10", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", - "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", "shasum": "" }, "require": { @@ -655,7 +660,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.8" + "source": "https://github.com/doctrine/inflector/tree/2.0.10" }, "funding": [ { @@ -671,7 +676,7 @@ "type": "tidelift" } ], - "time": "2023-06-16T13:40:37+00:00" + "time": "2024-02-18T20:23:39+00:00" }, { "name": "doctrine/instantiator", @@ -745,28 +750,27 @@ }, { "name": "doctrine/lexer", - "version": "2.1.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "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 || ^10", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.11 || ^5.0" + "vimeo/psalm": "^5.21" }, "type": "library", "autoload": { @@ -803,7 +807,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/2.1.0" + "source": "https://github.com/doctrine/lexer/tree/3.0.1" }, "funding": [ { @@ -819,20 +823,20 @@ "type": "tidelift" } ], - "time": "2022-12-14T08:49:07+00:00" + "time": "2024-02-05T11:56:58+00:00" }, { "name": "doctrine/orm", - "version": "2.17.1", + "version": "2.19.6", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "1a4fe6e0bb67762370937a7e6cee3da40a9122d1" + "reference": "c1bb2ccf4b19c845f91ff7c4c01dc7cbba7f4073" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/1a4fe6e0bb67762370937a7e6cee3da40a9122d1", - "reference": "1a4fe6e0bb67762370937a7e6cee3da40a9122d1", + "url": "https://api.github.com/repos/doctrine/orm/zipball/c1bb2ccf4b19c845f91ff7c4c01dc7cbba7f4073", + "reference": "c1bb2ccf4b19c845f91ff7c4c01dc7cbba7f4073", "shasum": "" }, "require": { @@ -845,7 +849,7 @@ "doctrine/event-manager": "^1.2 || ^2", "doctrine/inflector": "^1.4 || ^2.0", "doctrine/instantiator": "^1.3 || ^2", - "doctrine/lexer": "^2", + "doctrine/lexer": "^2 || ^3", "doctrine/persistence": "^2.4 || ^3", "ext-ctype": "*", "php": "^7.1 || ^8.0", @@ -861,14 +865,14 @@ "doctrine/annotations": "^1.13 || ^2", "doctrine/coding-standard": "^9.0.2 || ^12.0", "phpbench/phpbench": "^0.16.10 || ^1.0", - "phpstan/phpstan": "~1.4.10 || 1.10.35", + "phpstan/phpstan": "~1.4.10 || 1.11.1", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", "psr/log": "^1 || ^2 || ^3", "squizlabs/php_codesniffer": "3.7.2", - "symfony/cache": "^4.4 || ^5.4 || ^6.0", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2", - "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0", - "vimeo/psalm": "4.30.0 || 5.15.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", + "vimeo/psalm": "4.30.0 || 5.24.0" }, "suggest": { "ext-dom": "Provides support for XSD validation for XML mapping files", @@ -881,7 +885,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\ORM\\": "lib/Doctrine/ORM" + "Doctrine\\ORM\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -918,22 +922,22 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.17.1" + "source": "https://github.com/doctrine/orm/tree/2.19.6" }, - "time": "2023-11-17T06:25:40+00:00" + "time": "2024-06-26T17:24:40+00:00" }, { "name": "doctrine/persistence", - "version": "3.2.0", + "version": "3.3.3", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "63fee8c33bef740db6730eb2a750cd3da6495603" + "reference": "b337726451f5d530df338fc7f68dee8781b49779" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/63fee8c33bef740db6730eb2a750cd3da6495603", - "reference": "63fee8c33bef740db6730eb2a750cd3da6495603", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/b337726451f5d530df338fc7f68dee8781b49779", + "reference": "b337726451f5d530df338fc7f68dee8781b49779", "shasum": "" }, "require": { @@ -945,15 +949,14 @@ "doctrine/common": "<2.10" }, "require-dev": { - "composer/package-versions-deprecated": "^1.11", - "doctrine/coding-standard": "^11", + "doctrine/coding-standard": "^12", "doctrine/common": "^3.0", - "phpstan/phpstan": "1.9.4", + "phpstan/phpstan": "1.11.1", "phpstan/phpstan-phpunit": "^1", "phpstan/phpstan-strict-rules": "^1.1", "phpunit/phpunit": "^8.5 || ^9.5", "symfony/cache": "^4.4 || ^5.4 || ^6.0", - "vimeo/psalm": "4.30.0 || 5.3.0" + "vimeo/psalm": "4.30.0 || 5.24.0" }, "type": "library", "autoload": { @@ -1002,7 +1005,7 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/3.2.0" + "source": "https://github.com/doctrine/persistence/tree/3.3.3" }, "funding": [ { @@ -1018,14 +1021,14 @@ "type": "tidelift" } ], - "time": "2023-05-17T18:32:04+00:00" + "time": "2024-06-20T10:14:30+00:00" }, { "name": "elasticsearch/elasticsearch", "version": "v7.17.2", "source": { "type": "git", - "url": "git@github.com:elastic/elasticsearch-php.git", + "url": "https://github.com/elastic/elasticsearch-php.git", "reference": "2d302233f2bb0926812d82823bb820d405e130fc" }, "dist": { @@ -1081,6 +1084,10 @@ "elasticsearch", "search" ], + "support": { + "issues": "https://github.com/elastic/elasticsearch-php/issues", + "source": "https://github.com/elastic/elasticsearch-php/tree/v7.17.2" + }, "time": "2023-04-21T15:31:12+00:00" }, { @@ -1193,88 +1200,6 @@ }, "time": "2022-12-07T11:28:53+00:00" }, - { - "name": "friendsofphp/proxy-manager-lts", - "version": "v1.0.16", - "source": { - "type": "git", - "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git", - "reference": "ecadbdc9052e4ad08c60c8a02268712e50427f7c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/ecadbdc9052e4ad08c60c8a02268712e50427f7c", - "reference": "ecadbdc9052e4ad08c60c8a02268712e50427f7c", - "shasum": "" - }, - "require": { - "laminas/laminas-code": "~3.4.1|^4.0", - "php": ">=7.1", - "symfony/filesystem": "^4.4.17|^5.0|^6.0|^7.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": { - "name": "ocramius/proxy-manager", - "url": "https://github.com/Ocramius/ProxyManager" - } - }, - "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.16" - }, - "funding": [ - { - "url": "https://github.com/Ocramius", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager", - "type": "tidelift" - } - ], - "time": "2023-05-24T07:17:17+00:00" - }, { "name": "lambdish/phunctional", "version": "v2.1.0", @@ -1333,16 +1258,16 @@ }, { "name": "laminas/laminas-code", - "version": "4.13.0", + "version": "4.14.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-code.git", - "reference": "7353d4099ad5388e84737dd16994316a04f48dbf" + "reference": "562e02b7d85cb9142b5116cc76c4c7c162a11a1c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/7353d4099ad5388e84737dd16994316a04f48dbf", - "reference": "7353d4099ad5388e84737dd16994316a04f48dbf", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/562e02b7d85cb9142b5116cc76c4c7c162a11a1c", + "reference": "562e02b7d85cb9142b5116cc76c4c7c162a11a1c", "shasum": "" }, "require": { @@ -1354,7 +1279,7 @@ "laminas/laminas-coding-standard": "^2.5.0", "laminas/laminas-stdlib": "^3.17.0", "phpunit/phpunit": "^10.3.3", - "psalm/plugin-phpunit": "^0.18.4", + "psalm/plugin-phpunit": "^0.19.0", "vimeo/psalm": "^5.15.0" }, "suggest": { @@ -1392,7 +1317,7 @@ "type": "community_bridge" } ], - "time": "2023-10-18T10:00:55+00:00" + "time": "2024-06-17T08:50:25+00:00" }, { "name": "laminas/laminas-zendframework-bridge", @@ -1459,16 +1384,16 @@ }, { "name": "monolog/monolog", - "version": "3.5.0", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448" + "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c915e2634718dbc8a4a15c61b0e62e7a44e14448", - "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f4393b648b78a5408747de94fca38beb5f7e9ef8", + "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8", "shasum": "" }, "require": { @@ -1491,7 +1416,7 @@ "phpstan/phpstan": "^1.9", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "^10.1", + "phpunit/phpunit": "^10.5.17", "predis/predis": "^1.1 || ^2", "ruflin/elastica": "^7", "symfony/mailer": "^5.4 || ^6", @@ -1544,7 +1469,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.5.0" + "source": "https://github.com/Seldaek/monolog/tree/3.7.0" }, "funding": [ { @@ -1556,20 +1481,101 @@ "type": "tidelift" } ], - "time": "2023-10-27T15:32:31+00:00" + "time": "2024-06-28T09:40:51+00:00" + }, + { + "name": "ocramius/proxy-manager", + "version": "2.14.1", + "source": { + "type": "git", + "url": "https://github.com/Ocramius/ProxyManager.git", + "reference": "3990d60ef79001badbab4927a6a811682274a0d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/3990d60ef79001badbab4927a6a811682274a0d1", + "reference": "3990d60ef79001badbab4927a6a811682274a0d1", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.1.0", + "laminas/laminas-code": "^4.4.2", + "php": "~8.0.0", + "webimpress/safe-writer": "^2.2.0" + }, + "conflict": { + "thecodingmachine/safe": "<1.3.3" + }, + "require-dev": { + "codelicia/xulieta": "^0.1.6", + "doctrine/coding-standard": "^9.0.0", + "ext-phar": "*", + "phpbench/phpbench": "^1.0.3", + "phpunit/phpunit": "^9.5.6", + "roave/infection-static-analysis-plugin": "^1.8", + "squizlabs/php_codesniffer": "^3.6.0", + "vimeo/psalm": "^4.8.1" + }, + "suggest": { + "laminas/laminas-json": "To have the JsonRpc adapter (Remote Object feature)", + "laminas/laminas-soap": "To have the Soap adapter (Remote Object feature)", + "laminas/laminas-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)", + "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects" + }, + "type": "library", + "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/" + } + ], + "description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies", + "homepage": "https://github.com/Ocramius/ProxyManager", + "keywords": [ + "aop", + "lazy loading", + "proxy", + "proxy pattern", + "service proxies" + ], + "support": { + "issues": "https://github.com/Ocramius/ProxyManager/issues", + "source": "https://github.com/Ocramius/ProxyManager/tree/2.14.1" + }, + "funding": [ + { + "url": "https://github.com/Ocramius", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager", + "type": "tidelift" + } + ], + "time": "2022-03-05T18:43:14+00:00" }, { "name": "promphp/prometheus_client_php", - "version": "v2.7.2", + "version": "v2.11.0", "source": { "type": "git", "url": "https://github.com/PromPHP/prometheus_client_php.git", - "reference": "735ace7ec6f5ff66d73b91baf8f6d36cbe3f8b76" + "reference": "35d5a68628ea18209938bc1b8796646015ab93cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PromPHP/prometheus_client_php/zipball/735ace7ec6f5ff66d73b91baf8f6d36cbe3f8b76", - "reference": "735ace7ec6f5ff66d73b91baf8f6d36cbe3f8b76", + "url": "https://api.github.com/repos/PromPHP/prometheus_client_php/zipball/35d5a68628ea18209938bc1b8796646015ab93cf", + "reference": "35d5a68628ea18209938bc1b8796646015ab93cf", "shasum": "" }, "require": { @@ -1593,6 +1599,7 @@ }, "suggest": { "ext-apc": "Required if using APCu.", + "ext-pdo": "Required if using PDO.", "ext-redis": "Required if using Redis.", "promphp/prometheus_push_gateway_php": "An easy client for using Prometheus PushGateway.", "symfony/polyfill-apcu": "Required if you use APCu on PHP8.0+" @@ -1621,9 +1628,9 @@ "description": "Prometheus instrumentation library for PHP applications.", "support": { "issues": "https://github.com/PromPHP/prometheus_client_php/issues", - "source": "https://github.com/PromPHP/prometheus_client_php/tree/v2.7.2" + "source": "https://github.com/PromPHP/prometheus_client_php/tree/v2.11.0" }, - "time": "2023-11-06T12:38:23+00:00" + "time": "2024-08-05T07:58:08+00:00" }, { "name": "psr/cache", @@ -1966,20 +1973,20 @@ }, { "name": "ramsey/uuid", - "version": "4.7.5", + "version": "4.7.6", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e" + "reference": "91039bc1faa45ba123c4328958e620d382ec7088" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", - "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12", "ext-json": "*", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" @@ -2042,7 +2049,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.5" + "source": "https://github.com/ramsey/uuid/tree/4.7.6" }, "funding": [ { @@ -2054,7 +2061,7 @@ "type": "tidelift" } ], - "time": "2023-11-08T05:53:05+00:00" + "time": "2024-04-27T21:32:50+00:00" }, { "name": "react/promise", @@ -2130,31 +2137,32 @@ }, { "name": "symfony/cache", - "version": "v6.4.0", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "ac2d25f97b17eec6e19760b6b9962a4f7c44356a" + "reference": "8ac37acee794372f9732fe8a61a8221f6762148e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/ac2d25f97b17eec6e19760b6b9962a4f7c44356a", - "reference": "ac2d25f97b17eec6e19760b6b9962a4f7c44356a", + "url": "https://api.github.com/repos/symfony/cache/zipball/8ac37acee794372f9732fe8a61a8221f6762148e", + "reference": "8ac37acee794372f9732fe8a61a8221f6762148e", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/cache": "^2.0|^3.0", "psr/log": "^1.1|^2|^3", "symfony/cache-contracts": "^2.5|^3", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/service-contracts": "^2.5|^3", - "symfony/var-exporter": "^6.3.6|^7.0" + "symfony/var-exporter": "^6.4|^7.0" }, "conflict": { - "doctrine/dbal": "<2.13.1", - "symfony/dependency-injection": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/var-dumper": "<5.4" + "doctrine/dbal": "<3.6", + "symfony/dependency-injection": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/var-dumper": "<6.4" }, "provide": { "psr/cache-implementation": "2.0|3.0", @@ -2163,15 +2171,15 @@ }, "require-dev": { "cache/integration-tests": "dev-master", - "doctrine/dbal": "^2.13.1|^3|^4", + "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0|^3.0", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/filesystem": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/filesystem": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2206,7 +2214,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.4.0" + "source": "https://github.com/symfony/cache/tree/v7.1.3" }, "funding": [ { @@ -2222,20 +2230,20 @@ "type": "tidelift" } ], - "time": "2023-11-24T19:28:07+00:00" + "time": "2024-07-17T06:10:24+00:00" }, { "name": "symfony/cache-contracts", - "version": "v3.4.0", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "1d74b127da04ffa87aa940abe15446fa89653778" + "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/1d74b127da04ffa87aa940abe15446fa89653778", - "reference": "1d74b127da04ffa87aa940abe15446fa89653778", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/df6a1a44c890faded49a5fca33c2d5c5fd3c2197", + "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197", "shasum": "" }, "require": { @@ -2245,7 +2253,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -2282,7 +2290,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.5.0" }, "funding": [ { @@ -2298,20 +2306,20 @@ "type": "tidelift" } ], - "time": "2023-09-25T12:52:38+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/clock", - "version": "v7.0.0", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", - "reference": "c696b075befdd4bcffe5ef2eab9a32a1a9c0d29d" + "reference": "3dfc8b084853586de51dd1441c6242c76a28cbe7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/c696b075befdd4bcffe5ef2eab9a32a1a9c0d29d", - "reference": "c696b075befdd4bcffe5ef2eab9a32a1a9c0d29d", + "url": "https://api.github.com/repos/symfony/clock/zipball/3dfc8b084853586de51dd1441c6242c76a28cbe7", + "reference": "3dfc8b084853586de51dd1441c6242c76a28cbe7", "shasum": "" }, "require": { @@ -2356,7 +2364,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/v7.0.0" + "source": "https://github.com/symfony/clock/tree/v7.1.1" }, "funding": [ { @@ -2372,38 +2380,38 @@ "type": "tidelift" } ], - "time": "2023-11-25T20:15:12+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/config", - "version": "v6.4.0", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "5d33e0fb707d603330e0edfd4691803a1253572e" + "reference": "2210fc99fa42a259eb6c89d1f724ce0c4d62d5d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/5d33e0fb707d603330e0edfd4691803a1253572e", - "reference": "5d33e0fb707d603330e0edfd4691803a1253572e", + "url": "https://api.github.com/repos/symfony/config/zipball/2210fc99fa42a259eb6c89d1f724ce0c4d62d5d2", + "reference": "2210fc99fa42a259eb6c89d1f724ce0c4d62d5d2", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/filesystem": "^7.1", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/finder": "<5.4", + "symfony/finder": "<6.4", "symfony/service-contracts": "<2.5" }, "require-dev": { - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2431,7 +2439,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/v6.4.0" + "source": "https://github.com/symfony/config/tree/v7.1.1" }, "funding": [ { @@ -2447,51 +2455,50 @@ "type": "tidelift" } ], - "time": "2023-11-09T08:28:32+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/console", - "version": "v6.4.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "a550a7c99daeedef3f9d23fb82e3531525ff11fd" + "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a550a7c99daeedef3f9d23fb82e3531525ff11fd", - "reference": "a550a7c99daeedef3f9d23fb82e3531525ff11fd", + "url": "https://api.github.com/repos/symfony/console/zipball/cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9", + "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.0" + "symfony/string": "^6.4|^7.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/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^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/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2525,7 +2532,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.1" + "source": "https://github.com/symfony/console/tree/v7.1.3" }, "funding": [ { @@ -2541,44 +2548,43 @@ "type": "tidelift" } ], - "time": "2023-11-30T10:54:28+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.4.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "f88ff6428afbeb17cc648c8003bd608534750baf" + "reference": "8126f0be4ff984e4db0140e60917900a53facb49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/f88ff6428afbeb17cc648c8003bd608534750baf", - "reference": "f88ff6428afbeb17cc648c8003bd608534750baf", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/8126f0be4ff984e4db0140e60917900a53facb49", + "reference": "8126f0be4ff984e4db0140e60917900a53facb49", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/container": "^1.1|^2.0", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/service-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.2.10|^7.0" + "symfony/service-contracts": "^3.5", + "symfony/var-exporter": "^6.4|^7.0" }, "conflict": { "ext-psr": "<1.1|>=2", - "symfony/config": "<6.1", - "symfony/finder": "<5.4", - "symfony/proxy-manager-bridge": "<6.3", - "symfony/yaml": "<5.4" + "symfony/config": "<6.4", + "symfony/finder": "<6.4", + "symfony/yaml": "<6.4" }, "provide": { "psr/container-implementation": "1.1|2.0", "symfony/service-implementation": "1.1|2.0|3.0" }, "require-dev": { - "symfony/config": "^6.1|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/config": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2606,7 +2612,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/v6.4.1" + "source": "https://github.com/symfony/dependency-injection/tree/v7.1.3" }, "funding": [ { @@ -2622,20 +2628,20 @@ "type": "tidelift" } ], - "time": "2023-12-01T14:56:37+00:00" + "time": "2024-07-26T07:35:39+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.4.0", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", "shasum": "" }, "require": { @@ -2644,7 +2650,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -2673,7 +2679,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" }, "funding": [ { @@ -2689,32 +2695,32 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/dotenv", - "version": "v6.4.0", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "d0d584a91422ddaa2c94317200d4c4e5b935555f" + "reference": "a26be30fd61678dab694a18a85084cea7673bbf3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/d0d584a91422ddaa2c94317200d4c4e5b935555f", - "reference": "d0d584a91422ddaa2c94317200d4c4e5b935555f", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/a26be30fd61678dab694a18a85084cea7673bbf3", + "reference": "a26be30fd61678dab694a18a85084cea7673bbf3", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "conflict": { - "symfony/console": "<5.4", - "symfony/process": "<5.4" + "symfony/console": "<6.4", + "symfony/process": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2747,7 +2753,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v6.4.0" + "source": "https://github.com/symfony/dotenv/tree/v7.1.3" }, "funding": [ { @@ -2763,26 +2769,26 @@ "type": "tidelift" } ], - "time": "2023-10-26T18:19:48+00:00" + "time": "2024-07-09T19:36:07+00:00" }, { "name": "symfony/error-handler", - "version": "v6.4.0", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788" + "reference": "432bb369952795c61ca1def65e078c4a80dad13c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/c873490a1c97b3a0a4838afc36ff36c112d02788", - "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/432bb369952795c61ca1def65e078c4a80dad13c", + "reference": "432bb369952795c61ca1def65e078c4a80dad13c", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/var-dumper": "^6.4|^7.0" }, "conflict": { "symfony/deprecation-contracts": "<2.5", @@ -2791,7 +2797,7 @@ "require-dev": { "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-kernel": "^6.4|^7.0", - "symfony/serializer": "^5.4|^6.0|^7.0" + "symfony/serializer": "^6.4|^7.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -2822,7 +2828,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/v6.4.0" + "source": "https://github.com/symfony/error-handler/tree/v7.1.3" }, "funding": [ { @@ -2838,28 +2844,28 @@ "type": "tidelift" } ], - "time": "2023-10-18T09:43:34+00:00" + "time": "2024-07-26T13:02:51+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.4.0", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "d76d2632cfc2206eecb5ad2b26cd5934082941b6" + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d76d2632cfc2206eecb5ad2b26cd5934082941b6", - "reference": "d76d2632cfc2206eecb5ad2b26cd5934082941b6", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4", + "symfony/dependency-injection": "<6.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -2868,13 +2874,13 @@ }, "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/error-handler": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0|^7.0" + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2902,7 +2908,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/v6.4.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.1" }, "funding": [ { @@ -2918,20 +2924,20 @@ "type": "tidelift" } ], - "time": "2023-07-27T06:52:43+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.4.0", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", - "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", "shasum": "" }, "require": { @@ -2941,7 +2947,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -2978,7 +2984,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" }, "funding": [ { @@ -2994,20 +3000,20 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/filesystem", - "version": "v7.0.0", + "version": "v7.1.2", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7" + "reference": "92a91985250c251de9b947a14bb2c9390b1a562c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/7da8ea2362a283771478c5f7729cfcb43a76b8b7", - "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/92a91985250c251de9b947a14bb2c9390b1a562c", + "reference": "92a91985250c251de9b947a14bb2c9390b1a562c", "shasum": "" }, "require": { @@ -3015,6 +3021,9 @@ "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, + "require-dev": { + "symfony/process": "^6.4|^7.0" + }, "type": "library", "autoload": { "psr-4": { @@ -3041,7 +3050,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.0.0" + "source": "https://github.com/symfony/filesystem/tree/v7.1.2" }, "funding": [ { @@ -3057,20 +3066,20 @@ "type": "tidelift" } ], - "time": "2023-07-27T06:33:22+00:00" + "time": "2024-06-28T10:03:55+00:00" }, { "name": "symfony/finder", - "version": "v7.0.0", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56" + "reference": "717c6329886f32dc65e27461f80f2a465412fdca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", - "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", + "url": "https://api.github.com/repos/symfony/finder/zipball/717c6329886f32dc65e27461f80f2a465412fdca", + "reference": "717c6329886f32dc65e27461f80f2a465412fdca", "shasum": "" }, "require": { @@ -3105,7 +3114,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.0.0" + "source": "https://github.com/symfony/finder/tree/v7.1.3" }, "funding": [ { @@ -3121,111 +3130,110 @@ "type": "tidelift" } ], - "time": "2023-10-31T17:59:56+00:00" + "time": "2024-07-24T07:08:44+00:00" }, { "name": "symfony/framework-bundle", - "version": "v6.4.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "ac22d760bf9ff4440a1b6c7caef34d38b44290aa" + "reference": "a32ec544bd501eb4619eb977860ad3076ee55061" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/ac22d760bf9ff4440a1b6c7caef34d38b44290aa", - "reference": "ac22d760bf9ff4440a1b6c7caef34d38b44290aa", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/a32ec544bd501eb4619eb977860ad3076ee55061", + "reference": "a32ec544bd501eb4619eb977860ad3076ee55061", "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|^7.0", + "php": ">=8.2", + "symfony/cache": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^7.1", "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/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/filesystem": "^7.1", + "symfony/finder": "^6.4|^7.0", "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4", + "symfony/http-kernel": "^6.4|^7.0", "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": "<6.4", "symfony/asset-mapper": "<6.4", - "symfony/clock": "<6.3", - "symfony/console": "<5.4", + "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/dotenv": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/lock": "<6.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", "symfony/mime": "<6.4", - "symfony/property-access": "<5.4", - "symfony/property-info": "<5.4", - "symfony/scheduler": "<6.4", - "symfony/security-core": "<5.4", - "symfony/security-csrf": "<5.4", + "symfony/property-access": "<6.4", + "symfony/property-info": "<6.4", + "symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4", + "symfony/security-core": "<6.4", + "symfony/security-csrf": "<6.4", "symfony/serializer": "<6.4", - "symfony/stopwatch": "<5.4", + "symfony/stopwatch": "<6.4", "symfony/translation": "<6.4", - "symfony/twig-bridge": "<5.4", - "symfony/twig-bundle": "<5.4", + "symfony/twig-bridge": "<6.4", + "symfony/twig-bundle": "<6.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": "^6.4|^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/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^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/dotenv": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/html-sanitizer": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/mailer": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", "symfony/mime": "^6.4|^7.0", - "symfony/notifier": "^5.4|^6.0|^7.0", + "symfony/notifier": "^6.4|^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|^7.0", - "symfony/security-bundle": "^5.4|^6.0|^7.0", - "symfony/semaphore": "^5.4|^6.0|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/scheduler": "^6.4.4|^7.0.4", + "symfony/security-bundle": "^6.4|^7.0", + "symfony/semaphore": "^6.4|^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/stopwatch": "^6.4|^7.0", + "symfony/string": "^6.4|^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/twig-bundle": "^6.4|^7.0", + "symfony/type-info": "^7.1", + "symfony/uid": "^6.4|^7.0", "symfony/validator": "^6.4|^7.0", - "symfony/web-link": "^5.4|^6.0|^7.0", + "symfony/web-link": "^6.4|^7.0", "symfony/workflow": "^6.4|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0", - "twig/twig": "^2.10|^3.0" + "symfony/yaml": "^6.4|^7.0", + "twig/twig": "^3.0.4" }, "type": "symfony-bundle", "autoload": { @@ -3253,7 +3261,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.1" + "source": "https://github.com/symfony/framework-bundle/tree/v7.1.3" }, "funding": [ { @@ -3269,20 +3277,20 @@ "type": "tidelift" } ], - "time": "2023-12-01T16:35:22+00:00" + "time": "2024-07-26T13:24:34+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.0.0", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "47d72323200934694def5d57083899d774a2b110" + "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/47d72323200934694def5d57083899d774a2b110", - "reference": "47d72323200934694def5d57083899d774a2b110", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", + "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", "shasum": "" }, "require": { @@ -3330,7 +3338,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.0.0" + "source": "https://github.com/symfony/http-foundation/tree/v7.1.3" }, "funding": [ { @@ -3346,76 +3354,77 @@ "type": "tidelift" } ], - "time": "2023-11-07T15:10:37+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "2953274c16a229b3933ef73a6898e18388e12e1b" + "reference": "db9702f3a04cc471ec8c70e881825db26ac5f186" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/2953274c16a229b3933ef73a6898e18388e12e1b", - "reference": "2953274c16a229b3933ef73a6898e18388e12e1b", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/db9702f3a04cc471ec8c70e881825db26ac5f186", + "reference": "db9702f3a04cc471ec8c70e881825db26ac5f186", "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/event-dispatcher": "^6.4|^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/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/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.0.4" }, "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/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", "symfony/dependency-injection": "^6.4|^7.0", - "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/dom-crawler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^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.3|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4|^6.0|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^7.1", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^7.1", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/uid": "^6.4|^7.0", "symfony/validator": "^6.4|^7.0", - "symfony/var-exporter": "^6.2|^7.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "twig/twig": "^3.0.4" }, "type": "library", "autoload": { @@ -3443,7 +3452,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.1" + "source": "https://github.com/symfony/http-kernel/tree/v7.1.3" }, "funding": [ { @@ -3459,50 +3468,49 @@ "type": "tidelift" } ], - "time": "2023-12-01T17:02:02+00:00" + "time": "2024-07-26T14:58:15+00:00" }, { "name": "symfony/messenger", - "version": "v6.4.0", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/messenger.git", - "reference": "a6f32d0e9b9c7d2d47c7bea3cd1e8a9c0f781fb4" + "reference": "604e182a7758ceea35921a8ad5dd492a6e13bae4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/messenger/zipball/a6f32d0e9b9c7d2d47c7bea3cd1e8a9c0f781fb4", - "reference": "a6f32d0e9b9c7d2d47c7bea3cd1e8a9c0f781fb4", + "url": "https://api.github.com/repos/symfony/messenger/zipball/604e182a7758ceea35921a8ad5dd492a6e13bae4", + "reference": "604e182a7758ceea35921a8ad5dd492a6e13bae4", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", - "symfony/clock": "^6.3|^7.0", - "symfony/deprecation-contracts": "^2.5|^3" + "symfony/clock": "^6.4|^7.0" }, "conflict": { - "symfony/console": "<6.3", - "symfony/event-dispatcher": "<5.4", + "symfony/console": "<6.4", + "symfony/event-dispatcher": "<6.4", "symfony/event-dispatcher-contracts": "<2.5", - "symfony/framework-bundle": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/serializer": "<5.4" + "symfony/framework-bundle": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/serializer": "<6.4" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/console": "^6.3|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4|^6.0|^7.0", - "symfony/rate-limiter": "^5.4|^6.0|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/serializer": "^5.4|^6.0|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/validator": "^5.4|^6.0|^7.0" + "symfony/stopwatch": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -3530,7 +3538,7 @@ "description": "Helps applications send and receive messages to/from other applications or via message queues", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/messenger/tree/v6.4.0" + "source": "https://github.com/symfony/messenger/tree/v7.1.3" }, "funding": [ { @@ -3546,20 +3554,20 @@ "type": "tidelift" } ], - "time": "2023-11-24T19:28:07+00:00" + "time": "2024-07-09T19:36:07+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.28.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + "reference": "0424dff1c58f028c451efff2045f5d92410bd540" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540", + "reference": "0424dff1c58f028c451efff2045f5d92410bd540", "shasum": "" }, "require": { @@ -3573,9 +3581,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3612,7 +3617,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0" }, "funding": [ { @@ -3628,20 +3633,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.28.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "875e90aeea2777b6f135677f618529449334a612" + "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", - "reference": "875e90aeea2777b6f135677f618529449334a612", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/64647a7c30b2283f5d49b874d84a18fc22054b7a", + "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a", "shasum": "" }, "require": { @@ -3652,9 +3657,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3693,7 +3695,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.30.0" }, "funding": [ { @@ -3709,20 +3711,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.28.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" + "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb", + "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb", "shasum": "" }, "require": { @@ -3733,9 +3735,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3777,7 +3776,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0" }, "funding": [ { @@ -3793,20 +3792,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.28.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "42292d99c55abe617799667f454222c54c60e229" + "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", - "reference": "42292d99c55abe617799667f454222c54c60e229", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c", + "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c", "shasum": "" }, "require": { @@ -3820,9 +3819,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3860,7 +3856,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0" }, "funding": [ { @@ -3876,20 +3872,20 @@ "type": "tidelift" } ], - "time": "2023-07-28T09:04:16+00:00" + "time": "2024-06-19T12:30:46+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.28.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" + "reference": "10112722600777e02d2745716b70c5db4ca70442" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/10112722600777e02d2745716b70c5db4ca70442", + "reference": "10112722600777e02d2745716b70c5db4ca70442", "shasum": "" }, "require": { @@ -3897,9 +3893,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3936,7 +3929,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.30.0" }, "funding": [ { @@ -3952,20 +3945,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-06-19T12:30:46+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.28.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" + "reference": "77fa7995ac1b21ab60769b7323d600a991a90433" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433", + "reference": "77fa7995ac1b21ab60769b7323d600a991a90433", "shasum": "" }, "require": { @@ -3973,9 +3966,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -4019,7 +4009,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0" }, "funding": [ { @@ -4035,31 +4025,27 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.28.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" + "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", - "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9", + "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-php80": "^1.14" + "php": ">=7.1" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -4099,7 +4085,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.30.0" }, "funding": [ { @@ -4115,20 +4101,20 @@ "type": "tidelift" } ], - "time": "2023-08-16T06:22:46+00:00" + "time": "2024-06-19T12:35:24+00:00" }, { "name": "symfony/routing", - "version": "v7.0.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "fc55062907669835af6408558ae4d1dafef74b1e" + "reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/fc55062907669835af6408558ae4d1dafef74b1e", - "reference": "fc55062907669835af6408558ae4d1dafef74b1e", + "url": "https://api.github.com/repos/symfony/routing/zipball/8a908a3f22d5a1b5d297578c2ceb41b02fa916d0", + "reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0", "shasum": "" }, "require": { @@ -4180,7 +4166,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.0.1" + "source": "https://github.com/symfony/routing/tree/v7.1.3" }, "funding": [ { @@ -4196,25 +4182,26 @@ "type": "tidelift" } ], - "time": "2023-12-01T15:10:06+00:00" + "time": "2024-07-17T06:10:24+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.4.0", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838" + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b3313c2dbffaf71c8de2934e2ea56ed2291a3838", - "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^2.0" + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -4222,7 +4209,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -4262,7 +4249,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" }, "funding": [ { @@ -4278,20 +4265,20 @@ "type": "tidelift" } ], - "time": "2023-07-30T20:28:31+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/string", - "version": "v7.0.0", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "92bd2bfbba476d4a1838e5e12168bef2fd1e6620" + "reference": "ea272a882be7f20cad58d5d78c215001617b7f07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/92bd2bfbba476d4a1838e5e12168bef2fd1e6620", - "reference": "92bd2bfbba476d4a1838e5e12168bef2fd1e6620", + "url": "https://api.github.com/repos/symfony/string/zipball/ea272a882be7f20cad58d5d78c215001617b7f07", + "reference": "ea272a882be7f20cad58d5d78c215001617b7f07", "shasum": "" }, "require": { @@ -4305,6 +4292,7 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { + "symfony/emoji": "^7.1", "symfony/error-handler": "^6.4|^7.0", "symfony/http-client": "^6.4|^7.0", "symfony/intl": "^6.4|^7.0", @@ -4348,7 +4336,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.0.0" + "source": "https://github.com/symfony/string/tree/v7.1.3" }, "funding": [ { @@ -4364,20 +4352,20 @@ "type": "tidelift" } ], - "time": "2023-11-29T08:40:23+00:00" + "time": "2024-07-22T10:25:37+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.4.0", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "dee0c6e5b4c07ce851b462530088e64b255ac9c5" + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/dee0c6e5b4c07ce851b462530088e64b255ac9c5", - "reference": "dee0c6e5b4c07ce851b462530088e64b255ac9c5", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", "shasum": "" }, "require": { @@ -4386,7 +4374,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -4426,7 +4414,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" }, "funding": [ { @@ -4442,69 +4430,69 @@ "type": "tidelift" } ], - "time": "2023-07-25T15:08:44+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/twig-bridge", - "version": "v6.4.0", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "142bc3ad4a61d7eedf7cc21d8ef2bd8a8e7417bf" + "reference": "96e6e12a63db80bcedefc012042d2cb2d1a015f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/142bc3ad4a61d7eedf7cc21d8ef2bd8a8e7417bf", - "reference": "142bc3ad4a61d7eedf7cc21d8ef2bd8a8e7417bf", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/96e6e12a63db80bcedefc012042d2cb2d1a015f8", + "reference": "96e6e12a63db80bcedefc012042d2cb2d1a015f8", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/translation-contracts": "^2.5|^3", - "twig/twig": "^2.13|^3.0.4" + "twig/twig": "^3.9" }, "conflict": { "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/console": "<5.4", - "symfony/form": "<6.3", - "symfony/http-foundation": "<5.4", + "symfony/console": "<6.4", + "symfony/form": "<6.4", + "symfony/http-foundation": "<6.4", "symfony/http-kernel": "<6.4", - "symfony/mime": "<6.2", + "symfony/mime": "<6.4", "symfony/serializer": "<6.4", - "symfony/translation": "<5.4", - "symfony/workflow": "<5.4" + "symfony/translation": "<6.4", + "symfony/workflow": "<6.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/asset": "^6.4|^7.0", + "symfony/asset-mapper": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/emoji": "^7.1", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", "symfony/form": "^6.4|^7.0", - "symfony/html-sanitizer": "^6.1|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/html-sanitizer": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", - "symfony/mime": "^6.2|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/mime": "^6.4|^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/property-info": "^6.4|^7.0", + "symfony/routing": "^6.4|^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|^7.0", - "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", + "symfony/security-core": "^6.4|^7.0", + "symfony/security-csrf": "^6.4|^7.0", + "symfony/security-http": "^6.4|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/workflow": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0", "twig/cssinliner-extra": "^2.12|^3", "twig/inky-extra": "^2.12|^3", "twig/markdown-extra": "^2.12|^3" @@ -4535,7 +4523,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.0" + "source": "https://github.com/symfony/twig-bridge/tree/v7.1.1" }, "funding": [ { @@ -4551,47 +4539,47 @@ "type": "tidelift" } ], - "time": "2023-11-25T08:25:13+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/twig-bundle", - "version": "v6.4.0", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "35d84393e598dfb774e6a2bf49e5229a8a6dbe4c" + "reference": "d48c2f08c2f315e749f0e18fc4945b7be8afe1e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/35d84393e598dfb774e6a2bf49e5229a8a6dbe4c", - "reference": "35d84393e598dfb774e6a2bf49e5229a8a6dbe4c", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/d48c2f08c2f315e749f0e18fc4945b7be8afe1e5", + "reference": "d48c2f08c2f315e749f0e18fc4945b7be8afe1e5", "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": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0", + "twig/twig": "^3.0.4" }, "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", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/web-link": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" }, "type": "symfony-bundle", "autoload": { @@ -4619,7 +4607,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.0" + "source": "https://github.com/symfony/twig-bundle/tree/v7.1.1" }, "funding": [ { @@ -4635,24 +4623,24 @@ "type": "tidelift" } ], - "time": "2023-11-07T14:57:07+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/validator", - "version": "v6.4.0", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "33e1f3bb76ef70e3170e12f878aefb9c69b0fc4c" + "reference": "ba711a6cfc008544dad059abb3c1d997f1472237" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/33e1f3bb76ef70e3170e12f878aefb9c69b0fc4c", - "reference": "33e1f3bb76ef70e3170e12f878aefb9c69b0fc4c", + "url": "https://api.github.com/repos/symfony/validator/zipball/ba711a6cfc008544dad059abb3c1d997f1472237", + "reference": "ba711a6cfc008544dad059abb3c1d997f1472237", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", @@ -4660,34 +4648,34 @@ "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", - "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/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|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0" + "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/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/translation": "^6.4.3|^7.0.3", + "symfony/type-info": "^7.1", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4695,7 +4683,8 @@ "Symfony\\Component\\Validator\\": "" }, "exclude-from-classmap": [ - "/Tests/" + "/Tests/", + "/Resources/bin/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4715,7 +4704,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.0" + "source": "https://github.com/symfony/validator/tree/v7.1.3" }, "funding": [ { @@ -4731,20 +4720,20 @@ "type": "tidelift" } ], - "time": "2023-11-29T07:47:42+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.0.0", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "cf0220fc7607476fd0d001ab3ed9e830d1fdda56" + "reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cf0220fc7607476fd0d001ab3ed9e830d1fdda56", - "reference": "cf0220fc7607476fd0d001ab3ed9e830d1fdda56", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/86af4617cca75a6e28598f49ae0690f3b9d4591f", + "reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f", "shasum": "" }, "require": { @@ -4798,7 +4787,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.0.0" + "source": "https://github.com/symfony/var-dumper/tree/v7.1.3" }, "funding": [ { @@ -4814,26 +4803,28 @@ "type": "tidelift" } ], - "time": "2023-11-27T12:39:18+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/var-exporter", - "version": "v7.0.1", + "version": "v7.1.2", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "a3d7c877414fcd59ab7075ecdc3b8f9c00f7bcc3" + "reference": "b80a669a2264609f07f1667f891dbfca25eba44c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/a3d7c877414fcd59ab7075ecdc3b8f9c00f7bcc3", - "reference": "a3d7c877414fcd59ab7075ecdc3b8f9c00f7bcc3", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/b80a669a2264609f07f1667f891dbfca25eba44c", + "reference": "b80a669a2264609f07f1667f891dbfca25eba44c", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { + "symfony/property-access": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", @@ -4872,7 +4863,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.0.1" + "source": "https://github.com/symfony/var-exporter/tree/v7.1.2" }, "funding": [ { @@ -4888,32 +4879,31 @@ "type": "tidelift" } ], - "time": "2023-11-30T11:38:21+00:00" + "time": "2024-06-28T08:00:31+00:00" }, { "name": "symfony/yaml", - "version": "v6.4.0", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "4f9237a1bb42455d609e6687d2613dde5b41a587" + "reference": "fa34c77015aa6720469db7003567b9f772492bf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/4f9237a1bb42455d609e6687d2613dde5b41a587", - "reference": "4f9237a1bb42455d609e6687d2613dde5b41a587", + "url": "https://api.github.com/repos/symfony/yaml/zipball/fa34c77015aa6720469db7003567b9f772492bf2", + "reference": "fa34c77015aa6720469db7003567b9f772492bf2", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "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" }, "bin": [ "Resources/bin/yaml-lint" @@ -4944,7 +4934,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.0" + "source": "https://github.com/symfony/yaml/tree/v7.1.1" }, "funding": [ { @@ -4960,34 +4950,41 @@ "type": "tidelift" } ], - "time": "2023-11-06T11:00:25+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "twig/twig", - "version": "v3.8.0", + "version": "v3.10.3", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d" + "reference": "67f29781ffafa520b0bbfbd8384674b42db04572" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/9d15f0ac07f44dc4217883ec6ae02fd555c6f71d", - "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/67f29781ffafa520b0bbfbd8384674b42db04572", + "reference": "67f29781ffafa520b0bbfbd8384674b42db04572", "shasum": "" }, "require": { "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-mbstring": "^1.3", "symfony/polyfill-php80": "^1.22" }, "require-dev": { "psr/container": "^1.0|^2.0", - "symfony/phpunit-bridge": "^5.4.9|^6.3|^7.0" + "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" }, "type": "library", "autoload": { + "files": [ + "src/Resources/core.php", + "src/Resources/debug.php", + "src/Resources/escaper.php", + "src/Resources/string_loader.php" + ], "psr-4": { "Twig\\": "src/" } @@ -5020,7 +5017,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.8.0" + "source": "https://github.com/twigphp/Twig/tree/v3.10.3" }, "funding": [ { @@ -5032,22 +5029,81 @@ "type": "tidelift" } ], - "time": "2023-11-21T18:54:41+00:00" + "time": "2024-05-16T10:04:27+00:00" + }, + { + "name": "webimpress/safe-writer", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/webimpress/safe-writer.git", + "reference": "9d37cc8bee20f7cb2f58f6e23e05097eab5072e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webimpress/safe-writer/zipball/9d37cc8bee20f7cb2f58f6e23e05097eab5072e6", + "reference": "9d37cc8bee20f7cb2f58f6e23e05097eab5072e6", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5.4", + "vimeo/psalm": "^4.7", + "webimpress/coding-standard": "^1.2.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev", + "dev-develop": "2.3.x-dev", + "dev-release-1.0": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Webimpress\\SafeWriter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "description": "Tool to write files safely, to avoid race conditions", + "keywords": [ + "concurrent write", + "file writer", + "race condition", + "safe writer", + "webimpress" + ], + "support": { + "issues": "https://github.com/webimpress/safe-writer/issues", + "source": "https://github.com/webimpress/safe-writer/tree/2.2.0" + }, + "funding": [ + { + "url": "https://github.com/michalbundyra", + "type": "github" + } + ], + "time": "2021-04-19T16:34:45+00:00" } ], "packages-dev": [ { "name": "amphp/amp", - "version": "v2.6.2", + "version": "v2.6.4", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb" + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", + "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", "shasum": "" }, "require": { @@ -5059,8 +5115,8 @@ "ext-json": "*", "jetbrains/phpstorm-stubs": "^2019.3", "phpunit/phpunit": "^7 | ^8 | ^9", - "psalm/phar": "^3.11@dev", - "react/promise": "^2" + "react/promise": "^2", + "vimeo/psalm": "^3.12" }, "type": "library", "extra": { @@ -5115,7 +5171,7 @@ "support": { "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.2" + "source": "https://github.com/amphp/amp/tree/v2.6.4" }, "funding": [ { @@ -5123,20 +5179,20 @@ "type": "github" } ], - "time": "2022-02-20T17:52:18+00:00" + "time": "2024-03-21T18:52:26+00:00" }, { "name": "amphp/byte-stream", - "version": "v1.8.1", + "version": "v1.8.2", "source": { "type": "git", "url": "https://github.com/amphp/byte-stream.git", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd" + "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/4f0e968ba3798a423730f567b1b50d3441c16ddc", + "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc", "shasum": "" }, "require": { @@ -5152,11 +5208,6 @@ "psalm/phar": "^3.11.4" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, "autoload": { "files": [ "lib/functions.php" @@ -5180,7 +5231,7 @@ } ], "description": "A stream abstraction to make working with non-blocking I/O simple.", - "homepage": "http://amphp.org/byte-stream", + "homepage": "https://amphp.org/byte-stream", "keywords": [ "amp", "amphp", @@ -5190,9 +5241,8 @@ "stream" ], "support": { - "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/byte-stream/issues", - "source": "https://github.com/amphp/byte-stream/tree/v1.8.1" + "source": "https://github.com/amphp/byte-stream/tree/v1.8.2" }, "funding": [ { @@ -5200,20 +5250,20 @@ "type": "github" } ], - "time": "2021-03-30T17:13:30+00:00" + "time": "2024-04-13T18:00:56+00:00" }, { "name": "behat/behat", - "version": "v3.13.0", + "version": "v3.14.0", "source": { "type": "git", "url": "https://github.com/Behat/Behat.git", - "reference": "9dd7cdb309e464ddeab095cd1a5151c2dccba4ab" + "reference": "2a3832d9cb853a794af3a576f9e524ae460f3340" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Behat/zipball/9dd7cdb309e464ddeab095cd1a5151c2dccba4ab", - "reference": "9dd7cdb309e464ddeab095cd1a5151c2dccba4ab", + "url": "https://api.github.com/repos/Behat/Behat/zipball/2a3832d9cb853a794af3a576f9e524ae460f3340", + "reference": "2a3832d9cb853a794af3a576f9e524ae460f3340", "shasum": "" }, "require": { @@ -5222,18 +5272,18 @@ "ext-mbstring": "*", "php": "^7.2 || ^8.0", "psr/container": "^1.0 || ^2.0", - "symfony/config": "^4.4 || ^5.0 || ^6.0", - "symfony/console": "^4.4 || ^5.0 || ^6.0", - "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0", - "symfony/event-dispatcher": "^4.4 || ^5.0 || ^6.0", - "symfony/translation": "^4.4 || ^5.0 || ^6.0", - "symfony/yaml": "^4.4 || ^5.0 || ^6.0" + "symfony/config": "^4.4 || ^5.0 || ^6.0 || ^7.0", + "symfony/console": "^4.4 || ^5.0 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0 || ^7.0", + "symfony/event-dispatcher": "^4.4 || ^5.0 || ^6.0 || ^7.0", + "symfony/translation": "^4.4 || ^5.0 || ^6.0 || ^7.0", + "symfony/yaml": "^4.4 || ^5.0 || ^6.0 || ^7.0" }, "require-dev": { "herrera-io/box": "~1.6.1", "phpspec/prophecy": "^1.15", "phpunit/phpunit": "^8.5 || ^9.0", - "symfony/process": "^4.4 || ^5.0 || ^6.0", + "symfony/process": "^4.4 || ^5.0 || ^6.0 || ^7.0", "vimeo/psalm": "^4.8" }, "suggest": { @@ -5285,9 +5335,9 @@ ], "support": { "issues": "https://github.com/Behat/Behat/issues", - "source": "https://github.com/Behat/Behat/tree/v3.13.0" + "source": "https://github.com/Behat/Behat/tree/v3.14.0" }, - "time": "2023-04-18T15:40:53+00:00" + "time": "2023-12-09T13:55:02+00:00" }, { "name": "behat/gherkin", @@ -5354,26 +5404,28 @@ }, { "name": "behat/mink", - "version": "v1.10.0", + "version": "v1.11.0", "source": { "type": "git", "url": "https://github.com/minkphp/Mink.git", - "reference": "19e58905632e7cfdc5b2bafb9b950a3521af32c5" + "reference": "d8527fdf8785aad38455fb426af457ab9937aece" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/Mink/zipball/19e58905632e7cfdc5b2bafb9b950a3521af32c5", - "reference": "19e58905632e7cfdc5b2bafb9b950a3521af32c5", + "url": "https://api.github.com/repos/minkphp/Mink/zipball/d8527fdf8785aad38455fb426af457ab9937aece", + "reference": "d8527fdf8785aad38455fb426af457ab9937aece", "shasum": "" }, "require": { "php": ">=7.2", - "symfony/css-selector": "^4.4 || ^5.0 || ^6.0" + "symfony/css-selector": "^4.4 || ^5.0 || ^6.0 || ^7.0" }, "require-dev": { + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-phpunit": "^1.3", "phpunit/phpunit": "^8.5.22 || ^9.5.11", - "symfony/error-handler": "^4.4 || ^5.0 || ^6.0", - "symfony/phpunit-bridge": "^5.4 || ^6.0" + "symfony/error-handler": "^4.4 || ^5.0 || ^6.0 || ^7.0", + "symfony/phpunit-bridge": "^5.4 || ^6.0 || ^7.0" }, "suggest": { "behat/mink-browserkit-driver": "fast headless driver for any app without JS emulation", @@ -5412,37 +5464,40 @@ ], "support": { "issues": "https://github.com/minkphp/Mink/issues", - "source": "https://github.com/minkphp/Mink/tree/v1.10.0" + "source": "https://github.com/minkphp/Mink/tree/v1.11.0" }, - "time": "2022-03-28T14:22:43+00:00" + "time": "2023-12-09T11:23:23+00:00" }, { "name": "behat/mink-browserkit-driver", - "version": "v2.1.0", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/minkphp/MinkBrowserKitDriver.git", - "reference": "d2768e6c17b293d86d8fcff54cbb9e6ad938fee1" + "reference": "16d53476e42827ed3aafbfa4fde17a1743eafd50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/d2768e6c17b293d86d8fcff54cbb9e6ad938fee1", - "reference": "d2768e6c17b293d86d8fcff54cbb9e6ad938fee1", + "url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/16d53476e42827ed3aafbfa4fde17a1743eafd50", + "reference": "16d53476e42827ed3aafbfa4fde17a1743eafd50", "shasum": "" }, "require": { - "behat/mink": "^1.9.0@dev", + "behat/mink": "^1.11.0@dev", + "ext-dom": "*", "php": ">=7.2", - "symfony/browser-kit": "^4.4 || ^5.0 || ^6.0", - "symfony/dom-crawler": "^4.4 || ^5.0 || ^6.0" + "symfony/browser-kit": "^4.4 || ^5.0 || ^6.0 || ^7.0", + "symfony/dom-crawler": "^4.4 || ^5.0 || ^6.0 || ^7.0" }, "require-dev": { "mink/driver-testsuite": "dev-master", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-phpunit": "^1.3", "phpunit/phpunit": "^8.5 || ^9.5", - "symfony/error-handler": "^4.4 || ^5.0 || ^6.0", - "symfony/http-client": "^4.4 || ^5.0 || ^6.0", - "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0", - "symfony/mime": "^4.4 || ^5.0 || ^6.0", + "symfony/error-handler": "^4.4 || ^5.0 || ^6.0 || ^7.0", + "symfony/http-client": "^4.4 || ^5.0 || ^6.0 || ^7.0", + "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0 || ^7.0", + "symfony/mime": "^4.4 || ^5.0 || ^6.0 || ^7.0", "yoast/phpunit-polyfills": "^1.0" }, "type": "mink-driver", @@ -5477,9 +5532,9 @@ ], "support": { "issues": "https://github.com/minkphp/MinkBrowserKitDriver/issues", - "source": "https://github.com/minkphp/MinkBrowserKitDriver/tree/v2.1.0" + "source": "https://github.com/minkphp/MinkBrowserKitDriver/tree/v2.2.0" }, - "time": "2022-03-28T14:33:51+00:00" + "time": "2023-12-09T11:30:50+00:00" }, { "name": "behat/transliterator", @@ -5532,16 +5587,16 @@ }, { "name": "codelytv/coding-style", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/CodelyTV/php-coding_style-codely.git", - "reference": "ffd9d00d85360350ffc07a81bc9e25abf75a59f6" + "reference": "41d7e6b651619467b05018666606a1ef0958263e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CodelyTV/php-coding_style-codely/zipball/ffd9d00d85360350ffc07a81bc9e25abf75a59f6", - "reference": "ffd9d00d85360350ffc07a81bc9e25abf75a59f6", + "url": "https://api.github.com/repos/CodelyTV/php-coding_style-codely/zipball/41d7e6b651619467b05018666606a1ef0958263e", + "reference": "41d7e6b651619467b05018666606a1ef0958263e", "shasum": "" }, "require": { @@ -5570,7 +5625,7 @@ ], "support": { "issues": "https://github.com/CodelyTV/php-coding_style-codely/issues", - "source": "https://github.com/CodelyTV/php-coding_style-codely/tree/1.2.0" + "source": "https://github.com/CodelyTV/php-coding_style-codely/tree/1.3.0" }, "funding": [ { @@ -5578,7 +5633,7 @@ "type": "custom" } ], - "time": "2023-10-24T09:12:06+00:00" + "time": "2024-08-05T14:17:14+00:00" }, { "name": "composer/package-versions-deprecated", @@ -5655,30 +5710,38 @@ }, { "name": "composer/pcre", - "version": "3.1.1", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9" + "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/00104306927c7a0919b4ced2aaa6782c1e61a3c9", - "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9", + "url": "https://api.github.com/repos/composer/pcre/zipball/ea4ab6f9580a4fd221e0418f2c357cdd39102a90", + "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, + "conflict": { + "phpstan/phpstan": "<1.11.8" + }, "require-dev": { - "phpstan/phpstan": "^1.3", + "phpstan/phpstan": "^1.11.8", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "phpunit/phpunit": "^8 || ^9" }, "type": "library", "extra": { "branch-alias": { "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "autoload": { @@ -5706,7 +5769,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.1" + "source": "https://github.com/composer/pcre/tree/3.2.0" }, "funding": [ { @@ -5722,20 +5785,20 @@ "type": "tidelift" } ], - "time": "2023-10-11T07:11:09+00:00" + "time": "2024-07-25T09:36:02+00:00" }, { "name": "composer/semver", - "version": "3.4.0", + "version": "3.4.2", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6", + "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6", "shasum": "" }, "require": { @@ -5787,7 +5850,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" + "source": "https://github.com/composer/semver/tree/3.4.2" }, "funding": [ { @@ -5803,20 +5866,20 @@ "type": "tidelift" } ], - "time": "2023-08-31T09:50:34+00:00" + "time": "2024-07-12T11:35:52+00:00" }, { "name": "composer/xdebug-handler", - "version": "3.0.3", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", "shasum": "" }, "require": { @@ -5827,7 +5890,7 @@ "require-dev": { "phpstan/phpstan": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", "autoload": { @@ -5851,9 +5914,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/3.0.3" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" }, "funding": [ { @@ -5869,7 +5932,7 @@ "type": "tidelift" } ], - "time": "2022-02-25T21:32:43+00:00" + "time": "2024-05-06T16:37:16+00:00" }, { "name": "dnoegel/php-xdg-base-dir", @@ -5910,16 +5973,16 @@ }, { "name": "fakerphp/faker", - "version": "v1.23.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01" + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", - "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", "shasum": "" }, "require": { @@ -5945,11 +6008,6 @@ "ext-mbstring": "Required for multibyte Unicode string functionality." }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "v1.21-dev" - } - }, "autoload": { "psr-4": { "Faker\\": "src/Faker/" @@ -5972,9 +6030,9 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.23.0" + "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1" }, - "time": "2023-06-12T08:44:38+00:00" + "time": "2024-01-02T13:46:09+00:00" }, { "name": "felixfbecker/advanced-json-rpc", @@ -6079,16 +6137,16 @@ }, { "name": "fidry/cpu-core-counter", - "version": "0.5.1", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "b58e5a3933e541dc286cc91fc4f3898bbc6f1623" + "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/b58e5a3933e541dc286cc91fc4f3898bbc6f1623", - "reference": "b58e5a3933e541dc286cc91fc4f3898bbc6f1623", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42", + "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42", "shasum": "" }, "require": { @@ -6096,13 +6154,13 @@ }, "require-dev": { "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", "phpstan/extension-installer": "^1.2.0", "phpstan/phpstan": "^1.9.2", "phpstan/phpstan-deprecation-rules": "^1.0.0", "phpstan/phpstan-phpunit": "^1.2.2", "phpstan/phpstan-strict-rules": "^1.4.4", - "phpunit/phpunit": "^9.5.26 || ^8.5.31", - "theofidry/php-cs-fixer-config": "^1.0", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", "webmozarts/strict-phpunit": "^7.5" }, "type": "library", @@ -6128,7 +6186,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/0.5.1" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0" }, "funding": [ { @@ -6136,33 +6194,33 @@ "type": "github" } ], - "time": "2022-12-24T12:35:10+00:00" + "time": "2024-02-07T09:43:46+00:00" }, { "name": "friends-of-behat/mink-extension", - "version": "v2.6.1", + "version": "v2.7.5", "source": { "type": "git", "url": "https://github.com/FriendsOfBehat/MinkExtension.git", - "reference": "df04efb3e88833208c3a99a3efa3f7e9f03854db" + "reference": "854336030e11983f580f49faad1b49a1238f9846" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfBehat/MinkExtension/zipball/df04efb3e88833208c3a99a3efa3f7e9f03854db", - "reference": "df04efb3e88833208c3a99a3efa3f7e9f03854db", + "url": "https://api.github.com/repos/FriendsOfBehat/MinkExtension/zipball/854336030e11983f580f49faad1b49a1238f9846", + "reference": "854336030e11983f580f49faad1b49a1238f9846", "shasum": "" }, "require": { "behat/behat": "^3.0.5", "behat/mink": "^1.5", "php": ">=7.4", - "symfony/config": "^4.4 || ^5.0 || ^6.0" + "symfony/config": "^4.4 || ^5.0 || ^6.0 || ^7.0" }, "replace": { "behat/mink-extension": "self.version" }, "require-dev": { - "behat/mink-goutte-driver": "^1.1", + "behat/mink-goutte-driver": "^1.1 || ^2.0", "phpspec/phpspec": "^6.0 || ^7.0 || 7.1.x-dev" }, "type": "behat-extension", @@ -6199,48 +6257,48 @@ "web" ], "support": { - "source": "https://github.com/FriendsOfBehat/MinkExtension/tree/v2.6.1" + "issues": "https://github.com/FriendsOfBehat/MinkExtension/issues", + "source": "https://github.com/FriendsOfBehat/MinkExtension/tree/v2.7.5" }, - "time": "2021-12-24T13:19:26+00:00" + "time": "2024-01-11T09:12:02+00:00" }, { "name": "friends-of-behat/symfony-extension", - "version": "v2.3.1", + "version": "v2.6.0", "source": { "type": "git", "url": "https://github.com/FriendsOfBehat/SymfonyExtension.git", - "reference": "572c34e6483e70db0afd45111553332f95bc06ca" + "reference": "dfb1c9c96cc0fb7c8e1caa060695426a12e1efbd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfBehat/SymfonyExtension/zipball/572c34e6483e70db0afd45111553332f95bc06ca", - "reference": "572c34e6483e70db0afd45111553332f95bc06ca", + "url": "https://api.github.com/repos/FriendsOfBehat/SymfonyExtension/zipball/dfb1c9c96cc0fb7c8e1caa060695426a12e1efbd", + "reference": "dfb1c9c96cc0fb7c8e1caa060695426a12e1efbd", "shasum": "" }, "require": { "behat/behat": "^3.6.1", - "php": "^7.4 || ^8.0", - "symfony/dependency-injection": "^4.4 || ^5.3 || ^6.0", - "symfony/http-kernel": "^4.4 || ^5.3 || ^6.0", - "symfony/proxy-manager-bridge": "^4.4 || ^5.3 || ^6.0" + "php": "^8.1", + "symfony/dependency-injection": "^6.2 || ^7.0", + "symfony/http-kernel": "^6.2 || ^7.0" }, "require-dev": { + "behat/mink": "^1.9", + "behat/mink-browserkit-driver": "^2.0", "behat/mink-selenium2-driver": "^1.3", - "friends-of-behat/mink": "^1.9", - "friends-of-behat/mink-browserkit-driver": "^1.5", "friends-of-behat/mink-extension": "^2.5", "friends-of-behat/page-object-extension": "^0.3.2", "friends-of-behat/service-container-extension": "^1.1", - "sylius-labs/coding-standard": "^4.1.1", - "symfony/browser-kit": "^4.4 || ^5.3 || ^6.0", - "symfony/framework-bundle": "^4.4 || ^5.3 || ^6.0", - "symfony/process": "^4.4 || ^5.3 || ^6.0", - "symfony/yaml": "^4.4 || ^5.3 || ^6.0", - "vimeo/psalm": "4.15.0" + "sylius-labs/coding-standard": ">=4.1.1, <=4.2.1", + "symfony/browser-kit": "^6.2 || ^7.0", + "symfony/framework-bundle": "^6.2 || ^7.0", + "symfony/process": "^6.2 || ^7.0", + "symfony/yaml": "^6.2 || ^7.0", + "vimeo/psalm": "4.30.0" }, "suggest": { - "friends-of-behat/mink": "^1.9", - "friends-of-behat/mink-browserkit-driver": "^1.5", + "behat/mink": "^1.9", + "behat/mink-browserkit-driver": "^2.0", "friends-of-behat/mink-extension": "^2.5" }, "type": "symfony-bundle", @@ -6268,9 +6326,9 @@ "description": "Integrates Behat with Symfony.", "support": { "issues": "https://github.com/FriendsOfBehat/SymfonyExtension/issues", - "source": "https://github.com/FriendsOfBehat/SymfonyExtension/tree/v2.3.1" + "source": "https://github.com/FriendsOfBehat/SymfonyExtension/tree/v2.6.0" }, - "time": "2021-12-24T13:14:59+00:00" + "time": "2024-07-03T15:49:43+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -6325,16 +6383,16 @@ }, { "name": "masterminds/html5", - "version": "2.8.1", + "version": "2.9.0", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf" + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f47dcf3c70c584de14f21143c55d9939631bc6cf", - "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", "shasum": "" }, "require": { @@ -6342,7 +6400,7 @@ "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8" + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" }, "type": "library", "extra": { @@ -6386,22 +6444,22 @@ ], "support": { "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.8.1" + "source": "https://github.com/Masterminds/html5-php/tree/2.9.0" }, - "time": "2023-05-10T11:58:31+00:00" + "time": "2024-03-31T07:05:07+00:00" }, { "name": "mockery/mockery", - "version": "1.6.6", + "version": "1.6.12", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e" + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/b8e0bb7d8c604046539c1115994632c74dcb361e", - "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", "shasum": "" }, "require": { @@ -6413,10 +6471,8 @@ "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.6.10", - "psalm/plugin-phpunit": "^0.18.4", - "symplify/easy-coding-standard": "^11.5.0", - "vimeo/psalm": "^4.30" + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" }, "type": "library", "autoload": { @@ -6473,20 +6529,20 @@ "security": "https://github.com/mockery/mockery/security/advisories", "source": "https://github.com/mockery/mockery" }, - "time": "2023-08-09T00:03:52+00:00" + "time": "2024-05-16T03:13:13+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.11.1", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", "shasum": "" }, "require": { @@ -6494,11 +6550,12 @@ }, "conflict": { "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", @@ -6524,7 +6581,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" }, "funding": [ { @@ -6532,20 +6589,20 @@ "type": "tidelift" } ], - "time": "2023-03-08T13:26:56+00:00" + "time": "2024-06-12T14:39:25+00:00" }, { "name": "netresearch/jsonmapper", - "version": "v4.2.0", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "f60565f8c0566a31acf06884cdaa591867ecc956" + "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/f60565f8c0566a31acf06884cdaa591867ecc956", - "reference": "f60565f8c0566a31acf06884cdaa591867ecc956", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/132c75c7dd83e45353ebb9c6c9f591952995bbf0", + "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0", "shasum": "" }, "require": { @@ -6556,7 +6613,7 @@ "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", + "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0 || ~10.0", "squizlabs/php_codesniffer": "~3.5" }, "type": "library", @@ -6581,27 +6638,27 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.2.0" + "source": "https://github.com/cweiske/jsonmapper/tree/v4.4.1" }, - "time": "2023-04-09T17:37:40+00:00" + "time": "2024-01-31T06:18:54+00:00" }, { "name": "nikic/php-parser", - "version": "v4.17.1", + "version": "v4.19.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" + "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b", + "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.1" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", @@ -6637,22 +6694,22 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1" }, - "time": "2023-08-13T19:53:39+00:00" + "time": "2024-03-17T08:10:35+00:00" }, { "name": "pdepend/pdepend", - "version": "2.16.0", + "version": "2.16.2", "source": { "type": "git", "url": "https://github.com/pdepend/pdepend.git", - "reference": "8dfc0c46529e2073fa97986552f80646eedac562" + "reference": "f942b208dc2a0868454d01b29f0c75bbcfc6ed58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pdepend/pdepend/zipball/8dfc0c46529e2073fa97986552f80646eedac562", - "reference": "8dfc0c46529e2073fa97986552f80646eedac562", + "url": "https://api.github.com/repos/pdepend/pdepend/zipball/f942b208dc2a0868454d01b29f0c75bbcfc6ed58", + "reference": "f942b208dc2a0868454d01b29f0c75bbcfc6ed58", "shasum": "" }, "require": { @@ -6665,7 +6722,6 @@ "require-dev": { "easy-doc/easy-doc": "0.0.0|^1.2.3", "gregwar/rst": "^1.0", - "phpunit/phpunit": "^4.8.36|^5.7.27", "squizlabs/php_codesniffer": "^2.0.0" }, "bin": [ @@ -6695,7 +6751,7 @@ ], "support": { "issues": "https://github.com/pdepend/pdepend/issues", - "source": "https://github.com/pdepend/pdepend/tree/2.16.0" + "source": "https://github.com/pdepend/pdepend/tree/2.16.2" }, "funding": [ { @@ -6703,24 +6759,25 @@ "type": "tidelift" } ], - "time": "2023-11-29T08:52:35+00:00" + "time": "2023-12-17T18:09:59+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -6761,9 +6818,15 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", @@ -6818,16 +6881,16 @@ }, { "name": "phpat/phpat", - "version": "0.10.11", + "version": "0.10.18", "source": { "type": "git", "url": "https://github.com/carlosas/phpat.git", - "reference": "03a1c7082a67247a427ca060bb7a18e7c2158979" + "reference": "4c29e330fb306876bca3174aa4b097d0d8611964" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/carlosas/phpat/zipball/03a1c7082a67247a427ca060bb7a18e7c2158979", - "reference": "03a1c7082a67247a427ca060bb7a18e7c2158979", + "url": "https://api.github.com/repos/carlosas/phpat/zipball/4c29e330fb306876bca3174aa4b097d0d8611964", + "reference": "4c29e330fb306876bca3174aa4b097d0d8611964", "shasum": "" }, "require": { @@ -6835,10 +6898,10 @@ "phpstan/phpstan": "^1.3" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.0", - "kubawerlos/php-cs-fixer-custom-fixers": "^3.16", - "phpunit/phpunit": "^9.0", - "vimeo/psalm": "^4.0 || ^5.0" + "friendsofphp/php-cs-fixer": "3.46", + "kubawerlos/php-cs-fixer-custom-fixers": "3.18", + "phpunit/phpunit": "^9.0 || ^10.0", + "vimeo/psalm": "^5.0" }, "type": "phpstan-extension", "extra": { @@ -6869,9 +6932,9 @@ "description": "PHP Architecture Tester", "support": { "issues": "https://github.com/carlosas/phpat/issues", - "source": "https://github.com/carlosas/phpat/tree/0.10.11" + "source": "https://github.com/carlosas/phpat/tree/0.10.18" }, - "time": "2023-11-24T18:14:30+00:00" + "time": "2024-07-05T14:56:19+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -6928,28 +6991,35 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", + "version": "5.4.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", + "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", "shasum": "" }, "require": { + "doctrine/deprecations": "^1.1", "ext-filter": "*", - "php": "^7.2 || ^8.0", + "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7", "webmozart/assert": "^1.9.1" }, "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" + "mockery/mockery": "~1.3.5", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^5.13" }, "type": "library", "extra": { @@ -6973,33 +7043,33 @@ }, { "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" + "email": "opensource@ijaap.nl" } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.1" }, - "time": "2021-10-19T17:43:47+00:00" + "time": "2024-05-21T05:55:05+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.7.3", + "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419" + "reference": "153ae662783729388a584b4361f2545e4d841e3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", + "reference": "153ae662783729388a584b4361f2545e4d841e3c", "shasum": "" }, "require": { "doctrine/deprecations": "^1.0", - "php": "^7.4 || ^8.0", + "php": "^7.3 || ^8.0", "phpdocumentor/reflection-common": "^2.0", "phpstan/phpdoc-parser": "^1.13" }, @@ -7037,28 +7107,28 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.3" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" }, - "time": "2023-08-12T11:01:26+00:00" + "time": "2024-02-23T11:10:43+00:00" }, { "name": "phpmd/phpmd", - "version": "2.14.1", + "version": "2.15.0", "source": { "type": "git", "url": "https://github.com/phpmd/phpmd.git", - "reference": "442fc2c34edcd5198b442d8647c7f0aec3afabe8" + "reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmd/phpmd/zipball/442fc2c34edcd5198b442d8647c7f0aec3afabe8", - "reference": "442fc2c34edcd5198b442d8647c7f0aec3afabe8", + "url": "https://api.github.com/repos/phpmd/phpmd/zipball/74a1f56e33afad4128b886e334093e98e1b5e7c0", + "reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0", "shasum": "" }, "require": { "composer/xdebug-handler": "^1.0 || ^2.0 || ^3.0", "ext-xml": "*", - "pdepend/pdepend": "^2.15.1", + "pdepend/pdepend": "^2.16.1", "php": ">=5.3.9" }, "require-dev": { @@ -7067,7 +7137,6 @@ "ext-simplexml": "*", "gregwar/rst": "^1.0", "mikey179/vfsstream": "^1.6.8", - "phpunit/phpunit": "^4.8.36 || ^5.7.27", "squizlabs/php_codesniffer": "^2.9.2 || ^3.7.2" }, "bin": [ @@ -7115,7 +7184,7 @@ "support": { "irc": "irc://irc.freenode.org/phpmd", "issues": "https://github.com/phpmd/phpmd/issues", - "source": "https://github.com/phpmd/phpmd/tree/2.14.1" + "source": "https://github.com/phpmd/phpmd/tree/2.15.0" }, "funding": [ { @@ -7123,20 +7192,20 @@ "type": "tidelift" } ], - "time": "2023-09-28T13:07:44+00:00" + "time": "2023-12-11T08:22:20+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.24.4", + "version": "1.29.1", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496" + "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6bd0c26f3786cd9b7c359675cb789e35a8e07496", - "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fcaefacf2d5c417e928405b71b400d4ce10daaf4", + "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4", "shasum": "" }, "require": { @@ -7168,22 +7237,22 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.4" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.1" }, - "time": "2023-11-26T18:29:22+00:00" + "time": "2024-05-31T08:52:43+00:00" }, { "name": "phpstan/phpstan", - "version": "1.10.47", + "version": "1.11.9", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "84dbb33b520ea28b6cf5676a3941f4bae1c1ff39" + "reference": "e370bcddadaede0c1716338b262346f40d296f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/84dbb33b520ea28b6cf5676a3941f4bae1c1ff39", - "reference": "84dbb33b520ea28b6cf5676a3941f4bae1c1ff39", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e370bcddadaede0c1716338b262346f40d296f82", + "reference": "e370bcddadaede0c1716338b262346f40d296f82", "shasum": "" }, "require": { @@ -7226,33 +7295,29 @@ { "url": "https://github.com/phpstan", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", - "type": "tidelift" } ], - "time": "2023-12-01T15:19:17+00:00" + "time": "2024-08-01T16:25:18+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.29", + "version": "9.2.31", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76" + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6a3a87ac2bbe33b25042753df8195ba4aa534c76", - "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.15", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -7302,7 +7367,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/9.2.29" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" }, "funding": [ { @@ -7310,7 +7375,7 @@ "type": "github" } ], - "time": "2023-09-19T04:57:46+00:00" + "time": "2024-03-02T06:37:42+00:00" }, { "name": "phpunit/php-file-iterator", @@ -7555,45 +7620,45 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.15", + "version": "9.6.20", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "05017b80304e0eb3f31d90194a563fd53a6021f1" + "reference": "49d7820565836236411f5dc002d16dd689cde42f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/05017b80304e0eb3f31d90194a563fd53a6021f1", - "reference": "05017b80304e0eb3f31d90194a563fd53a6021f1", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/49d7820565836236411f5dc002d16dd689cde42f", + "reference": "49d7820565836236411f5dc002d16dd689cde42f", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1 || ^2", + "doctrine/instantiator": "^1.5.0 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", + "myclabs/deep-copy": "^1.12.0", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.28", - "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-code-coverage": "^9.2.31", + "phpunit/php-file-iterator": "^3.0.6", "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", + "phpunit/php-text-template": "^2.0.4", + "phpunit/php-timer": "^5.0.3", + "sebastian/cli-parser": "^1.0.2", + "sebastian/code-unit": "^1.0.8", "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", + "sebastian/diff": "^4.0.6", + "sebastian/environment": "^5.1.5", + "sebastian/exporter": "^4.0.6", + "sebastian/global-state": "^5.0.7", + "sebastian/object-enumerator": "^4.0.4", + "sebastian/resource-operations": "^3.0.4", + "sebastian/type": "^3.2.1", "sebastian/version": "^3.0.2" }, "suggest": { @@ -7638,7 +7703,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.15" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.20" }, "funding": [ { @@ -7654,7 +7719,7 @@ "type": "tidelift" } ], - "time": "2023-12-01T16:55:19+00:00" + "time": "2024-07-10T11:45:39+00:00" }, { "name": "psalm/plugin-mockery", @@ -7775,23 +7840,23 @@ }, { "name": "psalm/plugin-symfony", - "version": "v5.1.0", + "version": "v5.2.5", "source": { "type": "git", "url": "https://github.com/psalm/psalm-plugin-symfony.git", - "reference": "f23ec3439743fb24f5c1101e52d032f23d5befa6" + "reference": "fb801a9b3d12ace9fb619febfaa3ae0bc1dbb196" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psalm/psalm-plugin-symfony/zipball/f23ec3439743fb24f5c1101e52d032f23d5befa6", - "reference": "f23ec3439743fb24f5c1101e52d032f23d5befa6", + "url": "https://api.github.com/repos/psalm/psalm-plugin-symfony/zipball/fb801a9b3d12ace9fb619febfaa3ae0bc1dbb196", + "reference": "fb801a9b3d12ace9fb619febfaa3ae0bc1dbb196", "shasum": "" }, "require": { "ext-simplexml": "*", - "php": "^7.4 || ^8.0", + "php": "^8.1", "symfony/framework-bundle": "^5.0 || ^6.0 || ^7.0", - "vimeo/psalm": "^5.1" + "vimeo/psalm": "^5.16" }, "require-dev": { "doctrine/annotations": "^1.8|^2", @@ -7801,7 +7866,7 @@ "symfony/console": "*", "symfony/form": "^5.0 || ^6.0 || ^7.0", "symfony/messenger": "^5.0 || ^6.0 || ^7.0", - "symfony/security-guard": "*", + "symfony/security-core": "*", "symfony/serializer": "^5.0 || ^6.0 || ^7.0", "symfony/validator": "*", "twig/twig": "^2.10 || ^3.0", @@ -7834,22 +7899,22 @@ "description": "Psalm Plugin for Symfony", "support": { "issues": "https://github.com/psalm/psalm-plugin-symfony/issues", - "source": "https://github.com/psalm/psalm-plugin-symfony/tree/v5.1.0" + "source": "https://github.com/psalm/psalm-plugin-symfony/tree/v5.2.5" }, - "time": "2023-11-12T10:04:27+00:00" + "time": "2024-07-03T11:57:02+00:00" }, { "name": "rector/rector", - "version": "0.18.12", + "version": "0.18.13", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "ed8d5352a3faa69e4a5e315896abffd4bc29c828" + "reference": "f8011a76d36aa4f839f60f3b4f97707d97176618" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/ed8d5352a3faa69e4a5e315896abffd4bc29c828", - "reference": "ed8d5352a3faa69e4a5e315896abffd4bc29c828", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/f8011a76d36aa4f839f60f3b4f97707d97176618", + "reference": "f8011a76d36aa4f839f60f3b4f97707d97176618", "shasum": "" }, "require": { @@ -7884,7 +7949,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/0.18.12" + "source": "https://github.com/rectorphp/rector/tree/0.18.13" }, "funding": [ { @@ -7892,7 +7957,7 @@ "type": "github" } ], - "time": "2023-12-04T08:47:30+00:00" + "time": "2023-12-20T16:08:01+00:00" }, { "name": "roave/security-advisories", @@ -7900,19 +7965,24 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "b4728d9c4af8c60b059c1d7872759eedacccdb12" + "reference": "ff7456939acba6dd515a8a10aad66be6bc1b8dc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/b4728d9c4af8c60b059c1d7872759eedacccdb12", - "reference": "b4728d9c4af8c60b059c1d7872759eedacccdb12", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/ff7456939acba6dd515a8a10aad66be6bc1b8dc1", + "reference": "ff7456939acba6dd515a8a10aad66be6bc1b8dc1", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", - "admidio/admidio": "<4.2.13", + "admidio/admidio": "<4.3.10", "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", "aheinze/cockpit": "<2.2", + "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.04.6", + "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", + "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", + "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9", + "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", "airesvsg/acf-to-rest-api": "<=3.1", "akaunting/akaunting": "<2.1.13", @@ -7921,7 +7991,7 @@ "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", "amphp/artax": "<1.0.6|>=2,<2.0.6", - "amphp/http": "<1.0.1", + "amphp/http": "<=1.7.2|>=2,<=2.1", "amphp/http-client": ">=4,<4.4", "anchorcms/anchor-cms": "<=0.12.7", "andreapollastri/cipi": "<=3.1.15", @@ -7937,34 +8007,42 @@ "athlon1600/php-proxy": "<=5.1", "athlon1600/php-proxy-app": "<=3", "austintoddj/canvas": "<=3.4.2", - "automad/automad": "<1.8", + "auth0/wordpress": "<=4.6", + "automad/automad": "<=2.0.0.0-alpha5", + "automattic/jetpack": "<9.8", "awesome-support/awesome-support": "<=6.0.7", - "aws/aws-sdk-php": ">=3,<3.2.1", + "aws/aws-sdk-php": "<3.288.1", "azuracast/azuracast": "<0.18.3", - "backdrop/backdrop": "<1.24.2", + "backdrop/backdrop": "<1.27.3|>=1.28,<1.28.2", "backpack/crud": "<3.4.9", "bacula-web/bacula-web": "<8.0.0.0-RC2-dev", "badaso/core": "<2.7", - "bagisto/bagisto": "<0.1.5", + "bagisto/bagisto": "<2.1", "barrelstrength/sprout-base-email": "<1.2.7", "barrelstrength/sprout-forms": "<3.9", "barryvdh/laravel-translation-manager": "<0.6.2", "barzahlen/barzahlen-php": "<2.0.1", - "baserproject/basercms": "<4.8", + "baserproject/basercms": "<5.0.9", "bassjobsen/bootstrap-3-typeahead": ">4.0.2", + "bbpress/bbpress": "<2.6.5", + "bcosca/fatfree": "<3.7.2", + "bedita/bedita": "<4", "bigfork/silverstripe-form-capture": ">=3,<3.1.1", - "billz/raspap-webgui": "<2.9.5", + "billz/raspap-webgui": "<=3.1.4", "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3", + "blueimp/jquery-file-upload": "==6.4.4", "bmarshall511/wordpress_zero_spam": "<5.2.13", "bolt/bolt": "<3.7.2", "bolt/core": "<=4.2", + "born05/craft-twofactorauthentication": "<3.3.4", "bottelet/flarepoint": "<2.2.1", + "bref/bref": "<2.1.17", "brightlocal/phpwhois": "<=4.2.5", "brotkrueml/codehighlight": "<2.7", "brotkrueml/schema": "<1.13.1|>=2,<2.5.1", "brotkrueml/typo3-matomo-integration": "<1.3.2", "buddypress/buddypress": "<7.2.1", - "bugsnag/bugsnag-laravel": "<2.0.2", + "bugsnag/bugsnag-laravel": ">=2,<2.0.2", "bytefury/crater": "<6.0.2", "cachethq/cachet": "<2.5.1", "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", @@ -7972,33 +8050,39 @@ "cardgate/magento2": "<2.0.33", "cardgate/woocommerce": "<=3.1.15", "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", + "cart2quote/module-quotation-encoded": ">=4.1.6,<=4.4.5|>=5,<5.4.4", "cartalyst/sentry": "<=2.1.6", "catfan/medoo": "<1.7.5", + "causal/oidc": "<2.1", "cecil/cecil": "<7.47.1", - "centreon/centreon": "<22.10.0.0-beta1", + "centreon/centreon": "<22.10.15", "cesnet/simplesamlphp-module-proxystatistics": "<3.1", "chriskacerguis/codeigniter-restserver": "<=2.7.1", "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", - "cockpit-hq/cockpit": "<=2.6.3", + "ckeditor/ckeditor": "<4.24", + "cockpit-hq/cockpit": "<2.7|==2.7", "codeception/codeception": "<3.1.3|>=4,<4.1.22", "codeigniter/framework": "<3.1.9", - "codeigniter4/framework": "<=4.4.2", + "codeigniter4/framework": "<4.4.7", "codeigniter4/shield": "<1.0.0.0-beta8", "codiad/codiad": "<=2.8.4", - "composer/composer": "<1.10.27|>=2,<2.2.22|>=2.3,<2.6.4", - "concrete5/concrete5": "<9.2.2", + "composer/composer": "<1.10.27|>=2,<2.2.24|>=2.3,<2.7.7", + "concrete5/concrete5": "<=9.3.2", "concrete5/core": "<8.5.8|>=9,<9.1", "contao-components/mediaelement": ">=2.14.2,<2.21.1", - "contao/contao": ">=4,<4.4.56|>=4.5,<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4", - "contao/core": ">=2,<3.5.39", - "contao/core-bundle": "<4.9.42|>=4.10,<4.13.28|>=5,<5.1.10", - "contao/listing-bundle": ">=4,<4.4.8", + "contao/comments-bundle": ">=2,<4.13.40|>=5.0.0.0-RC1-dev,<5.3.4", + "contao/contao": ">=3,<3.5.37|>=4,<4.4.56|>=4.5,<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4", + "contao/core": "<3.5.39", + "contao/core-bundle": "<4.13.40|>=5,<5.3.4", + "contao/listing-bundle": ">=3,<=3.5.30|>=4,<4.4.8", "contao/managed-edition": "<=1.5", + "corveda/phpsandbox": "<1.3.5", "cosenary/instagram": "<=2.3", - "craftcms/cms": "<=4.4.14", + "craftcms/cms": "<4.6.2|>=5.0.0.0-beta1,<=5.2.2", "croogo/croogo": "<4", "cuyz/valinor": "<0.12", "czproject/git-php": "<4.0.3", + "dapphp/securimage": "<3.6.6", "darylldoyle/safe-svg": "<1.9.10", "datadog/dd-trace": ">=0.30,<0.30.2", "datatables/datatables": "<1.10.10", @@ -8006,31 +8090,36 @@ "dbrisinajumi/d2files": "<1", "dcat/laravel-admin": "<=2.1.3.0-beta", "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3", - "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1", + "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4", "desperado/xml-bundle": "<=0.1.7", - "directmailteam/direct-mail": "<5.2.4", + "devgroup/dotplant": "<2020.09.14-dev", + "directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2", "doctrine/annotations": "<1.2.7", - "doctrine/cache": "<1.3.2|>=1.4,<1.4.2", + "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", "doctrine/common": "<2.4.3|>=2.5,<2.5.1", "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2|>=3,<3.1.4", "doctrine/doctrine-bundle": "<1.5.2", - "doctrine/doctrine-module": "<=0.7.1", + "doctrine/doctrine-module": "<0.7.2", "doctrine/mongodb-odm": "<1.0.2", "doctrine/mongodb-odm-bundle": "<3.0.1", - "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", - "dolibarr/dolibarr": "<18.0.2", - "dompdf/dompdf": "<2.0.2|==2.0.2", + "doctrine/orm": ">=1,<1.2.4|>=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", + "dolibarr/dolibarr": "<19.0.2", + "dompdf/dompdf": "<2.0.4", "doublethreedigital/guest-entries": "<3.1.2", - "drupal/core": "<9.4.14|>=9.5,<9.5.8|>=10,<10.0.8", - "drupal/drupal": ">=6,<6.38|>=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", + "drupal/core": ">=6,<6.38|>=7,<7.96|>=8,<10.1.8|>=10.2,<10.2.2", + "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", "duncanmcclean/guest-entries": "<3.1.2", "dweeves/magmi": "<=0.7.24", + "ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.1.2", "ecodev/newsletter": "<=4", "ectouch/ectouch": "<=2.7.2", + "egroupware/egroupware": "<23.1.20240624", "elefant/cms": "<2.0.7", "elgg/elgg": "<3.3.24|>=4,<4.0.5", + "elijaa/phpmemcacheadmin": "<=1.3", "encore/laravel-admin": "<=1.8.19", "endroid/qr-code-bundle": "<3.4.2", + "enhavo/enhavo-app": "<=0.13.1", "enshrined/svg-sanitize": "<0.15", "erusev/parsedown": "<1.7.2", "ether/logs": "<3.0.4", @@ -8042,10 +8131,10 @@ "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1-dev", "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1-dev|>=5.4,<5.4.11.1-dev|>=2017.12,<2017.12.0.1-dev", "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24", - "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26", + "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26|>=3.3,<3.3.39", "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", - "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.34", + "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.35", "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1-dev", "ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15", @@ -8057,15 +8146,20 @@ "ezyang/htmlpurifier": "<4.1.1", "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", "facturascripts/facturascripts": "<=2022.08", + "fastly/magento2": "<1.2.26", "feehi/cms": "<=2.1.1", "feehi/feehicms": "<=2.1.1", "fenom/fenom": "<=2.12.1", "filegator/filegator": "<7.8", + "filp/whoops": "<2.1.13", + "fineuploader/php-traditional-server": "<=1.2.2", "firebase/php-jwt": "<6", + "fisharebest/webtrees": "<=2.1.18", "fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2", "fixpunkt/fp-newsletter": "<1.1.1|>=2,<2.1.2|>=2.2,<3.2.6", - "flarum/core": "<1.8", - "flarum/framework": "<1.8", + "flarum/core": "<1.8.5", + "flarum/flarum": "<0.1.0.0-beta8", + "flarum/framework": "<1.8.5", "flarum/mentions": "<1.6.3", "flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15", "flarum/tags": "<=0.1.0.0-beta13", @@ -8077,33 +8171,37 @@ "fooman/tcpdf": "<6.2.22", "forkcms/forkcms": "<5.11.1", "fossar/tcpdf-parser": "<6.2.22", - "francoisjacquet/rosariosis": "<11", + "francoisjacquet/rosariosis": "<=11.5.1", "frappant/frp-form-answers": "<3.1.2|>=4,<4.0.2", "friendsofsymfony/oauth2-php": "<1.3", "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", - "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", + "friendsofsymfony/user-bundle": ">=1,<1.3.5", + "friendsofsymfony1/swiftmailer": ">=4,<5.4.13|>=6,<6.2.5", + "friendsofsymfony1/symfony1": ">=1.1,<1.5.19", "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", - "froala/wysiwyg-editor": "<3.2.7|>=4.0.1,<=4.1.1", - "froxlor/froxlor": "<2.1.0.0-beta1", + "froala/wysiwyg-editor": "<3.2.7|>=4.0.1,<=4.1.3", + "froxlor/froxlor": "<2.1.9", + "frozennode/administrator": "<=5.0.12", "fuel/core": "<1.8.1", "funadmin/funadmin": "<=3.2|>=3.3.2,<=3.3.3", "gaoming13/wechat-php-sdk": "<=1.10.2", "genix/cms": "<=1.1.11", - "getgrav/grav": "<=1.7.42.1", - "getkirby/cms": "<3.5.8.3-dev|>=3.6,<3.6.6.3-dev|>=3.7,<3.7.5.2-dev|>=3.8,<3.8.4.1-dev|>=3.9,<3.9.6", + "getformwork/formwork": "<1.13.1|==2.0.0.0-beta1", + "getgrav/grav": "<1.7.46", + "getkirby/cms": "<4.1.1", "getkirby/kirby": "<=2.5.12", "getkirby/panel": "<2.5.14", "getkirby/starterkit": "<=3.7.0.2", - "gilacms/gila": "<=1.11.4", - "gleez/cms": "<=1.2|==2", + "gilacms/gila": "<=1.15.4", + "gleez/cms": "<=1.3|==2", "globalpayments/php-sdk": "<2", "gogentooss/samlbase": "<1.2.7", "google/protobuf": "<3.15", "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", "gree/jose": "<2.2.1", "gregwar/rst": "<1.0.3", - "grumpydictator/firefly-iii": "<6", + "grumpydictator/firefly-iii": "<6.1.17", "gugoan/economizzer": "<=0.9.0.0-beta1", "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", "guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5", @@ -8117,25 +8215,30 @@ "hov/jobfair": "<1.0.13|>=2,<2.0.2", "httpsoft/http-message": "<1.0.12", "hyn/multi-tenant": ">=5.6,<5.7.2", - "ibexa/admin-ui": ">=4.2,<4.2.3", - "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3|>=4.5,<4.5.4", + "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6.0.0-beta1,<4.6.9", + "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3|>=4.5,<4.5.6|>=4.6,<4.6.2", "ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3", "ibexa/post-install": "<=1.0.4", "ibexa/solr": ">=4.5,<4.5.4", "ibexa/user": ">=4,<4.4.3", "icecoder/icecoder": "<=8.1", "idno/known": "<=1.3.1", - "illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10", - "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<=4.1.99999|>=4.2,<=4.2.99999|>=5,<=5.0.99999|>=5.1,<=5.1.99999|>=5.2,<=5.2.99999|>=5.3,<=5.3.99999|>=5.4,<=5.4.99999|>=5.5,<=5.5.49|>=5.6,<=5.6.99999|>=5.7,<=5.7.99999|>=5.8,<=5.8.99999|>=6,<6.18.31|>=7,<7.22.4", + "ilicmiljan/secure-props": ">=1.2,<1.2.2", + "illuminate/auth": "<5.5.10", + "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<6.18.31|>=7,<7.22.4", "illuminate/database": "<6.20.26|>=7,<7.30.5|>=8,<8.40", "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", + "imdbphp/imdbphp": "<=5.1.1", "impresscms/impresscms": "<=1.4.5", - "in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.2.2", + "impresspages/impresspages": "<=1.0.12", + "in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.2.3", "in2code/ipandlanguageredirect": "<5.1.2", "in2code/lux": "<17.6.1|>=18,<24.0.2", "innologi/typo3-appointments": "<2.0.6", "intelliants/subrion": "<4.2.2", + "inter-mediator/inter-mediator": "==5.5", + "ipl/web": "<0.10.1", "islandora/islandora": ">=2,<2.4.1", "ivankristianto/phpwhois": "<=4.3", "jackalope/jackalope-doctrine-dbal": "<1.7.4", @@ -8143,67 +8246,83 @@ "james-heinrich/phpthumb": "<1.7.12", "jasig/phpcas": "<1.3.3", "jcbrand/converse.js": "<3.3.3", + "johnbillion/wp-crontrol": "<1.16.2", "joomla/application": "<1.0.13", "joomla/archive": "<1.1.12|>=2,<2.0.1", "joomla/filesystem": "<1.6.2|>=2,<2.0.1", "joomla/filter": "<1.4.4|>=2,<2.0.1", - "joomla/framework": ">=2.5.4,<=3.8.12", + "joomla/framework": "<1.5.7|>=2.5.4,<=3.8.12", "joomla/input": ">=2,<2.0.2", "joomla/joomla-cms": ">=2.5,<3.9.12", "joomla/session": "<1.3.1", "joyqi/hyper-down": "<=2.4.27", "jsdecena/laracom": "<2.0.9", "jsmitty12/phpwhois": "<5.1", + "juzaweb/cms": "<=3.4", + "jweiland/events2": "<8.3.8|>=9,<9.0.6", "kazist/phpwhois": "<=4.2.6", "kelvinmo/simplexrd": "<3.1.1", "kevinpapst/kimai2": "<1.16.7", "khodakhah/nodcms": "<=3", - "kimai/kimai": "<=2.1", + "kimai/kimai": "<2.16", "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", "klaviyo/magento2-extension": ">=1,<3", "knplabs/knp-snappy": "<=1.4.2", "kohana/core": "<3.3.3", "krayin/laravel-crm": "<1.2.2", "kreait/firebase-php": ">=3.2,<3.8.1", + "kumbiaphp/kumbiapp": "<=1.1.1", "la-haute-societe/tcpdf": "<6.2.22", "laminas/laminas-diactoros": "<2.18.1|==2.19|==2.20|==2.21|==2.22|==2.23|>=2.24,<2.24.2|>=2.25,<2.25.2", "laminas/laminas-form": "<2.17.1|>=3,<3.0.2|>=3.1,<3.1.1", "laminas/laminas-http": "<2.14.2", "laravel/fortify": "<1.11.1", "laravel/framework": "<6.20.44|>=7,<7.30.6|>=8,<8.75", - "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", + "laravel/laravel": ">=5.4,<5.4.22", + "laravel/socialite": ">=1,<2.0.10", "latte/latte": "<2.10.8", - "lavalite/cms": "<=9", + "lavalite/cms": "<=9|==10.1", "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", "league/commonmark": "<0.18.3", "league/flysystem": "<1.1.4|>=2,<2.1.1", "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", + "libreform/libreform": ">=2,<=2.0.8", "librenms/librenms": "<2017.08.18", "liftkit/database": "<2.13.2", + "lightsaml/lightsaml": "<1.3.5", "limesurvey/limesurvey": "<3.27.19", "livehelperchat/livehelperchat": "<=3.91", - "livewire/livewire": ">2.2.4,<2.2.6", + "livewire/livewire": ">2.2.4,<2.2.6|>=3.3.5,<3.4.9", "lms/routes": "<2.1.1", "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", "luyadev/yii-helpers": "<1.2.1", - "magento/community-edition": "<=2.4", + "magento/community-edition": "<2.4.5|==2.4.5|>=2.4.5.0-patch1,<2.4.5.0-patch8|==2.4.6|>=2.4.6.0-patch1,<2.4.6.0-patch6|==2.4.7", + "magento/core": "<=1.9.4.5", "magento/magento1ce": "<1.9.4.3-dev", "magento/magento1ee": ">=1,<1.14.4.3-dev", - "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2.0-patch2", + "magento/product-community-edition": "<2.4.4.0-patch9|>=2.4.5,<2.4.5.0-patch8|>=2.4.6,<2.4.6.0-patch6|>=2.4.7,<2.4.7.0-patch1", + "magneto/core": "<1.9.4.4-dev", "maikuolan/phpmussel": ">=1,<1.6", - "mantisbt/mantisbt": "<=2.25.7", + "mainwp/mainwp": "<=4.4.3.3", + "mantisbt/mantisbt": "<2.26.2", "marcwillmann/turn": "<0.3.3", "matyhtf/framework": "<3.0.6", - "mautic/core": "<4.3", - "mediawiki/core": ">=1.27,<1.27.6|>=1.29,<1.29.3|>=1.30,<1.30.2|>=1.31,<1.31.9|>=1.32,<1.32.6|>=1.32.99,<1.33.3|>=1.33.99,<1.34.3|>=1.34.99,<1.35", + "mautic/core": "<4.4.12|>=5.0.0.0-alpha,<5.0.4", + "mdanter/ecc": "<2", + "mediawiki/core": "<1.36.2", "mediawiki/matomo": "<2.4.3", + "mediawiki/semantic-media-wiki": "<4.0.2", "melisplatform/melis-asset-manager": "<5.0.1", "melisplatform/melis-cms": "<5.0.1", "melisplatform/melis-front": "<5.0.1", "mezzio/mezzio-swoole": "<3.7|>=4,<4.3", "mgallegos/laravel-jqgrid": "<=1.3", + "microsoft/microsoft-graph": ">=1.16,<1.109.1|>=2,<2.0.1", + "microsoft/microsoft-graph-beta": "<2.0.1", + "microsoft/microsoft-graph-core": "<2.0.2", "microweber/microweber": "<=2.0.4", + "mikehaertl/php-shellcommand": "<1.6.1", "miniorange/miniorange-saml": "<1.4.3", "mittwald/typo3_forum": "<1.2.1", "mobiledetect/mobiledetectlib": "<2.8.32", @@ -8211,22 +8330,26 @@ "mojo42/jirafeau": "<4.4", "mongodb/mongodb": ">=1,<1.9.2", "monolog/monolog": ">=1.8,<1.12", - "moodle/moodle": "<4.3.0.0-RC2-dev", + "moodle/moodle": "<4.3.5|>=4.4.0.0-beta,<4.4.1", "mos/cimage": "<0.7.19", "movim/moxl": ">=0.8,<=0.10", + "movingbytes/social-network": "<=1.2.1", "mpdf/mpdf": "<=7.1.7", "munkireport/comment": "<4.1", "munkireport/managedinstalls": "<2.6", + "munkireport/munki_facts": "<1.5", "munkireport/munkireport": ">=2.5.3,<5.6.3", + "munkireport/reportdata": "<3.5", + "munkireport/softwareupdate": "<1.6", "mustache/mustache": ">=2,<2.14.1", "namshi/jose": "<2.2", "neoan3-apps/template": "<1.1.1", "neorazorx/facturascripts": "<2022.04", "neos/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", "neos/form": ">=1.2,<4.3.3|>=5,<5.0.9|>=5.1,<5.1.3", - "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.9.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2", - "neos/neos-ui": "<=8.3.3", - "neos/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", + "neos/media-browser": "<7.3.19|>=8,<8.0.16|>=8.1,<8.1.11|>=8.2,<8.2.11|>=8.3,<8.3.9", + "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2", + "neos/swiftmailer": "<5.4.5", "netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15", "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", @@ -8234,70 +8357,86 @@ "nonfiction/nterchange": "<4.1.1", "notrinos/notrinos-erp": "<=0.7", "noumo/easyii": "<=0.9", + "novaksolutions/infusionsoft-php-sdk": "<1", "nukeviet/nukeviet": "<4.5.02", "nyholm/psr7": "<1.6.1", "nystudio107/craft-seomatic": "<3.4.12", + "nzedb/nzedb": "<0.8", "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", "october/backend": "<1.1.2", "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", "october/october": "<=3.4.4", "october/rain": "<1.0.472|>=1.1,<1.1.2", - "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.5.2", + "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.5.15", "omeka/omeka-s": "<4.0.3", "onelogin/php-saml": "<2.10.4", - "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", + "oneup/uploader-bundle": ">=1,<1.9.3|>=2,<2.1.5", "open-web-analytics/open-web-analytics": "<1.7.4", - "opencart/opencart": "<=3.0.3.7|>=4,<4.0.2.3-dev", + "opencart/opencart": ">=0", "openid/php-openid": "<2.3", - "openmage/magento-lts": "<=19.5|>=20,<=20.1", + "openmage/magento-lts": "<20.10.1", + "opensolutions/vimbadmin": "<=3.0.15", "opensource-workshop/connect-cms": "<1.7.2|>=2,<2.3.2", "orchid/platform": ">=9,<9.4.4|>=14.0.0.0-alpha4,<14.5", "oro/calendar-bundle": ">=4.2,<=4.2.6|>=5,<=5.0.6|>=5.1,<5.1.1", "oro/commerce": ">=4.1,<5.0.11|>=5.1,<5.1.1", "oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7", "oro/crm-call-bundle": ">=4.2,<=4.2.5|>=5,<5.0.4|>=5.1,<5.1.1", - "oro/customer-portal": ">=4.2,<=4.2.8|>=5,<5.0.11|>=5.1,<5.1.1", - "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<=4.2.10|>=5,<5.0.8", + "oro/customer-portal": ">=4.1,<=4.1.13|>=4.2,<=4.2.10|>=5,<=5.0.11|>=5.1,<=5.1.3", + "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<=4.2.10|>=5,<=5.0.12|>=5.1,<=5.1.3", + "oveleon/contao-cookiebar": "<1.16.3|>=2,<2.1.3", "oxid-esales/oxideshop-ce": "<4.5", + "oxid-esales/paymorrow-module": ">=1,<1.0.2|>=2,<2.0.1", "packbackbooks/lti-1-3-php-library": "<5", "padraic/humbug_get_contents": "<1.1.2", "pagarme/pagarme-php": "<3", "pagekit/pagekit": "<=1.0.18", + "paragonie/ecc": "<2.0.1", "paragonie/random_compat": "<2", - "passbolt/passbolt_api": "<2.11", + "passbolt/passbolt_api": "<4.6.2", + "paypal/adaptivepayments-sdk-php": "<=3.9.2", + "paypal/invoice-sdk-php": "<=3.9", "paypal/merchant-sdk-php": "<3.12", + "paypal/permissions-sdk-php": "<=3.9.1", "pear/archive_tar": "<1.4.14", + "pear/auth": "<1.2.4", "pear/crypt_gpg": "<1.6.7", "pear/pear": "<=1.10.1", "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", "personnummer/personnummer": "<3.0.2", "phanan/koel": "<5.1.4", + "phenx/php-svg-lib": "<0.5.2", + "php-censor/php-censor": "<2.0.13|>=2.1,<2.1.5", "php-mod/curl": "<2.3.2", "phpbb/phpbb": "<3.2.10|>=3.3,<3.3.1", + "phpems/phpems": ">=6,<=6.1.3", "phpfastcache/phpfastcache": "<6.1.5|>=7,<7.1.2|>=8,<8.0.7", "phpmailer/phpmailer": "<6.5", "phpmussel/phpmussel": ">=1,<1.6", "phpmyadmin/phpmyadmin": "<5.2.1", - "phpmyfaq/phpmyfaq": "<=3.1.7", + "phpmyfaq/phpmyfaq": "<3.2.5|==3.2.5", + "phpoffice/common": "<0.2.9", "phpoffice/phpexcel": "<1.8", "phpoffice/phpspreadsheet": "<1.16", - "phpseclib/phpseclib": "<3.0.34", + "phpseclib/phpseclib": "<2.0.47|>=3,<3.0.36", "phpservermon/phpservermon": "<3.6", - "phpsysinfo/phpsysinfo": "<3.2.5", - "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5,<5.6.3", + "phpsysinfo/phpsysinfo": "<3.4.3", + "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3", "phpwhois/phpwhois": "<=4.2.5", "phpxmlrpc/extras": "<0.6.1", "phpxmlrpc/phpxmlrpc": "<4.9.2", "pi/pi": "<=2.5", - "pimcore/admin-ui-classic-bundle": "<1.2.2", - "pimcore/customer-management-framework-bundle": "<3.4.2", + "pimcore/admin-ui-classic-bundle": "<=1.5.1", + "pimcore/customer-management-framework-bundle": "<4.0.6", "pimcore/data-hub": "<1.2.4", "pimcore/demo": "<10.3", + "pimcore/ecommerce-framework-bundle": "<1.0.10", "pimcore/perspective-editor": "<1.5.1", - "pimcore/pimcore": "<11.1.1", - "pixelfed/pixelfed": "<=0.11.4", + "pimcore/pimcore": "<11.2.4", + "pixelfed/pixelfed": "<0.11.11", + "plotly/plotly.js": "<2.25.2", "pocketmine/bedrock-protocol": "<8.0.2", - "pocketmine/pocketmine-mp": "<=4.23|>=5,<5.3.1", + "pocketmine/pocketmine-mp": "<5.11.2", "pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1", "pressbooks/pressbooks": "<5.18", "prestashop/autoupgrade": ">=4,<4.10.1", @@ -8305,21 +8444,24 @@ "prestashop/blockwishlist": ">=2,<2.1.1", "prestashop/contactform": ">=1.0.1,<4.3", "prestashop/gamification": "<2.3.2", - "prestashop/prestashop": "<8.1.2", + "prestashop/prestashop": "<8.1.6", "prestashop/productcomments": "<5.0.2", "prestashop/ps_emailsubscription": "<2.6.1", "prestashop/ps_facetedsearch": "<3.4.1", "prestashop/ps_linklist": "<3.1", - "privatebin/privatebin": "<1.4", - "processwire/processwire": "<=3.0.200", + "privatebin/privatebin": "<1.4|>=1.5,<1.7.4", + "processwire/processwire": "<=3.0.229", "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", "propel/propel1": ">=1,<=1.7.1", - "pterodactyl/panel": "<1.7", + "pterodactyl/panel": "<1.11.6", "ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2", "ptrofimov/beanstalk_console": "<1.7.14", + "pubnub/pubnub": "<6.1", "pusher/pusher-php-server": "<2.2.1", "pwweb/laravel-core": "<=0.3.6.0-beta", "pyrocms/pyrocms": "<=3.9.1", + "qcubed/qcubed": "<=3.1.1", + "quickapps/cms": "<=2.0.0.0-beta2", "rainlab/blog-plugin": "<1.4.1", "rainlab/debugbar-plugin": "<3.1", "rainlab/user-plugin": "<=1.4.5", @@ -8327,48 +8469,50 @@ "rap2hpoutre/laravel-log-viewer": "<0.13", "react/http": ">=0.7,<1.9", "really-simple-plugins/complianz-gdpr": "<6.4.2", - "remdex/livehelperchat": "<3.99", - "reportico-web/reportico": "<=7.1.21", + "redaxo/source": "<=5.15.1", + "remdex/livehelperchat": "<4.29", + "reportico-web/reportico": "<=8.1", "rhukster/dom-sanitizer": "<1.0.7", "rmccue/requests": ">=1.6,<1.8", - "robrichards/xmlseclibs": "<3.0.4", + "robrichards/xmlseclibs": ">=1,<3.0.4", "roots/soil": "<4.1", "rudloff/alltube": "<3.0.3", "s-cart/core": "<6.9", "s-cart/s-cart": "<6.9", "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", - "sabre/dav": "<1.7.11|>=1.8,<1.8.9", + "sabre/dav": ">=1.6,<1.7.11|>=1.8,<1.8.9", "scheb/two-factor-bundle": "<3.26|>=4,<4.11", "sensiolabs/connect": "<4.2.3", "serluck/phpwhois": "<=4.2.6", "sfroemken/url_redirect": "<=1.2.1", "sheng/yiicms": "<=1.2", - "shopware/core": "<=6.4.20", - "shopware/platform": "<=6.4.20", + "shopware/core": "<6.5.8.8-dev|>=6.6.0.0-RC1-dev,<6.6.1", + "shopware/platform": "<6.5.8.8-dev|>=6.6.0.0-RC1-dev,<6.6.1", "shopware/production": "<=6.3.5.2", "shopware/shopware": "<=5.7.17", - "shopware/storefront": "<=6.4.8.1", - "shopxo/shopxo": "<2.2.6", + "shopware/storefront": "<=6.4.8.1|>=6.5.8,<6.5.8.7-dev", + "shopxo/shopxo": "<=6.1", "showdoc/showdoc": "<2.10.4", "silverstripe-australia/advancedreports": ">=1,<=2", - "silverstripe/admin": "<1.13.6", + "silverstripe/admin": "<1.13.19|>=2,<2.1.8", "silverstripe/assets": ">=1,<1.11.1", "silverstripe/cms": "<4.11.3", - "silverstripe/comments": ">=1.3,<1.9.99|>=2,<2.9.99|>=3,<3.1.1", + "silverstripe/comments": ">=1.3,<3.1.1", "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", - "silverstripe/framework": "<4.13.14|>=5,<5.0.13", - "silverstripe/graphql": "<3.8.2|>=4,<4.1.3|>=4.2,<4.2.5|>=4.3,<4.3.4|>=5,<5.0.3", + "silverstripe/framework": "<5.2.16", + "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.8.2|>=4,<4.3.7|>=5,<5.1.3", "silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1", "silverstripe/recipe-cms": ">=4.5,<4.5.3", "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", - "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4", + "silverstripe/reports": "<5.2.3", + "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4|>=2.1,<2.1.2", "silverstripe/silverstripe-omnipay": "<2.5.2|>=3,<3.0.2|>=3.1,<3.1.4|>=3.2,<3.2.1", "silverstripe/subsites": ">=2,<2.6.1", "silverstripe/taxonomy": ">=1.3,<1.3.1|>=2,<2.0.1", - "silverstripe/userforms": "<3", + "silverstripe/userforms": "<3|>=5,<5.4.2", "silverstripe/versioned-admin": ">=1,<1.11.1", "simple-updates/phpwhois": "<=1", - "simplesamlphp/saml2": "<1.15.4|>=2,<2.3.8|>=3,<3.1.4|==5.0.0.0-alpha12", + "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4|==5.0.0.0-alpha12", "simplesamlphp/simplesamlphp": "<1.18.6", "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", "simplesamlphp/simplesamlphp-module-openid": "<1", @@ -8380,33 +8524,37 @@ "slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1", "slim/slim": "<2.6", "slub/slub-events": "<3.0.3", - "smarty/smarty": "<3.1.48|>=4,<4.3.1", - "snipe/snipe-it": "<=6.2.2", + "smarty/smarty": "<4.5.3|>=5,<5.1.1", + "snipe/snipe-it": "<6.4.2", "socalnick/scn-social-auth": "<1.15.2", "socialiteproviders/steam": "<1.1", "spatie/browsershot": "<3.57.4", + "spatie/image-optimizer": "<1.7.3", "spipu/html2pdf": "<5.2.8", "spoon/library": "<1.4.1", "spoonity/tcpdf": "<6.2.22", "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", - "ssddanbrown/bookstack": "<22.02.3", - "statamic/cms": "<4.36", + "ssddanbrown/bookstack": "<24.05.1", + "statamic/cms": "<4.46|>=5.3,<5.6.2", "stormpath/sdk": "<9.9.99", - "studio-42/elfinder": "<2.1.62", + "studio-42/elfinder": "<=2.1.64", + "studiomitte/friendlycaptcha": "<0.1.4", "subhh/libconnect": "<7.0.8|>=8,<8.1", "sukohi/surpass": "<1", - "sulu/sulu": "<1.6.44|>=2,<2.2.18|>=2.3,<2.3.8|==2.4.0.0-RC1|>=2.5,<2.5.10", + "sulu/form-bundle": ">=2,<2.5.3", + "sulu/sulu": "<1.6.44|>=2,<2.4.17|>=2.5,<2.5.13", "sumocoders/framework-user-bundle": "<1.4", + "superbig/craft-audit": "<3.0.2", "swag/paypal": "<5.4.4", - "swiftmailer/swiftmailer": ">=4,<5.4.5", + "swiftmailer/swiftmailer": "<6.2.5", "swiftyedit/swiftyedit": "<1.2", "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", "sylius/grid-bundle": "<1.10.1", "sylius/paypal-plugin": ">=1,<1.2.4|>=1.3,<1.3.1", - "sylius/resource-bundle": "<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", - "sylius/sylius": "<1.9.10|>=1.10,<1.10.11|>=1.11,<1.11.2", - "symbiote/silverstripe-multivaluefield": ">=3,<3.0.99", + "sylius/resource-bundle": ">=1,<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", + "sylius/sylius": "<1.12.19|>=1.13.0.0-alpha1,<1.13.4", + "symbiote/silverstripe-multivaluefield": ">=3,<3.1", "symbiote/silverstripe-queuedjobs": ">=3,<3.0.2|>=3.1,<3.1.4|>=4,<4.0.7|>=4.1,<4.1.2|>=4.2,<4.2.4|>=4.3,<4.3.3|>=4.4,<4.4.3|>=4.5,<4.5.1|>=4.6,<4.6.4", "symbiote/silverstripe-seed": "<6.0.3", "symbiote/silverstripe-versionedfiles": "<=2.0.3", @@ -8415,7 +8563,7 @@ "symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", - "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<=5.3.14|>=5.4.3,<=5.4.3|>=6.0.3,<=6.0.3", + "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<5.3.15|>=5.4.3,<5.4.4|>=6.0.3,<6.0.4", "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", @@ -8433,7 +8581,7 @@ "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2|>=5.4,<5.4.31|>=6,<6.3.8", "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", - "symfony/symfony": "<4.4.51|>=5,<5.4.31|>=6,<6.3.8", + "symfony/symfony": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", "symfony/translation": ">=2,<2.0.17", "symfony/twig-bridge": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", "symfony/ux-autocomplete": "<2.11.2", @@ -8441,37 +8589,44 @@ "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", "symfony/webhook": ">=6.3,<6.3.8", - "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", + "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7|>=2.2.0.0-beta1,<2.2.0.0-beta2", + "symphonycms/symphony-2": "<2.6.4", "t3/dce": "<0.11.5|>=2.2,<2.6.2", "t3g/svg-sanitizer": "<1.0.3", + "t3s/content-consent": "<1.0.3|>=2,<2.0.2", "tastyigniter/tastyigniter": "<3.3", "tcg/voyager": "<=1.4", - "tecnickcom/tcpdf": "<6.2.22", + "tecnickcom/tcpdf": "<=6.7.4", "terminal42/contao-tablelookupwizard": "<3.3.5", "thelia/backoffice-default-template": ">=2.1,<2.1.2", "thelia/thelia": ">=2.1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", - "thinkcmf/thinkcmf": "<=5.1.7", + "thinkcmf/thinkcmf": "<6.0.8", "thorsten/phpmyfaq": "<3.2.2", "tikiwiki/tiki-manager": "<=17.1", - "tinymce/tinymce": "<5.10.9|>=6,<6.7.3", + "timber/timber": ">=0.16.6,<1.23.1|>=1.24,<1.24.1|>=2,<2.1", + "tinymce/tinymce": "<7.2", "tinymighty/wiki-seo": "<1.2.2", "titon/framework": "<9.9.99", "tobiasbg/tablepress": "<=2.0.0.0-RC1", - "topthink/framework": "<6.0.14", + "topthink/framework": "<6.0.17|>=6.1,<6.1.5|>=8,<8.0.4", "topthink/think": "<=6.1.1", "topthink/thinkphp": "<=3.2.3", + "torrentpier/torrentpier": "<=2.4.3", "tpwd/ke_search": "<4.0.3|>=4.1,<4.6.6|>=5,<5.0.2", - "tribalsystems/zenario": "<=9.4.59197", + "tribalsystems/zenario": "<9.5.60602", "truckersmp/phpwhois": "<=4.3.1", "ttskch/pagination-service-provider": "<1", + "twbs/bootstrap": "<=3.4.1|>=4,<=4.6.2", "twig/twig": "<1.44.7|>=2,<2.15.3|>=3,<3.4.3", "typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", - "typo3/cms-backend": ">=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", - "typo3/cms-core": "<=8.7.54|>=9,<=9.5.43|>=10,<=10.4.40|>=11,<=11.5.32|>=12,<=12.4.7", + "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", + "typo3/cms-core": "<=8.7.56|>=9,<=9.5.47|>=10,<=10.4.44|>=11,<=11.5.36|>=12,<=12.4.14|>=13,<=13.1", "typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1", + "typo3/cms-fluid": "<4.3.4|>=4.4,<4.4.1", "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", - "typo3/cms-install": ">=12.2,<12.4.8", + "typo3/cms-frontend": "<4.3.9|>=4.4,<4.4.5", + "typo3/cms-install": "<4.1.14|>=4.2,<4.2.16|>=4.3,<4.3.9|>=4.4,<4.4.5|>=12.2,<12.4.8", "typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30", "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", "typo3/html-sanitizer": ">=1,<=1.5.2|>=2,<=2.1.3", @@ -8481,19 +8636,28 @@ "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", "ua-parser/uap-php": "<3.8", "uasoft-indonesia/badaso": "<=2.9.7", - "unisharp/laravel-filemanager": "<=2.5.1", + "unisharp/laravel-filemanager": "<2.6.4", "userfrosting/userfrosting": ">=0.3.1,<4.6.3", "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", "uvdesk/community-skeleton": "<=1.1.1", + "uvdesk/core-framework": "<=1.1.1", "vanilla/safecurl": "<0.9.2", - "verot/class.upload.php": "<=1.0.3|>=2,<=2.0.4", + "verbb/comments": "<1.5.5", + "verbb/formie": "<2.1.6", + "verbb/image-resizer": "<2.0.9", + "verbb/knock-knock": "<1.2.8", + "verot/class.upload.php": "<=2.1.6", + "villagedefrance/opencart-overclocked": "<=1.11.1", "vova07/yii2-fileapi-widget": "<0.1.9", "vrana/adminer": "<4.8.1", + "vufind/vufind": ">=2,<9.1.1", "waldhacker/hcaptcha": "<2.1.2", "wallabag/tcpdf": "<6.2.22", "wallabag/wallabag": "<2.6.7", "wanglelecc/laracms": "<=1.0.3", - "web-auth/webauthn-framework": ">=3.3,<3.3.4", + "web-auth/webauthn-framework": ">=3.3,<3.3.4|>=4.5,<4.9", + "web-auth/webauthn-lib": ">=4.5,<4.9", + "web-feet/coastercms": "==5.5", "webbuilders-group/silverstripe-kapost-bridge": "<0.4", "webcoast/deferred-image-processing": "<1.0.2", "webklex/laravel-imap": "<5.3", @@ -8502,21 +8666,28 @@ "wikibase/wikibase": "<=1.39.3", "wikimedia/parsoid": "<0.12.2", "willdurand/js-translation-bundle": "<2.1.1", - "wintercms/winter": "<1.2.3", - "woocommerce/woocommerce": "<6.6", - "wp-cli/wp-cli": "<2.5", + "winter/wn-backend-module": "<1.2.4", + "winter/wn-dusk-plugin": "<2.1", + "winter/wn-system-module": "<1.2.4", + "wintercms/winter": "<=1.2.3", + "woocommerce/woocommerce": "<6.6|>=8.8,<8.8.5|>=8.9,<8.9.3", + "wp-cli/wp-cli": ">=0.12,<2.5", "wp-graphql/wp-graphql": "<=1.14.5", + "wp-premium/gravityforms": "<2.4.21", "wpanel/wpanel4-cms": "<=4.3.1", "wpcloud/wp-stateless": "<3.2", - "wwbn/avideo": "<=12.4", + "wpglobus/wpglobus": "<=1.9.6", + "wwbn/avideo": "<14.3", "xataface/xataface": "<3", "xpressengine/xpressengine": "<3.0.15", + "yab/quarx": "<2.4.5", "yeswiki/yeswiki": "<4.1", "yetiforce/yetiforce-crm": "<=6.4", "yidashi/yii2cmf": "<=2", "yii2mod/yii2-cms": "<1.9.2", "yiisoft/yii": "<1.1.29", - "yiisoft/yii2": "<2.0.38", + "yiisoft/yii2": "<2.0.49.4-dev", + "yiisoft/yii2-authclient": "<2.2.15", "yiisoft/yii2-bootstrap": "<2.0.4", "yiisoft/yii2-dev": "<2.0.43", "yiisoft/yii2-elasticsearch": "<2.0.5", @@ -8526,12 +8697,13 @@ "yikesinc/yikes-inc-easy-mailchimp-extender": "<6.8.6", "yoast-seo-for-typo3/yoast_seo": "<7.2.3", "yourls/yourls": "<=1.8.2", + "yuan1994/tpadmin": "<=1.3.12", "zencart/zencart": "<=1.5.7.0-beta", "zendesk/zendesk_api_client_php": "<2.2.11", - "zendframework/zend-cache": "<2.4.8|>=2.5,<2.5.3", + "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2", "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2", - "zendframework/zend-db": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.10|>=2.3,<2.3.5", + "zendframework/zend-db": "<2.2.10|>=2.3,<2.3.5", "zendframework/zend-developer-tools": ">=1.2.2,<1.2.3", "zendframework/zend-diactoros": "<1.8.4", "zendframework/zend-feed": "<2.10.3", @@ -8539,9 +8711,9 @@ "zendframework/zend-http": "<2.8.1", "zendframework/zend-json": ">=2.1,<2.1.6|>=2.2,<2.2.6", "zendframework/zend-ldap": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.8|>=2.3,<2.3.3", - "zendframework/zend-mail": ">=2,<2.4.11|>=2.5,<2.7.2", + "zendframework/zend-mail": "<2.4.11|>=2.5,<2.7.2", "zendframework/zend-navigation": ">=2,<2.2.7|>=2.3,<2.3.1", - "zendframework/zend-session": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.9|>=2.3,<2.3.4", + "zendframework/zend-session": ">=2,<2.2.9|>=2.3,<2.3.4", "zendframework/zend-validator": ">=2.3,<2.3.6", "zendframework/zend-view": ">=2,<2.2.7|>=2.3,<2.3.1", "zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6", @@ -8556,13 +8728,13 @@ "zendframework/zendservice-slideshare": "<2.0.2", "zendframework/zendservice-technorati": "<2.0.2", "zendframework/zendservice-windowsazure": "<2.0.2", - "zendframework/zendxml": "<1.0.1", + "zendframework/zendxml": ">=1,<1.0.1", "zenstruck/collection": "<0.2.1", "zetacomponents/mail": "<1.8.2", "zf-commons/zfc-user": "<1.2.2", - "zfcampus/zf-apigility-doctrine": "<1.0.3", + "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", "zfr/zfr-oauth2-server-module": "<0.1.2", - "zoujingli/thinkadmin": "<6.0.22" + "zoujingli/thinkadmin": "<=6.1.53" }, "type": "metapackage", "notification-url": "https://packagist.org/downloads/", @@ -8599,20 +8771,20 @@ "type": "tidelift" } ], - "time": "2023-11-30T20:04:21+00:00" + "time": "2024-08-05T15:04:41+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", "shasum": "" }, "require": { @@ -8647,7 +8819,7 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" }, "funding": [ { @@ -8655,7 +8827,7 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2024-03-02T06:27:43+00:00" }, { "name": "sebastian/code-unit", @@ -8844,20 +9016,20 @@ }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -8889,7 +9061,7 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" }, "funding": [ { @@ -8897,20 +9069,20 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2023-12-22T06:19:30+00:00" }, { "name": "sebastian/diff", - "version": "4.0.5", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", "shasum": "" }, "require": { @@ -8955,7 +9127,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" }, "funding": [ { @@ -8963,7 +9135,7 @@ "type": "github" } ], - "time": "2023-05-07T05:35:17+00:00" + "time": "2024-03-02T06:30:58+00:00" }, { "name": "sebastian/environment", @@ -9030,16 +9202,16 @@ }, { "name": "sebastian/exporter", - "version": "4.0.5", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", "shasum": "" }, "require": { @@ -9095,7 +9267,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" }, "funding": [ { @@ -9103,20 +9275,20 @@ "type": "github" } ], - "time": "2022-09-14T06:03:37+00:00" + "time": "2024-03-02T06:33:00+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.6", + "version": "5.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bde739e7565280bda77be70044ac1047bc007e34" + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34", - "reference": "bde739e7565280bda77be70044ac1047bc007e34", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", "shasum": "" }, "require": { @@ -9159,7 +9331,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" }, "funding": [ { @@ -9167,24 +9339,24 @@ "type": "github" } ], - "time": "2023-08-02T09:26:13+00:00" + "time": "2024-03-02T06:35:11+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -9216,7 +9388,7 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" }, "funding": [ { @@ -9224,7 +9396,7 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-12-22T06:20:34+00:00" }, { "name": "sebastian/object-enumerator", @@ -9403,16 +9575,16 @@ }, { "name": "sebastian/resource-operations", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", "shasum": "" }, "require": { @@ -9424,7 +9596,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -9445,8 +9617,7 @@ "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" }, "funding": [ { @@ -9454,7 +9625,7 @@ "type": "github" } ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2024-03-14T16:00:52+00:00" }, { "name": "sebastian/type", @@ -9567,16 +9738,16 @@ }, { "name": "spatie/array-to-xml", - "version": "3.2.2", + "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/spatie/array-to-xml.git", - "reference": "96be97e664c87613121d073ea39af4c74e57a7f8" + "reference": "f56b220fe2db1ade4c88098d83413ebdfc3bf876" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/96be97e664c87613121d073ea39af4c74e57a7f8", - "reference": "96be97e664c87613121d073ea39af4c74e57a7f8", + "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/f56b220fe2db1ade4c88098d83413ebdfc3bf876", + "reference": "f56b220fe2db1ade4c88098d83413ebdfc3bf876", "shasum": "" }, "require": { @@ -9589,6 +9760,11 @@ "spatie/pest-plugin-snapshots": "^1.1" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, "autoload": { "psr-4": { "Spatie\\ArrayToXml\\": "src" @@ -9614,7 +9790,7 @@ "xml" ], "support": { - "source": "https://github.com/spatie/array-to-xml/tree/3.2.2" + "source": "https://github.com/spatie/array-to-xml/tree/3.3.0" }, "funding": [ { @@ -9626,31 +9802,31 @@ "type": "github" } ], - "time": "2023-11-14T14:08:51+00:00" + "time": "2024-05-01T10:20:27+00:00" }, { "name": "symfony/browser-kit", - "version": "v6.4.0", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "a3bb210e001580ec75e1d02b27fae3452e6bf502" + "reference": "9c13742e3175b5815e272b981876ae329bec2040" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/a3bb210e001580ec75e1d02b27fae3452e6bf502", - "reference": "a3bb210e001580ec75e1d02b27fae3452e6bf502", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/9c13742e3175b5815e272b981876ae329bec2040", + "reference": "9c13742e3175b5815e272b981876ae329bec2040", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/dom-crawler": "^5.4|^6.0|^7.0" + "php": ">=8.2", + "symfony/dom-crawler": "^6.4|^7.0" }, "require-dev": { - "symfony/css-selector": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/mime": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0" + "symfony/css-selector": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -9678,7 +9854,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v6.4.0" + "source": "https://github.com/symfony/browser-kit/tree/v7.1.1" }, "funding": [ { @@ -9694,24 +9870,24 @@ "type": "tidelift" } ], - "time": "2023-10-31T08:18:17+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/css-selector", - "version": "v6.4.0", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "d036c6c0d0b09e24a14a35f8292146a658f986e4" + "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/d036c6c0d0b09e24a14a35f8292146a658f986e4", - "reference": "d036c6c0d0b09e24a14a35f8292146a658f986e4", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/1c7cee86c6f812896af54434f8ce29c8d94f9ff4", + "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -9743,7 +9919,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.4.0" + "source": "https://github.com/symfony/css-selector/tree/v7.1.1" }, "funding": [ { @@ -9759,30 +9935,30 @@ "type": "tidelift" } ], - "time": "2023-10-31T08:40:20+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/dom-crawler", - "version": "v6.4.0", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "14ff4fd2a5c8969d6158dbe7ef5b17d6a9c6ba33" + "reference": "01ce8174447f1f1dd33a5854b01beef79061d9fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/14ff4fd2a5c8969d6158dbe7ef5b17d6a9c6ba33", - "reference": "14ff4fd2a5c8969d6158dbe7ef5b17d6a9c6ba33", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/01ce8174447f1f1dd33a5854b01beef79061d9fa", + "reference": "01ce8174447f1f1dd33a5854b01beef79061d9fa", "shasum": "" }, "require": { "masterminds/html5": "^2.6", - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "symfony/css-selector": "^5.4|^6.0|^7.0" + "symfony/css-selector": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -9810,74 +9986,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v6.4.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": "2023-11-20T16:41:16+00:00" - }, - { - "name": "symfony/proxy-manager-bridge", - "version": "v6.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/proxy-manager-bridge.git", - "reference": "801c4590eacf0dc40d73135dbe79ad71effd6d04" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/801c4590eacf0dc40d73135dbe79ad71effd6d04", - "reference": "801c4590eacf0dc40d73135dbe79ad71effd6d04", - "shasum": "" - }, - "require": { - "friendsofphp/proxy-manager-lts": "^1.0.2", - "php": ">=8.1", - "symfony/dependency-injection": "^6.3|^7.0", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "require-dev": { - "symfony/config": "^6.1|^7.0" - }, - "type": "symfony-bridge", - "autoload": { - "psr-4": { - "Symfony\\Bridge\\ProxyManager\\": "" - }, - "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 ProxyManager with various Symfony components", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/proxy-manager-bridge/tree/v6.4.0" + "source": "https://github.com/symfony/dom-crawler/tree/v7.1.1" }, "funding": [ { @@ -9893,55 +10002,54 @@ "type": "tidelift" } ], - "time": "2023-11-01T12:07:38+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/translation", - "version": "v6.4.0", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37" + "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37", - "reference": "b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37", + "url": "https://api.github.com/repos/symfony/translation/zipball/8d5e50c813ba2859a6dfc99a0765c550507934a1", + "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "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/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.13", + "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/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^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/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/routing": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -9972,7 +10080,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.0" + "source": "https://github.com/symfony/translation/tree/v7.1.3" }, "funding": [ { @@ -9988,29 +10096,32 @@ "type": "tidelift" } ], - "time": "2023-11-29T08:14:36+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symplify/easy-coding-standard", - "version": "12.0.11", + "version": "12.3.4", "source": { "type": "git", "url": "https://github.com/easy-coding-standard/easy-coding-standard.git", - "reference": "5f34a99d035b4eef048857ec47d2035140871f50" + "reference": "03cd792d7fa6d9dc59b6e12a5ca73d9873ee9c0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/5f34a99d035b4eef048857ec47d2035140871f50", - "reference": "5f34a99d035b4eef048857ec47d2035140871f50", + "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/03cd792d7fa6d9dc59b6e12a5ca73d9873ee9c0e", + "reference": "03cd792d7fa6d9dc59b6e12a5ca73d9873ee9c0e", "shasum": "" }, "require": { "php": ">=7.2" }, "conflict": { - "friendsofphp/php-cs-fixer": "<3.0", - "phpcsstandards/php_codesniffer": "<3.6", - "symplify/coding-standard": "<11.3" + "friendsofphp/php-cs-fixer": "<3.46", + "phpcsstandards/php_codesniffer": "<3.8", + "symplify/coding-standard": "<12.1" + }, + "suggest": { + "ext-dom": "Needed to support checkstyle output format in class CheckstyleOutputFormatter" }, "bin": [ "bin/ecs" @@ -10034,7 +10145,7 @@ ], "support": { "issues": "https://github.com/easy-coding-standard/easy-coding-standard/issues", - "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.0.11" + "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.3.4" }, "funding": [ { @@ -10046,20 +10157,20 @@ "type": "github" } ], - "time": "2023-12-02T09:38:08+00:00" + "time": "2024-08-01T07:55:09+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.2", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", - "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -10088,7 +10199,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.2" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -10096,20 +10207,20 @@ "type": "github" } ], - "time": "2023-11-20T00:12:19+00:00" + "time": "2024-03-03T12:36:25+00:00" }, { "name": "vimeo/psalm", - "version": "5.16.0", + "version": "5.25.0", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "2897ba636551a8cb61601cc26f6ccfbba6c36591" + "reference": "01a8eb06b9e9cc6cfb6a320bf9fb14331919d505" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/2897ba636551a8cb61601cc26f6ccfbba6c36591", - "reference": "2897ba636551a8cb61601cc26f6ccfbba6c36591", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/01a8eb06b9e9cc6cfb6a320bf9fb14331919d505", + "reference": "01a8eb06b9e9cc6cfb6a320bf9fb14331919d505", "shasum": "" }, "require": { @@ -10128,11 +10239,11 @@ "ext-tokenizer": "*", "felixfbecker/advanced-json-rpc": "^3.1", "felixfbecker/language-server-protocol": "^1.5.2", - "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1", + "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0", "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", "nikic/php-parser": "^4.16", "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", - "sebastian/diff": "^4.0 || ^5.0", + "sebastian/diff": "^4.0 || ^5.0 || ^6.0", "spatie/array-to-xml": "^2.17.0 || ^3.0", "symfony/console": "^4.1.6 || ^5.0 || ^6.0 || ^7.0", "symfony/filesystem": "^5.4 || ^6.0 || ^7.0" @@ -10206,7 +10317,7 @@ "issues": "https://github.com/vimeo/psalm/issues", "source": "https://github.com/vimeo/psalm" }, - "time": "2023-11-22T20:38:47+00:00" + "time": "2024-06-16T15:08:35+00:00" }, { "name": "webmozart/assert", diff --git a/psalm.xml b/psalm.xml index 49bc1fcc1..228b2ab7b 100644 --- a/psalm.xml +++ b/psalm.xml @@ -30,6 +30,20 @@ + + + + + + + + + + + + + + diff --git a/src/Shared/Domain/Utils.php b/src/Shared/Domain/Utils.php index a50521eea..92a9d1117 100644 --- a/src/Shared/Domain/Utils.php +++ b/src/Shared/Domain/Utils.php @@ -57,7 +57,7 @@ public static function dot(array $array, string $prepend = ''): array public static function filesIn(string $path, string $fileType): array { return filter( - static fn (string $possibleModule): false|string => strstr($possibleModule, $fileType), + static fn (string $possibleModule): false | string => strstr($possibleModule, $fileType), scandir($path) ); } diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php b/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php index b7d4f1f20..d39aa7651 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php @@ -28,7 +28,7 @@ public function allSubscribedTo(string $eventClass): array return $formatted[$eventClass]; } - public function withRabbitMqQueueNamed(string $queueName): callable|DomainEventSubscriber + public function withRabbitMqQueueNamed(string $queueName): callable | DomainEventSubscriber { $subscriber = search( static fn (DomainEventSubscriber $subscriber): bool => RabbitMqQueueNameFormatter::format($subscriber) === diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php index cef77aca2..ea18ec7ce 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php @@ -23,7 +23,7 @@ public function __construct( private int $maxRetries ) {} - public function consume(callable|DomainEventSubscriber $subscriber, string $queueName): void + public function consume(callable | DomainEventSubscriber $subscriber, string $queueName): void { try { $this->connection->queue($queueName)->consume($this->consumer($subscriber)); diff --git a/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php b/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php index 50f25affb..a19a5609e 100644 --- a/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php +++ b/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php @@ -67,7 +67,7 @@ private static function generateDatabaseIfNotExists(array $parameters, string $s $connection->close(); } - private static function databaseExists(string $databaseName, MySqlSchemaManager $schemaManager): bool + private static function databaseExists(string $databaseName, MySQLSchemaManager $schemaManager): bool { return in_array($databaseName, $schemaManager->listDatabases(), true); } diff --git a/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php b/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php index 410b6a295..0f3ad3aa8 100644 --- a/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php +++ b/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php @@ -41,7 +41,7 @@ private function authenticate(string $user, string $pass, RequestEvent $event): $this->bus->dispatch(new AuthenticateUserCommand($user, $pass)); $this->addUserDataToRequest($user, $event); - } catch (InvalidAuthCredentials|InvalidAuthUsername) { + } catch (InvalidAuthCredentials | InvalidAuthUsername) { $event->setResponse(new JsonResponse(['error' => 'Invalid credentials'], Response::HTTP_FORBIDDEN)); } } diff --git a/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php b/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php index 320be5d69..25787a7db 100644 --- a/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php +++ b/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php @@ -14,7 +14,7 @@ final class AuthenticateUserCommandHandlerTest extends AuthModuleUnitTestCase { - private AuthenticateUserCommandHandler|null $handler; + private AuthenticateUserCommandHandler | null $handler; protected function setUp(): void { diff --git a/tests/Backoffice/Auth/AuthModuleUnitTestCase.php b/tests/Backoffice/Auth/AuthModuleUnitTestCase.php index 3abdfa568..4a7ad4a7c 100644 --- a/tests/Backoffice/Auth/AuthModuleUnitTestCase.php +++ b/tests/Backoffice/Auth/AuthModuleUnitTestCase.php @@ -12,7 +12,7 @@ abstract class AuthModuleUnitTestCase extends UnitTestCase { - private AuthRepository|MockInterface|null $repository = null; + private AuthRepository | MockInterface | null $repository = null; protected function shouldSearch(AuthUsername $username, AuthUser $authUser = null): void { @@ -23,7 +23,7 @@ protected function shouldSearch(AuthUsername $username, AuthUser $authUser = nul ->andReturn($authUser); } - protected function repository(): AuthRepository|MockInterface + protected function repository(): AuthRepository | MockInterface { return $this->repository ??= $this->mock(AuthRepository::class); } diff --git a/tests/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php b/tests/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php index e2c723de9..4fe82e139 100644 --- a/tests/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php +++ b/tests/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php @@ -12,7 +12,7 @@ final class CreateCourseCommandHandlerTest extends CoursesModuleUnitTestCase { - private CreateCourseCommandHandler|null $handler; + private CreateCourseCommandHandler | null $handler; protected function setUp(): void { diff --git a/tests/Mooc/Courses/Application/Update/CourseRenamerTest.php b/tests/Mooc/Courses/Application/Update/CourseRenamerTest.php index ff1f1b8b5..7890b36f7 100644 --- a/tests/Mooc/Courses/Application/Update/CourseRenamerTest.php +++ b/tests/Mooc/Courses/Application/Update/CourseRenamerTest.php @@ -14,7 +14,7 @@ final class CourseRenamerTest extends CoursesModuleUnitTestCase { - private CourseRenamer|null $renamer; + private CourseRenamer | null $renamer; protected function setUp(): void { diff --git a/tests/Mooc/Courses/CoursesModuleUnitTestCase.php b/tests/Mooc/Courses/CoursesModuleUnitTestCase.php index 6fd84ad21..b4d269546 100644 --- a/tests/Mooc/Courses/CoursesModuleUnitTestCase.php +++ b/tests/Mooc/Courses/CoursesModuleUnitTestCase.php @@ -12,7 +12,7 @@ abstract class CoursesModuleUnitTestCase extends UnitTestCase { - private CourseRepository|MockInterface|null $repository = null; + private CourseRepository | MockInterface | null $repository = null; protected function shouldSave(Course $course): void { @@ -32,7 +32,7 @@ protected function shouldSearch(CourseId $id, ?Course $course): void ->andReturn($course); } - protected function repository(): CourseRepository|MockInterface + protected function repository(): CourseRepository | MockInterface { return $this->repository ??= $this->mock(CourseRepository::class); } diff --git a/tests/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php b/tests/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php index db8887486..2c8bc2ef5 100644 --- a/tests/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php +++ b/tests/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php @@ -13,7 +13,7 @@ final class FindCoursesCounterQueryHandlerTest extends CoursesCounterModuleUnitTestCase { - private FindCoursesCounterQueryHandler|null $handler; + private FindCoursesCounterQueryHandler | null $handler; protected function setUp(): void { diff --git a/tests/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php b/tests/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php index 6e9c9039b..b81642fc2 100644 --- a/tests/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php +++ b/tests/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php @@ -14,7 +14,7 @@ final class IncrementCoursesCounterOnCourseCreatedTest extends CoursesCounterModuleUnitTestCase { - private IncrementCoursesCounterOnCourseCreated|null $subscriber; + private IncrementCoursesCounterOnCourseCreated | null $subscriber; protected function setUp(): void { diff --git a/tests/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php b/tests/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php index 2de4db1a7..6937e3902 100644 --- a/tests/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php +++ b/tests/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php @@ -11,7 +11,7 @@ abstract class CoursesCounterModuleUnitTestCase extends UnitTestCase { - private CoursesCounterRepository|MockInterface|null $repository = null; + private CoursesCounterRepository | MockInterface | null $repository = null; protected function shouldSave(CoursesCounter $course): void { @@ -30,7 +30,7 @@ protected function shouldSearch(?CoursesCounter $counter): void ->andReturn($counter); } - protected function repository(): CoursesCounterRepository|MockInterface + protected function repository(): CoursesCounterRepository | MockInterface { return $this->repository ??= $this->mock(CoursesCounterRepository::class); } diff --git a/tests/Shared/Infrastructure/Behat/ApiContext.php b/tests/Shared/Infrastructure/Behat/ApiContext.php index eeddfca35..a0adff803 100644 --- a/tests/Shared/Infrastructure/Behat/ApiContext.php +++ b/tests/Shared/Infrastructure/Behat/ApiContext.php @@ -101,7 +101,7 @@ public function theResponseStatusCodeShouldBe(mixed $expectedResponseCode): void } } - private function sanitizeOutput(string $output): false|string + private function sanitizeOutput(string $output): false | string { return json_encode(json_decode(trim($output), true, 512, JSON_THROW_ON_ERROR), JSON_THROW_ON_ERROR); } diff --git a/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php b/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php index 27133c192..b8dbff2b2 100644 --- a/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php @@ -13,7 +13,7 @@ final class InMemorySymfonyCommandBusTest extends UnitTestCase { - private InMemorySymfonyCommandBus|null $commandBus; + private InMemorySymfonyCommandBus | null $commandBus; protected function setUp(): void { @@ -48,7 +48,7 @@ public function __invoke(FakeCommand $command): never }; } - private function command(): Command|MockInterface + private function command(): Command | MockInterface { return $this->mock(Command::class); } diff --git a/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php b/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php index 4ad562ae1..ca17d6ceb 100644 --- a/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php @@ -16,8 +16,8 @@ final class MySqlDoctrineEventBusTest extends InfrastructureTestCase { - private MySqlDoctrineEventBus|null $bus; - private MySqlDoctrineDomainEventsConsumer|null $consumer; + private MySqlDoctrineEventBus | null $bus; + private MySqlDoctrineDomainEventsConsumer | null $consumer; protected function setUp(): void { diff --git a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php index 61debc9ee..937f28e08 100644 --- a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php +++ b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php @@ -15,5 +15,5 @@ public static function subscribedTo(): array return [CourseCreatedDomainEvent::class, CoursesCounterIncrementedDomainEvent::class, ]; } - public function __invoke(CourseCreatedDomainEvent|CoursesCounterIncrementedDomainEvent $event): void {} + public function __invoke(CourseCreatedDomainEvent | CoursesCounterIncrementedDomainEvent $event): void {} } diff --git a/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php b/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php index 5037795cb..dc3f2095b 100644 --- a/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php @@ -13,7 +13,7 @@ final class InMemorySymfonyQueryBusTest extends UnitTestCase { - private InMemorySymfonyQueryBus|null $queryBus; + private InMemorySymfonyQueryBus | null $queryBus; protected function setUp(): void { @@ -48,7 +48,7 @@ public function __invoke(FakeQuery $query): never }; } - private function query(): MockInterface|Query + private function query(): MockInterface | Query { return $this->mock(Query::class); } diff --git a/tests/Shared/Infrastructure/Mink/MinkHelper.php b/tests/Shared/Infrastructure/Mink/MinkHelper.php index 1d9da8a1c..ea443d6e1 100644 --- a/tests/Shared/Infrastructure/Mink/MinkHelper.php +++ b/tests/Shared/Infrastructure/Mink/MinkHelper.php @@ -35,8 +35,6 @@ public function sendRequest(string $method, string $url, array $optionalParams = $optionalParams['changeHistory'] ); - $this->resetRequestStuff(); - return $crawler; } @@ -79,10 +77,4 @@ private function normalizeHeaders(array $headers): array { return array_map('implode', array_filter($headers)); } - - private function resetRequestStuff(): void - { - $this->getSession()->reset(); - $this->resetServerParameters(); - } } diff --git a/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php b/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php index 430373dc4..1737b7adb 100644 --- a/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php +++ b/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php @@ -5,17 +5,15 @@ namespace CodelyTv\Tests\Shared\Infrastructure\Mockery; use CodelyTv\Tests\Shared\Infrastructure\PhpUnit\Constraint\CodelyTvConstraintIsSimilar; -use Mockery\Matcher\MatcherAbstract; +use Mockery\Matcher\MatcherInterface; use Stringable; -final class CodelyTvMatcherIsSimilar extends MatcherAbstract implements Stringable +final readonly class CodelyTvMatcherIsSimilar implements Stringable, MatcherInterface { - private readonly CodelyTvConstraintIsSimilar $constraint; + private CodelyTvConstraintIsSimilar $constraint; public function __construct(mixed $value, float $delta = 0.0) { - parent::__construct($value); - $this->constraint = new CodelyTvConstraintIsSimilar($value, $delta); } diff --git a/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php b/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php index 3ffac0ca0..599f2005d 100644 --- a/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php +++ b/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php @@ -11,16 +11,16 @@ use CodelyTv\Shared\Domain\Bus\Query\Response; use CodelyTv\Shared\Domain\UuidGenerator; use CodelyTv\Tests\Shared\Domain\TestUtils; +use CodelyTv\Tests\Shared\Infrastructure\Mockery\CodelyTvMatcherIsSimilar; use Mockery; use Mockery\Adapter\Phpunit\MockeryTestCase; -use Mockery\Matcher\MatcherAbstract; use Mockery\MockInterface; use Throwable; abstract class UnitTestCase extends MockeryTestCase { - private EventBus|MockInterface|null $eventBus = null; - private MockInterface|UuidGenerator|null $uuidGenerator = null; + private EventBus | MockInterface | null $eventBus = null; + private MockInterface | UuidGenerator | null $uuidGenerator = null; protected function mock(string $className): MockInterface { @@ -43,7 +43,7 @@ protected function shouldNotPublishDomainEvent(): void ->andReturnNull(); } - protected function eventBus(): EventBus|MockInterface + protected function eventBus(): EventBus | MockInterface { return $this->eventBus ??= $this->mock(EventBus::class); } @@ -57,7 +57,7 @@ protected function shouldGenerateUuid(string $uuid): void ->andReturn($uuid); } - protected function uuidGenerator(): MockInterface|UuidGenerator + protected function uuidGenerator(): MockInterface | UuidGenerator { return $this->uuidGenerator ??= $this->mock(UuidGenerator::class); } @@ -97,7 +97,7 @@ protected function assertSimilar(mixed $expected, mixed $actual): void TestUtils::assertSimilar($expected, $actual); } - protected function similarTo(mixed $value, float $delta = 0.0): MatcherAbstract + protected function similarTo(mixed $value, float $delta = 0.0): CodelyTvMatcherIsSimilar { return TestUtils::similarTo($value, $delta); } diff --git a/tests/Shared/SharedArchitectureTest.php b/tests/Shared/SharedArchitectureTest.php index 4e7489762..da8b1e751 100644 --- a/tests/Shared/SharedArchitectureTest.php +++ b/tests/Shared/SharedArchitectureTest.php @@ -42,6 +42,7 @@ public function test_shared_infrastructure_should_not_import_from_other_contexts // This need to be refactored Selector::classname(MySqlDatabaseCleaner::class), Selector::classname(AuthenticateUserCommand::class), + Selector::inNamespace('CodelyTv\Backoffice\Auth'), ); } From 9271c467943f835ab3b6e5ba30bdbd710aca9d73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Tue, 6 Aug 2024 17:12:23 +0200 Subject: [PATCH 40/40] docs: add light and dark logo --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b639c10e7..85d72efbe 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@

- Codely logo + + + + Codely logo +

@@ -9,7 +13,7 @@

- codely.tv + Codely Open Source projects CodelyTV Courses Symfony 7 Type Coverage