From 2b5c70dede6a89f2704bff3040c6ce50430fbf3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Fri, 6 Mar 2020 00:43:20 +0100 Subject: [PATCH 001/106] Add labeler (#133) --- .github/workflows/labeler.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/workflows/labeler.yml diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml new file mode 100644 index 000000000..22d4669f9 --- /dev/null +++ b/.github/workflows/labeler.yml @@ -0,0 +1,17 @@ +name: labeler + +on: [pull_request] + +jobs: + labeler: + runs-on: ubuntu-latest + name: Label the PR size + steps: + - uses: codelytv/pr-size-labeler@v1.3.0 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + xs_max_size: '10' + s_max_size: '100' + m_max_size: '300' + l_max_size: '600' + fail_if_xl: 'true' From 704c41a0b8c0d64753708ff2559896a9a080af7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Fri, 6 Mar 2020 08:04:11 +0100 Subject: [PATCH 002/106] Don't trigger the CI workflow twice (#134) --- .github/workflows/ci.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index db5e80844..a7f12e1ff 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,10 @@ name: CI -on: [push, pull_request] +on: + push: + branches: + - master + pull_request: jobs: build: From 78669e7107e414521ba69267f69b36544fc45ead Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Fri, 6 Mar 2020 08:46:14 +0100 Subject: [PATCH 003/106] Add some php 7.4 godness (#135) --- .github/workflows/labeler.yml | 4 +- apps/backoffice/backend/bin/console | 12 +-- apps/backoffice/backend/config/bundles.php | 2 +- .../backend/config/routes/health-check.yaml | 6 +- .../backend/config/services/framework.yaml | 28 +++--- .../backend/src/BackofficeBackendKernel.php | 4 +- .../HealthCheck/HealthCheckGetController.php | 3 +- apps/backoffice/frontend/bin/console | 12 +-- .../frontend/config/routes/api_courses.yaml | 6 +- .../frontend/config/routes/courses.yaml | 12 +-- .../frontend/config/routes/health-check.yaml | 6 +- .../frontend/config/routes/home.yaml | 6 +- .../frontend/config/services/framework.yaml | 28 +++--- .../frontend/src/BackofficeFrontendKernel.php | 4 +- .../ImportCoursesToElasticsearchCommand.php | 6 +- .../Courses/CoursesGetWebController.php | 5 ++ .../Courses/CoursesPostWebController.php | 7 +- .../HealthCheck/HealthCheckGetController.php | 3 +- .../Controller/Home/HomeGetWebController.php | 5 ++ .../courses/partials/list_courses.html.twig | 89 ++++++++++--------- apps/bootstrap.php | 17 ++-- apps/mooc/backend/bin/console | 12 +-- apps/mooc/backend/config/routes/courses.yaml | 6 +- .../config/routes/courses_counter.yaml | 6 +- .../backend/config/routes/health-check.yaml | 6 +- .../backend/config/services/framework.yaml | 26 +++--- apps/mooc/backend/public/index.php | 9 +- .../MySql/ConsumeMySqlDomainEventsCommand.php | 10 +-- .../RabbitMq/ConfigureRabbitMqCommand.php | 10 +-- .../ConsumeRabbitMqDomainEventsCommand.php | 10 +-- ...SupervisorRabbitMqConsumerFilesCommand.php | 11 ++- .../Courses/CoursesPutController.php | 4 +- .../CoursesCounterGetController.php | 1 - .../HealthCheck/HealthCheckGetController.php | 5 +- apps/mooc/backend/src/MoocBackendKernel.php | 4 +- .../Application/Store/DomainEventStorer.php | 2 +- .../Store/StoreDomainEventOnOccurred.php | 4 +- .../Domain/AnalyticsDomainEvent.php | 8 +- .../Domain/AnalyticsDomainEventBody.php | 2 +- .../Authenticate/AuthenticateUserCommand.php | 4 +- .../AuthenticateUserCommandHandler.php | 4 +- .../Authenticate/UserAuthenticator.php | 2 +- src/Backoffice/Auth/Domain/AuthUser.php | 4 +- .../Auth/Domain/InvalidAuthCredentials.php | 4 +- .../Auth/Domain/InvalidAuthUsername.php | 4 +- .../Application/BackofficeCourseResponse.php | 6 +- .../Application/BackofficeCoursesResponse.php | 2 +- .../Create/BackofficeCourseCreator.php | 2 +- .../CreateBackofficeCourseOnCourseCreated.php | 4 +- .../AllBackofficeCoursesSearcher.php | 10 ++- ...SearchAllBackofficeCoursesQueryHandler.php | 2 +- .../BackofficeCoursesByCriteriaSearcher.php | 10 ++- ...SearchBackofficeCoursesByCriteriaQuery.php | 10 +-- ...ackofficeCoursesByCriteriaQueryHandler.php | 2 +- .../Courses/Domain/BackofficeCourse.php | 6 +- .../Doctrine/BackofficeCourse.orm.xml | 4 +- ...lasticsearchBackofficeCourseRepository.php | 16 ++-- ...nMemoryCacheBackofficeCourseRepository.php | 6 +- .../Application/Create/CourseCreator.php | 6 +- .../Create/CreateCourseCommand.php | 6 +- .../Create/CreateCourseCommandHandler.php | 4 +- .../Courses/Application/Find/CourseFinder.php | 2 +- .../Application/Update/CourseRenamer.php | 6 +- src/Mooc/Courses/Domain/Course.php | 6 +- .../Domain/CourseCreatedDomainEvent.php | 4 +- src/Mooc/Courses/Domain/CourseNotExist.php | 2 +- .../Persistence/Doctrine/Course.orm.xml | 4 +- .../Doctrine/CourseDuration.orm.xml | 4 +- .../Persistence/Doctrine/CourseName.orm.xml | 4 +- .../Eloquent/CourseEloquentModel.php | 17 ---- .../Persistence/EloquentCourseRepository.php | 36 -------- .../Application/Find/CoursesCounterFinder.php | 2 +- .../Find/CoursesCounterResponse.php | 2 +- .../Find/FindCoursesCounterQueryHandler.php | 2 +- .../Increment/CoursesCounterIncrementer.php | 8 +- ...IncrementCoursesCounterOnCourseCreated.php | 2 +- .../CoursesCounter/Domain/CoursesCounter.php | 10 +-- .../CoursesCounterIncrementedDomainEvent.php | 4 +- .../Doctrine/CoursesCounter.orm.xml | 8 +- .../Doctrine/CoursesCounterTotal.orm.xml | 4 +- .../Doctrine/DbalTypesSearcher.php | 16 +--- .../Doctrine/DoctrinePrefixesSearcher.php | 12 +-- src/Shared/Domain/Aggregate/AggregateRoot.php | 3 +- src/Shared/Domain/Bus/Event/DomainEvent.php | 10 +-- src/Shared/Domain/Collection.php | 11 ++- src/Shared/Domain/Criteria/Criteria.php | 8 +- src/Shared/Domain/Criteria/Filter.php | 6 +- src/Shared/Domain/Criteria/FilterOperator.php | 1 - src/Shared/Domain/Criteria/Filters.php | 8 +- src/Shared/Domain/Criteria/Order.php | 4 +- src/Shared/Domain/Monitoring.php | 2 + src/Shared/Domain/Utils.php | 15 ++-- src/Shared/Domain/ValueObject/Enum.php | 11 ++- .../Domain/ValueObject/IntValueObject.php | 4 +- .../Domain/ValueObject/StringValueObject.php | 4 +- src/Shared/Domain/ValueObject/Uuid.php | 16 ++-- .../Bus/CallableFirstParameterExtractor.php | 8 +- .../Bus/Command/InMemorySymfonyCommandBus.php | 2 +- .../Bus/Event/DomainEventJsonDeserializer.php | 2 +- .../Bus/Event/DomainEventMapping.php | 14 +-- .../Event/DomainEventSubscriberLocator.php | 7 +- .../InMemory/InMemorySymfonyEventBus.php | 5 +- .../MySqlDoctrineDomainEventsConsumer.php | 12 +-- .../Bus/Event/MySql/MySqlDoctrineEventBus.php | 3 +- .../Bus/Event/RabbitMq/RabbitMqConfigurer.php | 2 +- .../Bus/Event/RabbitMq/RabbitMqConnection.php | 2 +- .../Bus/Event/RabbitMq/RabbitMqEventBus.php | 6 +- .../RabbitMq/RabbitMqQueueNameFormatter.php | 6 +- .../Doctrine/DatabaseConnections.php | 2 +- .../Dbal/DbalCustomTypesRegistrar.php | 2 +- .../Doctrine/DoctrineEntityManagerFactory.php | 5 +- .../Elasticsearch/ElasticsearchClient.php | 4 +- .../Infrastructure/Logger/MonologLogger.php | 2 +- .../Doctrine/DoctrineCriteriaConverter.php | 28 +++--- .../Doctrine/DoctrineRepository.php | 2 +- .../Persistence/Doctrine/UuidType.php | 4 +- .../Elasticsearch/ElasticQueryGenerator.php | 6 +- .../Elasticsearch/ElasticsearchRepository.php | 24 +++-- .../Symfony/AddJsonBodyToRequestListener.php | 4 +- .../Infrastructure/Symfony/ApiController.php | 6 +- .../Symfony/ApiExceptionListener.php | 4 +- .../ApiExceptionsHttpStatusCodeMapping.php | 3 +- .../Symfony/BasicHttpAuthMiddleware.php | 3 +- .../Infrastructure/Symfony/FlashSession.php | 2 +- .../Infrastructure/Symfony/WebController.php | 6 +- .../Domain/BackofficeCourseCriteriaMother.php | 1 - .../Courses/Domain/BackofficeCourseMother.php | 2 +- .../Mooc/Courses/Domain/CourseIdMother.php | 4 +- .../MoocContextInfrastructureTestCase.php | 2 +- .../PhpUnit/MoocEnvironmentArranger.php | 2 +- .../Shared/Domain/Criteria/CriteriaMother.php | 8 +- .../src/Shared/Domain/RandomElementPicker.php | 2 - .../Command/InMemorySymfonyCommandBusTest.php | 3 +- .../Infrastructure/Bus/Query/FakeResponse.php | 2 +- .../Bus/Query/InMemorySymfonyQueryBusTest.php | 3 +- .../Doctrine/DatabaseCleaner.php | 6 +- .../Shared/Infrastructure/Mink/MinkHelper.php | 5 +- .../Mockery/CodelyTvMatcherIsSimilar.php | 2 +- .../AggregateRootArraySimilarComparator.php | 12 +-- .../DateTimeStringSimilarComparator.php | 26 +++--- .../DomainEventArraySimilarComparator.php | 12 +-- 141 files changed, 489 insertions(+), 556 deletions(-) delete mode 100644 src/Mooc/Courses/Infrastructure/Persistence/Eloquent/CourseEloquentModel.php delete mode 100644 src/Mooc/Courses/Infrastructure/Persistence/EloquentCourseRepository.php diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 22d4669f9..5b7b1aedb 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -12,6 +12,6 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} xs_max_size: '10' s_max_size: '100' - m_max_size: '300' - l_max_size: '600' + m_max_size: '350' + l_max_size: '700' fail_if_xl: 'true' diff --git a/apps/backoffice/backend/bin/console b/apps/backoffice/backend/bin/console index 64021c6a8..91327c2e6 100755 --- a/apps/backoffice/backend/bin/console +++ b/apps/backoffice/backend/bin/console @@ -6,13 +6,13 @@ use Symfony\Bundle\FrameworkBundle\Console\Application; use Symfony\Component\Console\Input\ArgvInput; use Symfony\Component\Debug\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; +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; } 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.'); @@ -20,11 +20,11 @@ if (!class_exists(Application::class)) { $input = new ArgvInput(); if (null !== $env = $input->getParameterOption(['--env', '-e'], null, true)) { - putenv('APP_ENV='.$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = $env); + putenv('APP_ENV=' . $_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = $env); } if ($input->hasParameterOption('--no-debug', true)) { - putenv('APP_DEBUG='.$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = '0'); + putenv('APP_DEBUG=' . $_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = '0'); } require dirname(__DIR__) . '/../../bootstrap.php'; @@ -37,6 +37,6 @@ if ($_SERVER['APP_DEBUG']) { } } -$kernel = new BackofficeBackendKernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); +$kernel = new BackofficeBackendKernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); $application = new Application($kernel); $application->run($input); diff --git a/apps/backoffice/backend/config/bundles.php b/apps/backoffice/backend/config/bundles.php index af53496e6..7de452252 100644 --- a/apps/backoffice/backend/config/bundles.php +++ b/apps/backoffice/backend/config/bundles.php @@ -3,5 +3,5 @@ return [ Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], FriendsOfBehat\SymfonyExtension\Bundle\FriendsOfBehatSymfonyExtensionBundle::class => ['test' => true], -// WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] + // WouterJ\EloquentBundle\WouterJEloquentBundle::class => ['test' => true] ]; diff --git a/apps/backoffice/backend/config/routes/health-check.yaml b/apps/backoffice/backend/config/routes/health-check.yaml index 605944bfb..37223ceda 100644 --- a/apps/backoffice/backend/config/routes/health-check.yaml +++ b/apps/backoffice/backend/config/routes/health-check.yaml @@ -1,4 +1,4 @@ health-check_get: - path: /health-check - controller: CodelyTv\Apps\Backoffice\Backend\Controller\HealthCheck\HealthCheckGetController - methods: [GET] + path: /health-check + controller: CodelyTv\Apps\Backoffice\Backend\Controller\HealthCheck\HealthCheckGetController + methods: [GET] diff --git a/apps/backoffice/backend/config/services/framework.yaml b/apps/backoffice/backend/config/services/framework.yaml index cf454c784..b7cea6492 100644 --- a/apps/backoffice/backend/config/services/framework.yaml +++ b/apps/backoffice/backend/config/services/framework.yaml @@ -1,17 +1,17 @@ framework: - secret: '%env(APP_SECRET)%' - #csrf_protection: true - #http_method_override: true + secret: '%env(APP_SECRET)%' + #csrf_protection: true + #http_method_override: true - # Enables session support. Note that the session will ONLY be started if you read or write from it. - # Remove or comment this section to explicitly disable session support. - session: - handler_id: null - cookie_secure: auto - cookie_samesite: lax - enabled: true + # Enables session support. Note that the session will ONLY be started if you read or write from it. + # Remove or comment this section to explicitly disable session support. + session: + handler_id: null + cookie_secure: auto + cookie_samesite: lax + enabled: true - #esi: true - #fragments: true - php_errors: - log: true + #esi: true + #fragments: true + php_errors: + log: true diff --git a/apps/backoffice/backend/src/BackofficeBackendKernel.php b/apps/backoffice/backend/src/BackofficeBackendKernel.php index ae48a2e12..c66dd921c 100644 --- a/apps/backoffice/backend/src/BackofficeBackendKernel.php +++ b/apps/backoffice/backend/src/BackofficeBackendKernel.php @@ -10,10 +10,12 @@ use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Kernel; use Symfony\Component\Routing\RouteCollectionBuilder; +use function dirname; final class BackofficeBackendKernel extends Kernel { use MicroKernelTrait; + private const CONFIG_EXTS = '.{xml,yaml}'; public function registerBundles(): iterable @@ -28,7 +30,7 @@ public function registerBundles(): iterable public function getProjectDir(): string { - return \dirname(__DIR__); + return dirname(__DIR__); } protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void diff --git a/apps/backoffice/backend/src/Controller/HealthCheck/HealthCheckGetController.php b/apps/backoffice/backend/src/Controller/HealthCheck/HealthCheckGetController.php index 225ea025b..7125402d8 100644 --- a/apps/backoffice/backend/src/Controller/HealthCheck/HealthCheckGetController.php +++ b/apps/backoffice/backend/src/Controller/HealthCheck/HealthCheckGetController.php @@ -6,11 +6,10 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\Response; final class HealthCheckGetController { - public function __invoke(Request $request): Response + public function __invoke(Request $request): JsonResponse { return new JsonResponse( [ diff --git a/apps/backoffice/frontend/bin/console b/apps/backoffice/frontend/bin/console index abf8c9737..70eea8863 100755 --- a/apps/backoffice/frontend/bin/console +++ b/apps/backoffice/frontend/bin/console @@ -6,13 +6,13 @@ use Symfony\Bundle\FrameworkBundle\Console\Application; use Symfony\Component\Console\Input\ArgvInput; use Symfony\Component\Debug\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; +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; } 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.'); @@ -20,11 +20,11 @@ if (!class_exists(Application::class)) { $input = new ArgvInput(); if (null !== $env = $input->getParameterOption(['--env', '-e'], null, true)) { - putenv('APP_ENV='.$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = $env); + putenv('APP_ENV=' . $_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = $env); } if ($input->hasParameterOption('--no-debug', true)) { - putenv('APP_DEBUG='.$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = '0'); + putenv('APP_DEBUG=' . $_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = '0'); } require dirname(__DIR__) . '/../../bootstrap.php'; @@ -37,6 +37,6 @@ if ($_SERVER['APP_DEBUG']) { } } -$kernel = new BackofficeFrontendKernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); +$kernel = new BackofficeFrontendKernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); $application = new Application($kernel); $application->run($input); diff --git a/apps/backoffice/frontend/config/routes/api_courses.yaml b/apps/backoffice/frontend/config/routes/api_courses.yaml index c5c6a2dc2..3be1e106f 100644 --- a/apps/backoffice/frontend/config/routes/api_courses.yaml +++ b/apps/backoffice/frontend/config/routes/api_courses.yaml @@ -1,4 +1,4 @@ api_courses_get: - path: /api/courses - controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\ApiCoursesGetController - methods: [GET] + path: /api/courses + controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\ApiCoursesGetController + methods: [GET] diff --git a/apps/backoffice/frontend/config/routes/courses.yaml b/apps/backoffice/frontend/config/routes/courses.yaml index eee4785c1..46d5ab683 100644 --- a/apps/backoffice/frontend/config/routes/courses.yaml +++ b/apps/backoffice/frontend/config/routes/courses.yaml @@ -1,9 +1,9 @@ courses_get: - path: /courses - controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\CoursesGetController - methods: [GET] + path: /courses + controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\CoursesGetController + methods: [GET] courses_post: - path: /courses - controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\CoursesPostController - methods: [POST] + path: /courses + controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\CoursesPostController + methods: [POST] diff --git a/apps/backoffice/frontend/config/routes/health-check.yaml b/apps/backoffice/frontend/config/routes/health-check.yaml index 9d68c6115..c5035a4bc 100644 --- a/apps/backoffice/frontend/config/routes/health-check.yaml +++ b/apps/backoffice/frontend/config/routes/health-check.yaml @@ -1,4 +1,4 @@ health-check_get: - path: /health-check - controller: CodelyTv\Apps\Backoffice\Frontend\Controller\HealthCheck\HealthCheckGetController - methods: [GET] + path: /health-check + controller: CodelyTv\Apps\Backoffice\Frontend\Controller\HealthCheck\HealthCheckGetController + methods: [GET] diff --git a/apps/backoffice/frontend/config/routes/home.yaml b/apps/backoffice/frontend/config/routes/home.yaml index 973bffb55..cbf8e1f5b 100644 --- a/apps/backoffice/frontend/config/routes/home.yaml +++ b/apps/backoffice/frontend/config/routes/home.yaml @@ -1,4 +1,4 @@ home_get: - path: / - controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Home\HomeGetController - methods: [GET] + path: / + controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Home\HomeGetController + methods: [GET] diff --git a/apps/backoffice/frontend/config/services/framework.yaml b/apps/backoffice/frontend/config/services/framework.yaml index cf454c784..b7cea6492 100644 --- a/apps/backoffice/frontend/config/services/framework.yaml +++ b/apps/backoffice/frontend/config/services/framework.yaml @@ -1,17 +1,17 @@ framework: - secret: '%env(APP_SECRET)%' - #csrf_protection: true - #http_method_override: true + secret: '%env(APP_SECRET)%' + #csrf_protection: true + #http_method_override: true - # Enables session support. Note that the session will ONLY be started if you read or write from it. - # Remove or comment this section to explicitly disable session support. - session: - handler_id: null - cookie_secure: auto - cookie_samesite: lax - enabled: true + # Enables session support. Note that the session will ONLY be started if you read or write from it. + # Remove or comment this section to explicitly disable session support. + session: + handler_id: null + cookie_secure: auto + cookie_samesite: lax + enabled: true - #esi: true - #fragments: true - php_errors: - log: true + #esi: true + #fragments: true + php_errors: + log: true diff --git a/apps/backoffice/frontend/src/BackofficeFrontendKernel.php b/apps/backoffice/frontend/src/BackofficeFrontendKernel.php index 98ca49797..d5ef39b68 100644 --- a/apps/backoffice/frontend/src/BackofficeFrontendKernel.php +++ b/apps/backoffice/frontend/src/BackofficeFrontendKernel.php @@ -10,10 +10,12 @@ use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Kernel; use Symfony\Component\Routing\RouteCollectionBuilder; +use function dirname; final class BackofficeFrontendKernel extends Kernel { use MicroKernelTrait; + private const CONFIG_EXTS = '.{xml,yaml}'; public function registerBundles(): iterable @@ -28,7 +30,7 @@ public function registerBundles(): iterable public function getProjectDir(): string { - return \dirname(__DIR__); + return dirname(__DIR__); } protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void diff --git a/apps/backoffice/frontend/src/Command/ImportCoursesToElasticsearchCommand.php b/apps/backoffice/frontend/src/Command/ImportCoursesToElasticsearchCommand.php index ec7246c69..c4b245986 100644 --- a/apps/backoffice/frontend/src/Command/ImportCoursesToElasticsearchCommand.php +++ b/apps/backoffice/frontend/src/Command/ImportCoursesToElasticsearchCommand.php @@ -12,8 +12,8 @@ final class ImportCoursesToElasticsearchCommand extends Command { - private $mySqlRepository; - private $elasticRepository; + private MySqlBackofficeCourseRepository $mySqlRepository; + private ElasticsearchBackofficeCourseRepository $elasticRepository; public function __construct( MySqlBackofficeCourseRepository $mySqlRepository, @@ -25,7 +25,7 @@ public function __construct( $this->elasticRepository = $elasticRepository; } - public function execute(InputInterface $input, OutputInterface $output) + public function execute(InputInterface $input, OutputInterface $output): void { $courses = $this->mySqlRepository->searchAll(); diff --git a/apps/backoffice/frontend/src/Controller/Courses/CoursesGetWebController.php b/apps/backoffice/frontend/src/Controller/Courses/CoursesGetWebController.php index e24db3fb0..cf4c26b02 100644 --- a/apps/backoffice/frontend/src/Controller/Courses/CoursesGetWebController.php +++ b/apps/backoffice/frontend/src/Controller/Courses/CoursesGetWebController.php @@ -13,6 +13,11 @@ final class CoursesGetWebController extends WebController { + protected function exceptions(): array + { + return []; + } + public function __invoke(Request $request): Response { /** @var CoursesCounterResponse $coursesCounterResponse */ diff --git a/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php b/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php index d91044de0..42a9b466f 100644 --- a/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php +++ b/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php @@ -14,7 +14,12 @@ final class CoursesPostWebController extends WebController { - public function __invoke(Request $request) + protected function exceptions(): array + { + return []; + } + + public function __invoke(Request $request): RedirectResponse { $validationErrors = $this->validateRequest($request); diff --git a/apps/backoffice/frontend/src/Controller/HealthCheck/HealthCheckGetController.php b/apps/backoffice/frontend/src/Controller/HealthCheck/HealthCheckGetController.php index 6b078bad7..91c1dd4e8 100644 --- a/apps/backoffice/frontend/src/Controller/HealthCheck/HealthCheckGetController.php +++ b/apps/backoffice/frontend/src/Controller/HealthCheck/HealthCheckGetController.php @@ -6,11 +6,10 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\Response; final class HealthCheckGetController { - public function __invoke(Request $request): Response + public function __invoke(Request $request): JsonResponse { return new JsonResponse( [ diff --git a/apps/backoffice/frontend/src/Controller/Home/HomeGetWebController.php b/apps/backoffice/frontend/src/Controller/Home/HomeGetWebController.php index 1e8cf078a..b61b9781c 100644 --- a/apps/backoffice/frontend/src/Controller/Home/HomeGetWebController.php +++ b/apps/backoffice/frontend/src/Controller/Home/HomeGetWebController.php @@ -10,6 +10,11 @@ final class HomeGetWebController extends WebController { + protected function exceptions(): array + { + return []; + } + public function __invoke(Request $request): Response { return $this->render( diff --git a/apps/backoffice/frontend/templates/pages/courses/partials/list_courses.html.twig b/apps/backoffice/frontend/templates/pages/courses/partials/list_courses.html.twig index c7feaece6..43b1d1afa 100644 --- a/apps/backoffice/frontend/templates/pages/courses/partials/list_courses.html.twig +++ b/apps/backoffice/frontend/templates/pages/courses/partials/list_courses.html.twig @@ -81,47 +81,53 @@ const totalRows = document.getElementById('filter-rows').childElementCount; const filterRowTemplate = "
\n" + - "
\n" + - " \n" + - " \n" + - "
\n" + - " \n" + - " \n" + - " \n" + - "
\n" + - "
\n" + - "
\n" + - " \n" + - " \n" + - "
\n" + - " \n" + - " \n" + - " \n" + - "
\n" + - "
\n" + - "
\n" + - " \n" + - " \n" + - "
\n" + - "
"; + "
\n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + "
\n" + + "
\n" + + "
\n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + "
\n" + + "
\n" + + "
\n" + + " \n" + + " \n" + + "
\n" + + ""; filterRows.insertAdjacentHTML('beforeend', filterRowTemplate); } @@ -136,7 +142,6 @@ const urlParts = inputs.map(input => input.name + "=" + input.value); - const url = "http://localhost:8034/courses?" + urlParts.join("&"); addCoursesList(url); diff --git a/apps/bootstrap.php b/apps/bootstrap.php index 11ec66e65..f127db28d 100644 --- a/apps/bootstrap.php +++ b/apps/bootstrap.php @@ -4,22 +4,25 @@ $rootPath = dirname(__DIR__); -require $rootPath.'/vendor/autoload.php'; +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')) { +if (is_array($env = @include $rootPath . '/.env.local.php')) { foreach ($env as $k => $v) { $_ENV[$k] = $_ENV[$k] ?? (isset($_SERVER[$k]) && 0 !== strpos($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.'); + 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(false))->loadEnv($rootPath.'/.env'); + (new Dotenv(false))->loadEnv($rootPath . '/.env'); } -$_SERVER += $_ENV; -$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = ($_SERVER['APP_ENV'] ?? $_ENV['APP_ENV'] ?? null) ?: 'dev'; +$_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'] = (int) $_SERVER['APP_DEBUG'] || filter_var($_SERVER['APP_DEBUG'], FILTER_VALIDATE_BOOLEAN) ? '1' : '0'; +$_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/bin/console b/apps/mooc/backend/bin/console index 405ab72f2..7fc1ba297 100755 --- a/apps/mooc/backend/bin/console +++ b/apps/mooc/backend/bin/console @@ -6,13 +6,13 @@ use Symfony\Bundle\FrameworkBundle\Console\Application; use Symfony\Component\Console\Input\ArgvInput; use Symfony\Component\Debug\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; +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; } 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.'); @@ -20,11 +20,11 @@ if (!class_exists(Application::class)) { $input = new ArgvInput(); if (null !== $env = $input->getParameterOption(['--env', '-e'], null, true)) { - putenv('APP_ENV='.$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = $env); + putenv('APP_ENV=' . $_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = $env); } if ($input->hasParameterOption('--no-debug', true)) { - putenv('APP_DEBUG='.$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = '0'); + putenv('APP_DEBUG=' . $_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = '0'); } require dirname(__DIR__) . '/../../bootstrap.php'; @@ -37,6 +37,6 @@ if ($_SERVER['APP_DEBUG']) { } } -$kernel = new MoocBackendKernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); +$kernel = new MoocBackendKernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); $application = new Application($kernel); $application->run($input); diff --git a/apps/mooc/backend/config/routes/courses.yaml b/apps/mooc/backend/config/routes/courses.yaml index b1ea328cc..89d6e575b 100644 --- a/apps/mooc/backend/config/routes/courses.yaml +++ b/apps/mooc/backend/config/routes/courses.yaml @@ -1,4 +1,4 @@ courses_put: - path: /courses/{id} - controller: CodelyTv\Apps\Mooc\Backend\Controller\Courses\CoursesPutController - methods: [PUT] + path: /courses/{id} + controller: CodelyTv\Apps\Mooc\Backend\Controller\Courses\CoursesPutController + methods: [PUT] diff --git a/apps/mooc/backend/config/routes/courses_counter.yaml b/apps/mooc/backend/config/routes/courses_counter.yaml index 8bf88c211..8641b6d20 100644 --- a/apps/mooc/backend/config/routes/courses_counter.yaml +++ b/apps/mooc/backend/config/routes/courses_counter.yaml @@ -1,4 +1,4 @@ courses_counter_get: - path: /courses-counter - controller: CodelyTv\Apps\Mooc\Backend\Controller\CoursesCounter\CoursesCounterGetController - methods: [GET] + path: /courses-counter + controller: CodelyTv\Apps\Mooc\Backend\Controller\CoursesCounter\CoursesCounterGetController + methods: [GET] diff --git a/apps/mooc/backend/config/routes/health-check.yaml b/apps/mooc/backend/config/routes/health-check.yaml index c6b3a3966..203ddbec5 100644 --- a/apps/mooc/backend/config/routes/health-check.yaml +++ b/apps/mooc/backend/config/routes/health-check.yaml @@ -1,4 +1,4 @@ health-check_get: - path: /health-check - controller: CodelyTv\Apps\Mooc\Backend\Controller\HealthCheck\HealthCheckGetController - methods: [GET] + path: /health-check + controller: CodelyTv\Apps\Mooc\Backend\Controller\HealthCheck\HealthCheckGetController + methods: [GET] diff --git a/apps/mooc/backend/config/services/framework.yaml b/apps/mooc/backend/config/services/framework.yaml index 5e25aa4b2..06fb3f3b4 100644 --- a/apps/mooc/backend/config/services/framework.yaml +++ b/apps/mooc/backend/config/services/framework.yaml @@ -1,16 +1,16 @@ framework: - secret: '%env(APP_SECRET)%' - #csrf_protection: true - #http_method_override: true + secret: '%env(APP_SECRET)%' + #csrf_protection: true + #http_method_override: true - # Enables session support. Note that the session will ONLY be started if you read or write from it. - # Remove or comment this section to explicitly disable session support. - session: - handler_id: ~ - cookie_secure: auto - cookie_samesite: lax + # Enables session support. Note that the session will ONLY be started if you read or write from it. + # Remove or comment this section to explicitly disable session support. + session: + handler_id: ~ + cookie_secure: auto + cookie_samesite: lax - #esi: true - #fragments: true - php_errors: - log: true + #esi: true + #fragments: true + php_errors: + log: true diff --git a/apps/mooc/backend/public/index.php b/apps/mooc/backend/public/index.php index a2086d4e1..00bf627a9 100644 --- a/apps/mooc/backend/public/index.php +++ b/apps/mooc/backend/public/index.php @@ -13,15 +13,18 @@ } if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? $_ENV['TRUSTED_PROXIES'] ?? false) { - Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST); + Request::setTrustedProxies( + explode(',', $trustedProxies), + Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST + ); } if ($trustedHosts = $_SERVER['TRUSTED_HOSTS'] ?? $_ENV['TRUSTED_HOSTS'] ?? false) { Request::setTrustedHosts([$trustedHosts]); } -$kernel = new MoocBackendKernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); -$request = Request::createFromGlobals(); +$kernel = new MoocBackendKernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']); +$request = Request::createFromGlobals(); $response = $kernel->handle($request); $response->send(); $kernel->terminate($request, $response); diff --git a/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php b/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php index 1551a6c80..9763b5625 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php @@ -16,10 +16,10 @@ final class ConsumeMySqlDomainEventsCommand extends Command { - protected static $defaultName = 'codelytv:domain-events:mysql:consume'; - private $consumer; - private $subscriberLocator; - private $connections; + protected static $defaultName = 'codelytv:domain-events:mysql:consume'; + private MySqlDoctrineDomainEventsConsumer $consumer; + private DomainEventSubscriberLocator $subscriberLocator; + private DatabaseConnections $connections; public function __construct( MySqlDoctrineDomainEventsConsumer $consumer, @@ -40,7 +40,7 @@ protected function configure(): void ->addArgument('quantity', InputArgument::REQUIRED, 'Quantity of events to process'); } - protected function execute(InputInterface $input, OutputInterface $output) + protected function execute(InputInterface $input, OutputInterface $output): void { $quantityEventsToProcess = (int) $input->getArgument('quantity'); diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php index 61ec7dfb1..0799ec84c 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php @@ -12,10 +12,10 @@ final class ConfigureRabbitMqCommand extends Command { - protected static $defaultName = 'codelytv:domain-events:rabbitmq:configure'; - private $configurer; - private $exchangeName; - private $subscribers; + protected static $defaultName = 'codelytv:domain-events:rabbitmq:configure'; + private RabbitMqConfigurer $configurer; + private string $exchangeName; + private Traversable $subscribers; public function __construct(RabbitMqConfigurer $configurer, string $exchangeName, Traversable $subscribers) { @@ -31,7 +31,7 @@ protected function configure(): void $this->setDescription('Configure the RabbitMQ to allow publish & consume domain events'); } - protected function execute(InputInterface $input, OutputInterface $output) + protected function execute(InputInterface $input, OutputInterface $output): void { $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 4cb998f4f..c43bc43da 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php @@ -15,10 +15,10 @@ final class ConsumeRabbitMqDomainEventsCommand extends Command { - protected static $defaultName = 'codelytv:domain-events:rabbitmq:consume'; - private $consumer; - private $connections; - private $locator; + protected static $defaultName = 'codelytv:domain-events:rabbitmq:consume'; + private RabbitMqDomainEventsConsumer $consumer; + private DatabaseConnections $connections; + private DomainEventSubscriberLocator $locator; public function __construct( RabbitMqDomainEventsConsumer $consumer, @@ -40,7 +40,7 @@ protected function configure(): void ->addArgument('quantity', InputArgument::REQUIRED, 'Quantity of events to process'); } - protected function execute(InputInterface $input, OutputInterface $output) + protected function execute(InputInterface $input, OutputInterface $output): void { $queueName = (string) $input->getArgument('queue'); $eventsToProcess = (int) $input->getArgument('quantity'); diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php index 314fb2d2f..2614595d6 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php @@ -15,12 +15,11 @@ final class GenerateSupervisorRabbitMqConsumerFilesCommand extends Command { - 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'; - private $locator; + protected static $defaultName = 'codelytv:domain-events:rabbitmq:generate-supervisor-files'; + private DomainEventSubscriberLocator $locator; public function __construct(DomainEventSubscriberLocator $locator) { @@ -36,7 +35,7 @@ protected function configure(): void ->addArgument('command-path', InputArgument::OPTIONAL, 'Path on this is gonna be deployed', '/var/www'); } - protected function execute(InputInterface $input, OutputInterface $output) + protected function execute(InputInterface $input, OutputInterface $output): void { $path = (string) $input->getArgument('command-path'); @@ -62,7 +61,7 @@ private function configCreator(string $path): callable $queueName, $path, self::NUMBERS_OF_PROCESSES_PER_SUBSCRIBER, - self::EVENTS_TO_PROCESS_AT_TIME + self::EVENTS_TO_PROCESS_AT_TIME, ], $this->template() ); @@ -86,7 +85,7 @@ private function template(): string EOF; } - private function fileName(string $queue) + private function fileName(string $queue): string { return sprintf('%s/%s.ini', self::SUPERVISOR_PATH, $queue); } diff --git a/apps/mooc/backend/src/Controller/Courses/CoursesPutController.php b/apps/mooc/backend/src/Controller/Courses/CoursesPutController.php index 3c92891ed..aa24b592d 100644 --- a/apps/mooc/backend/src/Controller/Courses/CoursesPutController.php +++ b/apps/mooc/backend/src/Controller/Courses/CoursesPutController.php @@ -11,14 +11,14 @@ final class CoursesPutController { - private $bus; + private CommandBus $bus; public function __construct(CommandBus $bus) { $this->bus = $bus; } - public function __invoke(string $id, Request $request) + public function __invoke(string $id, Request $request): Response { $this->bus->dispatch( new CreateCourseCommand( diff --git a/apps/mooc/backend/src/Controller/CoursesCounter/CoursesCounterGetController.php b/apps/mooc/backend/src/Controller/CoursesCounter/CoursesCounterGetController.php index 945341d2d..43e4c0d7d 100644 --- a/apps/mooc/backend/src/Controller/CoursesCounter/CoursesCounterGetController.php +++ b/apps/mooc/backend/src/Controller/CoursesCounter/CoursesCounterGetController.php @@ -4,7 +4,6 @@ namespace CodelyTv\Apps\Mooc\Backend\Controller\CoursesCounter; -use CodelyTv\Mooc\CoursesCounter\Application\Find\CoursesCounterFinder; use CodelyTv\Mooc\CoursesCounter\Application\Find\CoursesCounterResponse; use CodelyTv\Mooc\CoursesCounter\Application\Find\FindCoursesCounterQuery; use CodelyTv\Shared\Domain\Bus\Query\QueryBus; diff --git a/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php b/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php index 93aa267e4..e267ac7be 100644 --- a/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php +++ b/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php @@ -7,18 +7,17 @@ use CodelyTv\Shared\Domain\RandomNumberGenerator; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\Response; final class HealthCheckGetController { - private $generator; + private RandomNumberGenerator $generator; public function __construct(RandomNumberGenerator $generator) { $this->generator = $generator; } - public function __invoke(Request $request): Response + public function __invoke(Request $request): JsonResponse { return new JsonResponse( [ diff --git a/apps/mooc/backend/src/MoocBackendKernel.php b/apps/mooc/backend/src/MoocBackendKernel.php index 2004f6d14..baa17590a 100644 --- a/apps/mooc/backend/src/MoocBackendKernel.php +++ b/apps/mooc/backend/src/MoocBackendKernel.php @@ -10,10 +10,12 @@ use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Kernel; use Symfony\Component\Routing\RouteCollectionBuilder; +use function dirname; final class MoocBackendKernel extends Kernel { use MicroKernelTrait; + private const CONFIG_EXTS = '.{xml,yaml}'; public function registerBundles(): iterable @@ -28,7 +30,7 @@ public function registerBundles(): iterable public function getProjectDir(): string { - return \dirname(__DIR__); + return dirname(__DIR__); } protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void diff --git a/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php b/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php index 2e82c832c..3b0962923 100644 --- a/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php +++ b/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php @@ -13,7 +13,7 @@ final class DomainEventStorer { - private $repository; + private DomainEventsRepository $repository; public function __construct(DomainEventsRepository $repository) { diff --git a/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php b/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php index e53890020..1bc858c5f 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 { - private $storer; + private DomainEventStorer $storer; public function __construct(DomainEventStorer $storer) { @@ -25,7 +25,7 @@ public static function subscribedTo(): array return [DomainEvent::class]; } - public function __invoke(DomainEvent $event) + public function __invoke(DomainEvent $event): void { $id = new AnalyticsDomainEventId($event->eventId()); $aggregateId = new AnalyticsDomainEventAggregateId($event->aggregateId()); diff --git a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php index 9e444ad32..479b60bc9 100644 --- a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php +++ b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php @@ -6,10 +6,10 @@ final class AnalyticsDomainEvent { - private $id; - private $aggregateId; - private $name; - private $body; + private AnalyticsDomainEventId $id; + private AnalyticsDomainEventAggregateId $aggregateId; + private AnalyticsDomainEventName $name; + private AnalyticsDomainEventBody $body; public function __construct( AnalyticsDomainEventId $id, diff --git a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php index 314af114c..162ffb7d6 100644 --- a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php +++ b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php @@ -6,7 +6,7 @@ final class AnalyticsDomainEventBody { - private $value; + private array $value; public function __construct(array $value) { diff --git a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php index 204fbbecf..b0fb94ee4 100644 --- a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php +++ b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php @@ -8,8 +8,8 @@ final class AuthenticateUserCommand implements Command { - private $username; - private $password; + private string $username; + private string $password; public function __construct(string $username, string $password) { diff --git a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php index 4a25d121c..573bdecf9 100644 --- a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php +++ b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php @@ -10,14 +10,14 @@ final class AuthenticateUserCommandHandler implements CommandHandler { - private $authenticator; + private UserAuthenticator $authenticator; public function __construct(UserAuthenticator $authenticator) { $this->authenticator = $authenticator; } - public function __invoke(AuthenticateUserCommand $command) + public function __invoke(AuthenticateUserCommand $command): void { $username = new AuthUsername($command->username()); $password = new AuthPassword($command->password()); diff --git a/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php b/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php index c11a3b9ed..9ffd1dcb0 100644 --- a/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php +++ b/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php @@ -13,7 +13,7 @@ final class UserAuthenticator { - private $repository; + private AuthRepository $repository; public function __construct(AuthRepository $repository) { diff --git a/src/Backoffice/Auth/Domain/AuthUser.php b/src/Backoffice/Auth/Domain/AuthUser.php index c85b87e23..b254a405c 100644 --- a/src/Backoffice/Auth/Domain/AuthUser.php +++ b/src/Backoffice/Auth/Domain/AuthUser.php @@ -6,8 +6,8 @@ final class AuthUser { - private $username; - private $password; + private AuthUsername $username; + private AuthPassword $password; public function __construct(AuthUsername $username, AuthPassword $password) { diff --git a/src/Backoffice/Auth/Domain/InvalidAuthCredentials.php b/src/Backoffice/Auth/Domain/InvalidAuthCredentials.php index b7f34381c..2ca7f56db 100644 --- a/src/Backoffice/Auth/Domain/InvalidAuthCredentials.php +++ b/src/Backoffice/Auth/Domain/InvalidAuthCredentials.php @@ -4,7 +4,9 @@ namespace CodelyTv\Backoffice\Auth\Domain; -final class InvalidAuthCredentials extends \RuntimeException +use RuntimeException; + +final class InvalidAuthCredentials extends RuntimeException { public function __construct(AuthUsername $username) { diff --git a/src/Backoffice/Auth/Domain/InvalidAuthUsername.php b/src/Backoffice/Auth/Domain/InvalidAuthUsername.php index 4b7d08e1a..03c9cb9f0 100644 --- a/src/Backoffice/Auth/Domain/InvalidAuthUsername.php +++ b/src/Backoffice/Auth/Domain/InvalidAuthUsername.php @@ -4,7 +4,9 @@ namespace CodelyTv\Backoffice\Auth\Domain; -final class InvalidAuthUsername extends \RuntimeException +use RuntimeException; + +final class InvalidAuthUsername extends RuntimeException { public function __construct(AuthUsername $username) { diff --git a/src/Backoffice/Courses/Application/BackofficeCourseResponse.php b/src/Backoffice/Courses/Application/BackofficeCourseResponse.php index acbd31ac8..c1e66b09e 100644 --- a/src/Backoffice/Courses/Application/BackofficeCourseResponse.php +++ b/src/Backoffice/Courses/Application/BackofficeCourseResponse.php @@ -6,9 +6,9 @@ final class BackofficeCourseResponse { - private $id; - private $name; - private $duration; + private string $id; + private string $name; + private string $duration; public function __construct(string $id, string $name, string $duration) { diff --git a/src/Backoffice/Courses/Application/BackofficeCoursesResponse.php b/src/Backoffice/Courses/Application/BackofficeCoursesResponse.php index c88730570..423278094 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 $courses; + private 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 d74ca9ab2..d52ccb333 100644 --- a/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php +++ b/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php @@ -9,7 +9,7 @@ final class BackofficeCourseCreator { - private $repository; + private BackofficeCourseRepository $repository; public function __construct(BackofficeCourseRepository $repository) { diff --git a/src/Backoffice/Courses/Application/Create/CreateBackofficeCourseOnCourseCreated.php b/src/Backoffice/Courses/Application/Create/CreateBackofficeCourseOnCourseCreated.php index e34a74149..c3af5a0ce 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 { - private $creator; + private BackofficeCourseCreator $creator; public function __construct(BackofficeCourseCreator $creator) { @@ -21,7 +21,7 @@ public static function subscribedTo(): array return [CourseCreatedDomainEvent::class]; } - public function __invoke(CourseCreatedDomainEvent $event) + 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 0060fb0f3..2752c10be 100644 --- a/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php +++ b/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php @@ -12,7 +12,7 @@ final class AllBackofficeCoursesSearcher { - private $repository; + private BackofficeCourseRepository $repository; public function __construct(BackofficeCourseRepository $repository) { @@ -26,8 +26,10 @@ public function searchAll(): BackofficeCoursesResponse private function toResponse(): callable { - return static function (BackofficeCourse $course) { - return new BackofficeCourseResponse($course->id(), $course->name(), $course->duration()); - }; + 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 a6d8ea555..dca5f4111 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 { - private $searcher; + private AllBackofficeCoursesSearcher $searcher; public function __construct(AllBackofficeCoursesSearcher $searcher) { diff --git a/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php b/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php index f7752ea73..b67bc9b6c 100644 --- a/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php +++ b/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php @@ -15,7 +15,7 @@ final class BackofficeCoursesByCriteriaSearcher { - private $repository; + private BackofficeCourseRepository $repository; public function __construct(BackofficeCourseRepository $repository) { @@ -31,8 +31,10 @@ public function search(Filters $filters, Order $order, ?int $limit, ?int $offset private function toResponse(): callable { - return static function (BackofficeCourse $course) { - return new BackofficeCourseResponse($course->id(), $course->name(), $course->duration()); - }; + 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 36942c7fc..dc5aab98f 100644 --- a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQuery.php +++ b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQuery.php @@ -8,11 +8,11 @@ final class SearchBackofficeCoursesByCriteriaQuery implements Query { - private $filters; - private $orderBy; - private $order; - private $limit; - private $offset; + private array $filters; + private ?string $orderBy; + private ?string $order; + private ?int $limit; + private ?int $offset; public function __construct( array $filters, diff --git a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php index 548b271fc..7e65788ba 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 { - private $searcher; + private BackofficeCoursesByCriteriaSearcher $searcher; public function __construct(BackofficeCoursesByCriteriaSearcher $searcher) { diff --git a/src/Backoffice/Courses/Domain/BackofficeCourse.php b/src/Backoffice/Courses/Domain/BackofficeCourse.php index c3ec50aba..963a2bafb 100644 --- a/src/Backoffice/Courses/Domain/BackofficeCourse.php +++ b/src/Backoffice/Courses/Domain/BackofficeCourse.php @@ -8,9 +8,9 @@ final class BackofficeCourse extends AggregateRoot { - private $id; - private $name; - private $duration; + private string $id; + private string $name; + private string $duration; public function __construct(string $id, string $name, string $duration) { diff --git a/src/Backoffice/Courses/Infrastructure/Persistence/Doctrine/BackofficeCourse.orm.xml b/src/Backoffice/Courses/Infrastructure/Persistence/Doctrine/BackofficeCourse.orm.xml index ea6fac026..8fa3b527d 100644 --- a/src/Backoffice/Courses/Infrastructure/Persistence/Doctrine/BackofficeCourse.orm.xml +++ b/src/Backoffice/Courses/Infrastructure/Persistence/Doctrine/BackofficeCourse.orm.xml @@ -1,6 +1,6 @@ - diff --git a/src/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepository.php b/src/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepository.php index c5f1367aa..d494bde34 100644 --- a/src/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepository.php +++ b/src/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepository.php @@ -12,11 +12,6 @@ final class ElasticsearchBackofficeCourseRepository extends ElasticsearchRepository implements BackofficeCourseRepository { - protected function aggregateName(): string - { - return 'courses'; - } - public function save(BackofficeCourse $course): void { $this->persist($course->id(), $course->toPrimitives()); @@ -32,10 +27,13 @@ public function matching(Criteria $criteria): array return map($this->toCourse(), $this->searchByCriteria($criteria)); } - private function toCourse() + protected function aggregateName(): string + { + return 'courses'; + } + + private function toCourse(): callable { - return static function (array $primitives) { - return 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 93341bfad..a089c07c7 100644 --- a/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php +++ b/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php @@ -11,9 +11,9 @@ final class InMemoryCacheBackofficeCourseRepository implements BackofficeCourseRepository { - private static $allCoursesCache = []; - private static $matchingCache = []; - private $repository; + private static array $allCoursesCache = []; + private static array $matchingCache = []; + private BackofficeCourseRepository $repository; public function __construct(BackofficeCourseRepository $repository) { diff --git a/src/Mooc/Courses/Application/Create/CourseCreator.php b/src/Mooc/Courses/Application/Create/CourseCreator.php index fc056604d..ffbc82823 100644 --- a/src/Mooc/Courses/Application/Create/CourseCreator.php +++ b/src/Mooc/Courses/Application/Create/CourseCreator.php @@ -13,8 +13,8 @@ final class CourseCreator { - private $repository; - private $bus; + private CourseRepository $repository; + private EventBus $bus; public function __construct(CourseRepository $repository, EventBus $bus) { @@ -22,7 +22,7 @@ public function __construct(CourseRepository $repository, EventBus $bus) $this->bus = $bus; } - public function __invoke(CourseId $id, CourseName $name, CourseDuration $duration) + public function __invoke(CourseId $id, CourseName $name, CourseDuration $duration): void { $course = Course::create($id, $name, $duration); diff --git a/src/Mooc/Courses/Application/Create/CreateCourseCommand.php b/src/Mooc/Courses/Application/Create/CreateCourseCommand.php index 543e0512b..9d55648be 100644 --- a/src/Mooc/Courses/Application/Create/CreateCourseCommand.php +++ b/src/Mooc/Courses/Application/Create/CreateCourseCommand.php @@ -8,9 +8,9 @@ final class CreateCourseCommand implements Command { - private $id; - private $name; - private $duration; + private string $id; + private string $name; + private string $duration; public function __construct(string $id, string $name, string $duration) { diff --git a/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php b/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php index b9007697c..d49cbda89 100644 --- a/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php +++ b/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php @@ -11,14 +11,14 @@ final class CreateCourseCommandHandler implements CommandHandler { - private $creator; + private CourseCreator $creator; public function __construct(CourseCreator $creator) { $this->creator = $creator; } - public function __invoke(CreateCourseCommand $command) + public function __invoke(CreateCourseCommand $command): void { $id = new CourseId($command->id()); $name = new CourseName($command->name()); diff --git a/src/Mooc/Courses/Application/Find/CourseFinder.php b/src/Mooc/Courses/Application/Find/CourseFinder.php index 757cfcebf..5b03a076c 100644 --- a/src/Mooc/Courses/Application/Find/CourseFinder.php +++ b/src/Mooc/Courses/Application/Find/CourseFinder.php @@ -11,7 +11,7 @@ final class CourseFinder { - private $repository; + private CourseRepository $repository; public function __construct(CourseRepository $repository) { diff --git a/src/Mooc/Courses/Application/Update/CourseRenamer.php b/src/Mooc/Courses/Application/Update/CourseRenamer.php index b8bc7c566..d39b77387 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 $repository; - private $finder; - private $bus; + private CourseRepository $repository; + private CourseFinder $finder; + private EventBus $bus; public function __construct(CourseRepository $repository, EventBus $bus) { diff --git a/src/Mooc/Courses/Domain/Course.php b/src/Mooc/Courses/Domain/Course.php index cada4135f..9293759d0 100644 --- a/src/Mooc/Courses/Domain/Course.php +++ b/src/Mooc/Courses/Domain/Course.php @@ -9,9 +9,9 @@ final class Course extends AggregateRoot { - private $id; - private $name; - private $duration; + private CourseId $id; + private CourseName $name; + private CourseDuration $duration; public function __construct(CourseId $id, CourseName $name, CourseDuration $duration) { diff --git a/src/Mooc/Courses/Domain/CourseCreatedDomainEvent.php b/src/Mooc/Courses/Domain/CourseCreatedDomainEvent.php index c767367f7..b7e888a78 100644 --- a/src/Mooc/Courses/Domain/CourseCreatedDomainEvent.php +++ b/src/Mooc/Courses/Domain/CourseCreatedDomainEvent.php @@ -8,8 +8,8 @@ final class CourseCreatedDomainEvent extends DomainEvent { - private $name; - private $duration; + private string $name; + private string $duration; public function __construct( string $id, diff --git a/src/Mooc/Courses/Domain/CourseNotExist.php b/src/Mooc/Courses/Domain/CourseNotExist.php index 1d67dea5a..dec4824e5 100644 --- a/src/Mooc/Courses/Domain/CourseNotExist.php +++ b/src/Mooc/Courses/Domain/CourseNotExist.php @@ -9,7 +9,7 @@ final class CourseNotExist extends DomainError { - private $id; + private CourseId $id; public function __construct(CourseId $id) { diff --git a/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/Course.orm.xml b/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/Course.orm.xml index a1a574684..7c994ca0c 100644 --- a/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/Course.orm.xml +++ b/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/Course.orm.xml @@ -1,6 +1,6 @@ - diff --git a/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/CourseDuration.orm.xml b/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/CourseDuration.orm.xml index f00bf5c4d..19349c516 100644 --- a/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/CourseDuration.orm.xml +++ b/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/CourseDuration.orm.xml @@ -1,6 +1,6 @@ - diff --git a/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/CourseName.orm.xml b/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/CourseName.orm.xml index 0022ede16..897d63c3f 100644 --- a/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/CourseName.orm.xml +++ b/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/CourseName.orm.xml @@ -1,6 +1,6 @@ - diff --git a/src/Mooc/Courses/Infrastructure/Persistence/Eloquent/CourseEloquentModel.php b/src/Mooc/Courses/Infrastructure/Persistence/Eloquent/CourseEloquentModel.php deleted file mode 100644 index 9245c264e..000000000 --- a/src/Mooc/Courses/Infrastructure/Persistence/Eloquent/CourseEloquentModel.php +++ /dev/null @@ -1,17 +0,0 @@ -id = $course->id()->value(); - $model->name = $course->name()->value(); - $model->duration = $course->duration()->value(); - - $model->save(); - } - - public function search(CourseId $id): ?Course - { - $model = CourseEloquentModel::find($id->value()); - - if (null === $model) { - return null; - } - - return new Course(new CourseId($model->id), new CourseName($model->name), new CourseDuration($model->duration)); - } -} diff --git a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php index 37b9d655f..b58b96f08 100644 --- a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php +++ b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php @@ -9,7 +9,7 @@ final class CoursesCounterFinder { - private $repository; + private CoursesCounterRepository $repository; public function __construct(CoursesCounterRepository $repository) { diff --git a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php index 1e4f7723e..87d0a6cfb 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 { - private $total; + private int $total; public function __construct(int $total) { diff --git a/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php b/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php index a08765f40..5be2b59c1 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 { - private $finder; + private CoursesCounterFinder $finder; public function __construct(CoursesCounterFinder $finder) { diff --git a/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php b/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php index e066ed8b8..92252abdf 100644 --- a/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php +++ b/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php @@ -13,9 +13,9 @@ final class CoursesCounterIncrementer { - private $repository; - private $uuidGenerator; - private $bus; + private CoursesCounterRepository $repository; + private UuidGenerator $uuidGenerator; + private EventBus $bus; public function __construct( CoursesCounterRepository $repository, @@ -27,7 +27,7 @@ public function __construct( $this->bus = $bus; } - public function __invoke(CourseId $courseId) + public function __invoke(CourseId $courseId): void { $counter = $this->repository->search() ?: $this->initializeCounter(); diff --git a/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php b/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php index f1183003d..eb08f6d1d 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 { - private $incrementer; + private CoursesCounterIncrementer $incrementer; public function __construct(CoursesCounterIncrementer $incrementer) { diff --git a/src/Mooc/CoursesCounter/Domain/CoursesCounter.php b/src/Mooc/CoursesCounter/Domain/CoursesCounter.php index 63e4b3dda..56762b2af 100644 --- a/src/Mooc/CoursesCounter/Domain/CoursesCounter.php +++ b/src/Mooc/CoursesCounter/Domain/CoursesCounter.php @@ -10,9 +10,9 @@ final class CoursesCounter extends AggregateRoot { - private $total; - private $existingCourses; - private $id; + private CoursesCounterTotal $total; + private array $existingCourses; + private CoursesCounterId $id; public function __construct(CoursesCounterId $id, CoursesCounterTotal $total, CourseId ...$existingCourses) { @@ -58,8 +58,6 @@ public function hasIncremented(CourseId $courseId): bool private function courseIdComparator(CourseId $courseId): callable { - return static function (CourseId $other) use ($courseId) { - return $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 de2843ed2..373f619b6 100644 --- a/src/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEvent.php +++ b/src/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEvent.php @@ -8,7 +8,7 @@ final class CoursesCounterIncrementedDomainEvent extends DomainEvent { - private $total; + private int $total; public function __construct(string $aggregateId, int $total, string $eventId = null, string $occurredOn = null) { @@ -25,7 +25,7 @@ public static function eventName(): string public function toPrimitives(): array { return [ - 'total' => $this->total + 'total' => $this->total, ]; } diff --git a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CoursesCounter.orm.xml b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CoursesCounter.orm.xml index ecbe2ed5e..d3d2d09c6 100644 --- a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CoursesCounter.orm.xml +++ b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CoursesCounter.orm.xml @@ -1,6 +1,6 @@ - @@ -9,7 +9,9 @@ - + diff --git a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CoursesCounterTotal.orm.xml b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CoursesCounterTotal.orm.xml index 2e0d92774..ad9799fe7 100644 --- a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CoursesCounterTotal.orm.xml +++ b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CoursesCounterTotal.orm.xml @@ -1,6 +1,6 @@ - diff --git a/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php b/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php index 55cce4bc0..8cf036d71 100644 --- a/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php +++ b/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php @@ -24,9 +24,7 @@ public static function inPath(string $path, string $contextName): array private static function modulesInPath(string $path): array { return filter( - static function (string $possibleModule) { - return !in_array($possibleModule, ['.', '..']); - }, + static fn(string $possibleModule) => !in_array($possibleModule, ['.', '..']), scandir($path) ); } @@ -45,16 +43,12 @@ static function ($unused, string $module) use ($path) { private static function isExistingDbalPath(): callable { - return static function (string $path) { - return !empty($path); - }; + return static fn(string $path) => !empty($path); } private static function namespaceFormatter($baseNamespace): callable { - return static function (string $path, string $module) use ($baseNamespace) { - return "$baseNamespace\\$module\Domain"; - }; + return static fn(string $path, string $module) => "$baseNamespace\\$module\Domain"; } private static function dbalClassesSearcher(string $contextName): callable @@ -62,9 +56,7 @@ private static function dbalClassesSearcher(string $contextName): callable return static function (array $totalNamespaces, string $path) use ($contextName) { $possibleFiles = scandir($path); $files = filter( - static function ($file) { - return 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 035b787b0..bdda67ab2 100644 --- a/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php +++ b/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php @@ -23,9 +23,7 @@ public static function inPath(string $path, string $baseNamespace): array private static function modulesInPath(string $path): array { return filter( - static function (string $possibleModule) { - return !in_array($possibleModule, ['.', '..']); - }, + static fn(string $possibleModule) => !in_array($possibleModule, ['.', '..']), scandir($path) ); } @@ -44,15 +42,11 @@ static function ($unused, string $module) use ($path) { private static function isExistingMappingPath(): callable { - return static function (string $path) { - return !empty($path); - }; + return static fn(string $path) => !empty($path); } private static function namespaceFormatter($baseNamespace): callable { - return static function (string $path, string $module) use ($baseNamespace) { - return "$baseNamespace\\$module\Domain"; - }; + return static fn(string $path, string $module) => "$baseNamespace\\$module\Domain"; } } diff --git a/src/Shared/Domain/Aggregate/AggregateRoot.php b/src/Shared/Domain/Aggregate/AggregateRoot.php index 6650bf6cb..b517995a6 100644 --- a/src/Shared/Domain/Aggregate/AggregateRoot.php +++ b/src/Shared/Domain/Aggregate/AggregateRoot.php @@ -4,12 +4,11 @@ namespace CodelyTv\Shared\Domain\Aggregate; - use CodelyTv\Shared\Domain\Bus\Event\DomainEvent; abstract class AggregateRoot { - private $domainEvents = []; + private array $domainEvents = []; final public function pullDomainEvents(): array { diff --git a/src/Shared/Domain/Bus/Event/DomainEvent.php b/src/Shared/Domain/Bus/Event/DomainEvent.php index e23983e7f..dd0ccad2e 100644 --- a/src/Shared/Domain/Bus/Event/DomainEvent.php +++ b/src/Shared/Domain/Bus/Event/DomainEvent.php @@ -10,9 +10,9 @@ abstract class DomainEvent { - private $aggregateId; - private $eventId; - private $occurredOn; + private string $aggregateId; + private string $eventId; + private string $occurredOn; public function __construct(string $aggregateId, string $eventId = null, string $occurredOn = null) { @@ -21,8 +21,6 @@ public function __construct(string $aggregateId, string $eventId = null, string $this->occurredOn = $occurredOn ?: Utils::dateToString(new DateTimeImmutable()); } - abstract public static function eventName(): string; - abstract public function toPrimitives(): array; abstract public static function fromPrimitives( @@ -32,6 +30,8 @@ abstract public static function fromPrimitives( string $occurredOn ): self; + abstract public static function eventName(): string; + public function aggregateId(): string { return $this->aggregateId; diff --git a/src/Shared/Domain/Collection.php b/src/Shared/Domain/Collection.php index eb206bc6a..10e04b8d7 100644 --- a/src/Shared/Domain/Collection.php +++ b/src/Shared/Domain/Collection.php @@ -11,8 +11,7 @@ abstract class Collection implements Countable, IteratorAggregate { - /** @var array */ - private $items; + private array $items; public function __construct(array $items) { @@ -23,22 +22,22 @@ public function __construct(array $items) abstract protected function type(): string; - public function getIterator() + public function getIterator(): ArrayIterator { return new ArrayIterator($this->items()); } - public function count() + public function count(): int { return count($this->items()); } - protected function each(callable $fn) + protected function each(callable $fn): void { each($fn, $this->items()); } - protected function 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 c44ec3c68..933aa9120 100644 --- a/src/Shared/Domain/Criteria/Criteria.php +++ b/src/Shared/Domain/Criteria/Criteria.php @@ -6,10 +6,10 @@ final class Criteria { - private $filters; - private $order; - private $offset; - private $limit; + private Filters $filters; + private Order $order; + private ?int $offset; + private ?int $limit; public function __construct(Filters $filters, Order $order, ?int $offset, ?int $limit) { diff --git a/src/Shared/Domain/Criteria/Filter.php b/src/Shared/Domain/Criteria/Filter.php index fb92911d6..fadf548ee 100644 --- a/src/Shared/Domain/Criteria/Filter.php +++ b/src/Shared/Domain/Criteria/Filter.php @@ -6,9 +6,9 @@ final class Filter { - private $field; - private $operator; - private $value; + private FilterField $field; + private FilterOperator $operator; + private FilterValue $value; public function __construct(FilterField $field, FilterOperator $operator, FilterValue $value) { diff --git a/src/Shared/Domain/Criteria/FilterOperator.php b/src/Shared/Domain/Criteria/FilterOperator.php index 9fa3ee1d0..a8cf3ef27 100644 --- a/src/Shared/Domain/Criteria/FilterOperator.php +++ b/src/Shared/Domain/Criteria/FilterOperator.php @@ -20,7 +20,6 @@ final class FilterOperator extends Enum public const LT = '<'; public const CONTAINS = 'CONTAINS'; public const NOT_CONTAINS = 'NOT_CONTAINS'; - private static $containing = [self::CONTAINS, self::NOT_CONTAINS]; public static function equal(): self diff --git a/src/Shared/Domain/Criteria/Filters.php b/src/Shared/Domain/Criteria/Filters.php index 57bc5a48d..38dc9af45 100644 --- a/src/Shared/Domain/Criteria/Filters.php +++ b/src/Shared/Domain/Criteria/Filters.php @@ -32,9 +32,7 @@ public function filters(): array public function serialize(): string { return reduce( - static function (string $accumulate, Filter $filter) { - return sprintf('%s^%s', $accumulate, $filter->serialize()); - }, + static fn(string $accumulate, Filter $filter) => sprintf('%s^%s', $accumulate, $filter->serialize()), $this->items(), '' ); @@ -42,8 +40,6 @@ static function (string $accumulate, Filter $filter) { private static function filterBuilder(): callable { - return function (array $values) { - return Filter::fromValues($values); - }; + return fn(array $values) => Filter::fromValues($values); } } diff --git a/src/Shared/Domain/Criteria/Order.php b/src/Shared/Domain/Criteria/Order.php index 09528bc45..888141614 100644 --- a/src/Shared/Domain/Criteria/Order.php +++ b/src/Shared/Domain/Criteria/Order.php @@ -6,8 +6,8 @@ final class Order { - private $orderBy; - private $orderType; + private OrderBy $orderBy; + private OrderType $orderType; public function __construct(OrderBy $orderBy, OrderType $orderType) { diff --git a/src/Shared/Domain/Monitoring.php b/src/Shared/Domain/Monitoring.php index c8f5c9370..5dfb08a2e 100644 --- a/src/Shared/Domain/Monitoring.php +++ b/src/Shared/Domain/Monitoring.php @@ -9,7 +9,9 @@ interface Monitoring public function incrementCounter(int $times): void; public function incrementGauge(int $times): void; + public function decrementGauge(int $times): void; + public function setGauge(int $value): void; public function observeHistogram(int $value, array $labels = []): void; diff --git a/src/Shared/Domain/Utils.php b/src/Shared/Domain/Utils.php index 79a753006..fbd5050e5 100644 --- a/src/Shared/Domain/Utils.php +++ b/src/Shared/Domain/Utils.php @@ -61,21 +61,20 @@ public static function dot($array, $prepend = ''): array { $results = []; foreach ($array as $key => $value) { - if (is_array($value) && ! empty($value)) { - $results = array_merge($results, static::dot($value, $prepend.$key.'.')); + if (is_array($value) && !empty($value)) { + $results = array_merge($results, static::dot($value, $prepend . $key . '.')); } else { - $results[$prepend.$key] = $value; + $results[$prepend . $key] = $value; } } + return $results; } public static function directoriesIn(string $path): array { return filter( - static function (string $possibleModule) { - return !in_array($possibleModule, ['.', '..']); - }, + static fn(string $possibleModule) => !in_array($possibleModule, ['.', '..']), scandir($path) ); } @@ -83,9 +82,7 @@ static function (string $possibleModule) { public static function filesIn(string $path, $fileType): array { return filter( - static function (string $possibleModule) use ($fileType) { - return 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 7cf3665ec..0bd72e718 100644 --- a/src/Shared/Domain/ValueObject/Enum.php +++ b/src/Shared/Domain/ValueObject/Enum.php @@ -6,12 +6,13 @@ use CodelyTv\Shared\Domain\Utils; use ReflectionClass; +use function in_array; use function Lambdish\Phunctional\reindex; abstract class Enum { - protected static $cache = []; - protected $value; + protected static array $cache = []; + protected $value; public function __construct($value) { @@ -61,7 +62,7 @@ public function equals(Enum $other): bool private function ensureIsBetweenAcceptedValues($value): void { - if (!\in_array($value, static::values(), true)) { + if (!in_array($value, static::values(), true)) { $this->throwExceptionForInvalidValue($value); } } @@ -73,9 +74,7 @@ public static function random(): self private static function keysFormatter(): callable { - return static function ($unused, string $key): string { - return Utils::toCamelCase(strtolower($key)); - }; + return static fn($unused, string $key): string => Utils::toCamelCase(strtolower($key)); } public function __toString(): string diff --git a/src/Shared/Domain/ValueObject/IntValueObject.php b/src/Shared/Domain/ValueObject/IntValueObject.php index f0de3c19f..dcab01cce 100644 --- a/src/Shared/Domain/ValueObject/IntValueObject.php +++ b/src/Shared/Domain/ValueObject/IntValueObject.php @@ -6,7 +6,7 @@ abstract class IntValueObject { - protected $value; + protected int $value; public function __construct(int $value) { @@ -18,7 +18,7 @@ public function value(): int return $this->value; } - public function __toString() + public function __toString(): string { return (string) $this->value(); } diff --git a/src/Shared/Domain/ValueObject/StringValueObject.php b/src/Shared/Domain/ValueObject/StringValueObject.php index ac794fbee..5f9499070 100644 --- a/src/Shared/Domain/ValueObject/StringValueObject.php +++ b/src/Shared/Domain/ValueObject/StringValueObject.php @@ -6,7 +6,7 @@ abstract class StringValueObject { - protected $value; + protected string $value; public function __construct(string $value) { @@ -18,7 +18,7 @@ public function value(): string return $this->value; } - public function __toString() + public function __toString(): string { return $this->value(); } diff --git a/src/Shared/Domain/ValueObject/Uuid.php b/src/Shared/Domain/ValueObject/Uuid.php index d4c771547..dd356b14e 100644 --- a/src/Shared/Domain/ValueObject/Uuid.php +++ b/src/Shared/Domain/ValueObject/Uuid.php @@ -9,7 +9,7 @@ class Uuid { - protected $value; + protected string $value; public function __construct(string $value) { @@ -18,14 +18,14 @@ public function __construct(string $value) $this->value = $value; } - public static function random(): self + public function value(): string { - return new static(RamseyUuid::uuid4()->toString()); + return $this->value; } - public function value(): string + public function equals(Uuid $other): bool { - return $this->value; + return $this->value() === $other->value(); } private function ensureIsValidUuid($id): void @@ -35,12 +35,12 @@ private function ensureIsValidUuid($id): void } } - public function equals(Uuid $other): bool + public static function random(): self { - return $this->value() === $other->value(); + return new static(RamseyUuid::uuid4()->toString()); } - public function __toString() + public function __toString(): string { return $this->value(); } diff --git a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php index dab5850f0..32a72e30a 100644 --- a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php +++ b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php @@ -47,9 +47,7 @@ private function hasOnlyOneParameter(ReflectionMethod $method): bool private static function classExtractor(CallableFirstParameterExtractor $parameterExtractor): callable { - return static function (callable $handler) use ($parameterExtractor): string { - return $parameterExtractor->extract($handler); - }; + return static fn(callable $handler): string => $parameterExtractor->extract($handler); } private static function pipedCallablesReducer(): callable @@ -67,8 +65,6 @@ private static function pipedCallablesReducer(): callable private static function unflatten(): callable { - return static function ($value) { - return [$value]; - }; + return static fn($value) => [$value]; } } diff --git a/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php b/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php index 7834574fa..a68077c7a 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 $bus; + private 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 63f765d35..cc08cab51 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php @@ -10,7 +10,7 @@ final class DomainEventJsonDeserializer { - private $mapping; + private DomainEventMapping $mapping; public function __construct(DomainEventMapping $mapping) { diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php b/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php index eca63a5a3..0ddbf3186 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php @@ -34,15 +34,17 @@ public function all() private function eventsExtractor(): callable { - return function (array $mapping, DomainEventSubscriber $subscriber) { - return array_merge($mapping, reindex($this->eventNameExtractor(), $subscriber::subscribedTo())); - }; + return fn(array $mapping, DomainEventSubscriber $subscriber) => array_merge( + $mapping, + reindex( + $this->eventNameExtractor(), + $subscriber::subscribedTo() + ) + ); } private function eventNameExtractor(): callable { - return static function (string $eventClass): string { - return $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 8f252e2f2..f533717cf 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 $mapping; + private array $mapping; public function __construct(Traversable $mapping) { @@ -30,9 +30,8 @@ public function allSubscribedTo(string $eventClass): callable public function withRabbitMqQueueNamed(string $queueName): DomainEventSubscriber { $subscriber = search( - static function (DomainEventSubscriber $subscriber) use ($queueName) { - return RabbitMqQueueNameFormatter::format($subscriber) === $queueName; - }, + 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 7dc36897c..e9c68c189 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 $bus; + private MessageBus $bus; public function __construct(iterable $subscribers) { @@ -34,7 +34,8 @@ public function publish(DomainEvent ...$events): void foreach ($events as $event) { try { $this->bus->dispatch($event); - } catch (NoHandlerForMessageException $error) {} + } catch (NoHandlerForMessageException $error) { + } } } } diff --git a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php index f5ec855cc..639db5fa2 100644 --- a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php +++ b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php @@ -7,15 +7,17 @@ use CodelyTv\Shared\Domain\Utils; use CodelyTv\Shared\Infrastructure\Bus\Event\DomainEventMapping; use DateTimeImmutable; +use Doctrine\DBAL\Connection; use Doctrine\DBAL\FetchMode; use Doctrine\ORM\EntityManager; +use RuntimeException; use function Lambdish\Phunctional\each; use function Lambdish\Phunctional\map; final class MySqlDoctrineDomainEventsConsumer { - private $connection; - private $eventMapping; + private Connection $connection; + private DomainEventMapping $eventMapping; public function __construct(EntityManager $entityManager, DomainEventMapping $eventMapping) { @@ -51,7 +53,7 @@ private function executeSubscribers(callable $subscribers): callable ); $subscribers($domainEvent); - } catch (\RuntimeException $error) { + } catch (RuntimeException $error) { } }; } @@ -63,8 +65,6 @@ private function formatDate($stringDate): string private function idExtractor(): callable { - return static function (array $event): string { - return "'${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 f42061c70..b584c477b 100644 --- a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus.php @@ -7,13 +7,14 @@ use CodelyTv\Shared\Domain\Bus\Event\DomainEvent; use CodelyTv\Shared\Domain\Bus\Event\EventBus; use CodelyTv\Shared\Domain\Utils; +use Doctrine\DBAL\Connection; use Doctrine\ORM\EntityManager; use function Lambdish\Phunctional\each; final class MySqlDoctrineEventBus implements EventBus { private const DATABASE_TIMESTAMP_FORMAT = 'Y-m-d H:i:s'; - private $connection; + private Connection $connection; public function __construct(EntityManager $entityManager) { diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConfigurer.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConfigurer.php index 9faf57b16..2df279f19 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConfigurer.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConfigurer.php @@ -10,7 +10,7 @@ final class RabbitMqConfigurer { - private $connection; + private RabbitMqConnection $connection; public function __construct(RabbitMqConnection $connection) { diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php index ed117f04c..90bb6a50d 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php @@ -11,7 +11,6 @@ final class RabbitMqConnection { - private $configuration; /** @var AMQPConnection */ private static $connection; /** @var AMQPChannel */ @@ -20,6 +19,7 @@ final class RabbitMqConnection private static $exchanges = []; /** @var AMQPQueue[] */ private static $queues = []; + private $configuration; public function __construct(array $configuration) { diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php index fbe0be069..91475e825 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBus.php @@ -13,9 +13,9 @@ final class RabbitMqEventBus implements EventBus { - private $connection; - private $exchangeName; - private $failoverPublisher; + private RabbitMqConnection $connection; + private string $exchangeName; + private MySqlDoctrineEventBus $failoverPublisher; public function __construct( RabbitMqConnection $connection, diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqQueueNameFormatter.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqQueueNameFormatter.php index f90cd0d31..55e85865c 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqQueueNameFormatter.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqQueueNameFormatter.php @@ -19,7 +19,7 @@ public static function format(DomainEventSubscriber $subscriber): string $subscriberClassPaths[0], $subscriberClassPaths[1], $subscriberClassPaths[2], - last($subscriberClassPaths) + last($subscriberClassPaths), ]; return implode('.', map(self::toSnakeCase(), $queueNameParts)); @@ -48,8 +48,6 @@ public static function shortFormat(DomainEventSubscriber $subscriber): string private static function toSnakeCase(): callable { - return static function (string $text) { - return Utils::toSnakeCase($text); - }; + return static fn(string $text) => Utils::toSnakeCase($text); } } diff --git a/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php b/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php index 20c52682f..a13911c76 100644 --- a/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php +++ b/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php @@ -11,7 +11,7 @@ final class DatabaseConnections { - private $connections = []; + private array $connections = []; public function __construct(iterable $connections) { diff --git a/src/Shared/Infrastructure/Doctrine/Dbal/DbalCustomTypesRegistrar.php b/src/Shared/Infrastructure/Doctrine/Dbal/DbalCustomTypesRegistrar.php index c4054b795..c2ca64491 100644 --- a/src/Shared/Infrastructure/Doctrine/Dbal/DbalCustomTypesRegistrar.php +++ b/src/Shared/Infrastructure/Doctrine/Dbal/DbalCustomTypesRegistrar.php @@ -9,7 +9,7 @@ final class DbalCustomTypesRegistrar { - private static $initialized = false; + private static bool $initialized = false; public static function register(array $dbalCustomTypesClasses): void { diff --git a/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php b/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php index 0000fd3b2..a85328c80 100644 --- a/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php +++ b/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php @@ -10,7 +10,6 @@ use Doctrine\DBAL\Schema\MySqlSchemaManager; use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManager; -use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\Driver\SimplifiedXmlDriver; use Doctrine\ORM\Tools\Setup; use RuntimeException; @@ -18,7 +17,7 @@ final class DoctrineEntityManagerFactory { - private static $sharedPrefixes = [ + private static array $sharedPrefixes = [ __DIR__ . '/../../../Shared/Infrastructure/Persistence/Mappings' => 'CodelyTv\Shared\Domain', ]; @@ -28,7 +27,7 @@ public static function create( bool $isDevMode, string $schemaFile, array $dbalCustomTypesClasses - ): EntityManagerInterface { + ): EntityManager { if ($isDevMode) { static::generateDatabaseIfNotExists($parameters, $schemaFile); } diff --git a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php index 69e7a0088..a3bc2f81f 100644 --- a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php +++ b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php @@ -8,8 +8,8 @@ final class ElasticsearchClient { - private $client; - private $indexPrefix; + private Client $client; + private string $indexPrefix; public function __construct(Client $client, string $indexPrefix) { diff --git a/src/Shared/Infrastructure/Logger/MonologLogger.php b/src/Shared/Infrastructure/Logger/MonologLogger.php index ff9948e3a..4c06a0c6a 100644 --- a/src/Shared/Infrastructure/Logger/MonologLogger.php +++ b/src/Shared/Infrastructure/Logger/MonologLogger.php @@ -8,7 +8,7 @@ final class MonologLogger implements Logger { - private $logger; + private \Monolog\Logger $logger; public function __construct(\Monolog\Logger $logger) { diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php index 7f7c9c654..d5a96b719 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php @@ -14,15 +14,15 @@ final class DoctrineCriteriaConverter { - private $criteria; - private $criteriaToDoctrineFields; - private $hydrators; + private Criteria $criteria; + private array $criteriaToDoctrineFields; + private array $hydrators; public function __construct(Criteria $criteria, array $criteriaToDoctrineFields = [], array $hydrators = []) { - $this->criteria = $criteria; + $this->criteria = $criteria; $this->criteriaToDoctrineFields = $criteriaToDoctrineFields; - $this->hydrators = $hydrators; + $this->hydrators = $hydrators; } public static function convert( @@ -76,9 +76,9 @@ 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(); + $value = $this->existsHydratorFor($field) + ? $this->hydrate($field, $filter->value()->value()) + : $filter->value()->value(); return new Comparison($field, $filter->operator()->value(), $value); }; @@ -86,9 +86,9 @@ private function buildComparison(): callable private function mapFieldValue(FilterField $field) { - return array_key_exists($field->value(), $this->criteriaToDoctrineFields) ? - $this->criteriaToDoctrineFields[$field->value()] : - $field->value(); + return array_key_exists($field->value(), $this->criteriaToDoctrineFields) + ? $this->criteriaToDoctrineFields[$field->value()] + : $field->value(); } private function formatOrder(Criteria $criteria): ?array @@ -102,9 +102,9 @@ private function formatOrder(Criteria $criteria): ?array private function mapOrderBy(OrderBy $field) { - return array_key_exists($field->value(), $this->criteriaToDoctrineFields) ? - $this->criteriaToDoctrineFields[$field->value()] : - $field->value(); + return array_key_exists($field->value(), $this->criteriaToDoctrineFields) + ? $this->criteriaToDoctrineFields[$field->value()] + : $field->value(); } private function existsHydratorFor($field): bool diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php index 63b1ead79..02721e73c 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php @@ -10,7 +10,7 @@ abstract class DoctrineRepository { - private $entityManager; + private EntityManager $entityManager; public function __construct(EntityManager $entityManager) { diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php b/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php index efe4993f2..4d3e9986e 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php @@ -11,6 +11,8 @@ abstract class UuidType extends StringType implements DoctrineCustomType { + abstract protected function typeClassName(): string; + public function getName(): string { return self::customTypeName(); @@ -28,6 +30,4 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform) { return $value->value(); } - - abstract protected function typeClassName(): string; } diff --git a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php index b5a28e4ea..add1097bb 100644 --- a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php +++ b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php @@ -15,7 +15,7 @@ final class ElasticQueryGenerator private const TERM_TERM = 'term'; private const TERM_RANGE = 'range'; private const TERM_WILDCARD = 'wildcard'; - private static $termMapping = [ + private static array $termMapping = [ FilterOperator::EQUAL => self::TERM_TERM, FilterOperator::NOT_EQUAL => '!=', FilterOperator::GT => self::TERM_RANGE, @@ -23,9 +23,9 @@ final class ElasticQueryGenerator FilterOperator::CONTAINS => self::TERM_WILDCARD, FilterOperator::NOT_CONTAINS => self::TERM_WILDCARD, ]; - private static $mustNotFields = [FilterOperator::NOT_EQUAL, FilterOperator::NOT_CONTAINS]; + private static array $mustNotFields = [FilterOperator::NOT_EQUAL, FilterOperator::NOT_CONTAINS]; - public function __invoke(array $query, Filter $filter) + public function __invoke(array $query, Filter $filter): array { $type = $this->typeFor($filter->operator()); $termLevel = $this->termLeverFor($filter->operator()); diff --git a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php index 4dd3b7fb1..fac27de30 100644 --- a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php +++ b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php @@ -12,7 +12,7 @@ abstract class ElasticsearchRepository { - private $client; + private ElasticsearchClient $client; public function __construct(ElasticsearchClient $client) { @@ -21,6 +21,15 @@ public function __construct(ElasticsearchClient $client) abstract protected function aggregateName(): string; + public function searchByCriteria(Criteria $criteria): array + { + $converter = new ElasticsearchCriteriaConverter(); + + $query = $converter->convert($criteria); + + return $this->searchRawElasticsearchQuery($query); + } + protected function persist(string $id, array $plainBody): void { $this->client->persist($this->aggregateName(), $id, $plainBody); @@ -44,15 +53,6 @@ protected function searchRawElasticsearchQuery(array $params): array } } - public function searchByCriteria(Criteria $criteria): array - { - $converter = new ElasticsearchCriteriaConverter(); - - $query = $converter->convert($criteria); - - return $this->searchRawElasticsearchQuery($query); - } - protected function indexName(): string { return sprintf('%s_%s', $this->client->indexPrefix(), $this->aggregateName()); @@ -60,8 +60,6 @@ protected function indexName(): string private function elasticValuesExtractor(): callable { - return static function (array $elasticValues): array { - return $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 37c2cd54e..d0786f128 100644 --- a/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php +++ b/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php @@ -25,9 +25,7 @@ public function onKernelRequest(RequestEvent $event): void foreach ($jsonData as $key => $value) { $jsonDataLowerCase[preg_replace_callback( '/_(.)/', - static function ($matches) { - return strtoupper($matches[1]); - }, + static fn($matches) => strtoupper($matches[1]), $key )] = $value; } diff --git a/src/Shared/Infrastructure/Symfony/ApiController.php b/src/Shared/Infrastructure/Symfony/ApiController.php index abcd39031..e254d0409 100644 --- a/src/Shared/Infrastructure/Symfony/ApiController.php +++ b/src/Shared/Infrastructure/Symfony/ApiController.php @@ -13,9 +13,9 @@ abstract class ApiController { - private $queryBus; - private $commandBus; - private $exceptionHandler; + private QueryBus $queryBus; + private CommandBus $commandBus; + private ApiExceptionsHttpStatusCodeMapping $exceptionHandler; public function __construct( QueryBus $queryBus, diff --git a/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php b/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php index bc9d8c83d..d8d7aa8b0 100644 --- a/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php +++ b/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php @@ -12,7 +12,7 @@ final class ApiExceptionListener { - private $exceptionHandler; + private ApiExceptionsHttpStatusCodeMapping $exceptionHandler; public function __construct(ApiExceptionsHttpStatusCodeMapping $exceptionHandler) { @@ -34,7 +34,7 @@ public function onException(RequestEvent $event): void ); } - private function exceptionCodeFor(Exception $error) + private function exceptionCodeFor(Exception $error): string { $domainErrorClass = DomainError::class; diff --git a/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php b/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php index 0f1ff3545..c99249232 100644 --- a/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php +++ b/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php @@ -12,8 +12,7 @@ final class ApiExceptionsHttpStatusCodeMapping { private const DEFAULT_STATUS_CODE = Response::HTTP_INTERNAL_SERVER_ERROR; - - private $exceptions = [ + private array $exceptions = [ InvalidArgumentException::class => Response::HTTP_BAD_REQUEST, NotFoundHttpException::class => Response::HTTP_NOT_FOUND, ]; diff --git a/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php b/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php index beaf524a0..8973f9a5a 100644 --- a/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php +++ b/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php @@ -11,11 +11,10 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Event\RequestEvent; -use function Lambdish\Phunctional\get; final class BasicHttpAuthMiddleware { - private $bus; + private CommandBus $bus; public function __construct(CommandBus $bus) { diff --git a/src/Shared/Infrastructure/Symfony/FlashSession.php b/src/Shared/Infrastructure/Symfony/FlashSession.php index 715107118..fe308c34d 100644 --- a/src/Shared/Infrastructure/Symfony/FlashSession.php +++ b/src/Shared/Infrastructure/Symfony/FlashSession.php @@ -9,7 +9,7 @@ final class FlashSession { - private static $flashes = []; + private static array $flashes = []; public function __construct(SessionInterface $session) { diff --git a/src/Shared/Infrastructure/Symfony/WebController.php b/src/Shared/Infrastructure/Symfony/WebController.php index 75d16a26e..bf9297372 100644 --- a/src/Shared/Infrastructure/Symfony/WebController.php +++ b/src/Shared/Infrastructure/Symfony/WebController.php @@ -16,9 +16,9 @@ abstract class WebController extends ApiController { - private $twig; - private $router; - private $session; + private Environment $twig; + private RouterInterface $router; + private SessionInterface $session; public function __construct( Environment $twig, diff --git a/tests/src/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php b/tests/src/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php index adc6d7fa7..eab5f178c 100644 --- a/tests/src/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php +++ b/tests/src/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php @@ -8,7 +8,6 @@ use CodelyTv\Tests\Shared\Domain\Criteria\CriteriaMother; use CodelyTv\Tests\Shared\Domain\Criteria\FilterMother; use CodelyTv\Tests\Shared\Domain\Criteria\FiltersMother; -use CodelyTv\Tests\Shared\Domain\Criteria\OrderMother; final class BackofficeCourseCriteriaMother { diff --git a/tests/src/Backoffice/Courses/Domain/BackofficeCourseMother.php b/tests/src/Backoffice/Courses/Domain/BackofficeCourseMother.php index f34dc9950..2341a63de 100644 --- a/tests/src/Backoffice/Courses/Domain/BackofficeCourseMother.php +++ b/tests/src/Backoffice/Courses/Domain/BackofficeCourseMother.php @@ -16,7 +16,7 @@ public static function create(string $id, string $name, string $duration): Backo return new BackofficeCourse($id, $name, $duration); } - public static function withName(string $name) + public static function withName(string $name): BackofficeCourse { return self::create( CourseIdMother::random()->value(), diff --git a/tests/src/Mooc/Courses/Domain/CourseIdMother.php b/tests/src/Mooc/Courses/Domain/CourseIdMother.php index b7eaea03e..4ee6627eb 100644 --- a/tests/src/Mooc/Courses/Domain/CourseIdMother.php +++ b/tests/src/Mooc/Courses/Domain/CourseIdMother.php @@ -16,9 +16,7 @@ public static function create(string $value): CourseId public static function creator(): callable { - return static function () { - return self::random(); - }; + return static fn() => self::random(); } public static function random(): CourseId diff --git a/tests/src/Mooc/Shared/Infrastructure/PhpUnit/MoocContextInfrastructureTestCase.php b/tests/src/Mooc/Shared/Infrastructure/PhpUnit/MoocContextInfrastructureTestCase.php index ab861345f..94cff8d50 100644 --- a/tests/src/Mooc/Shared/Infrastructure/PhpUnit/MoocContextInfrastructureTestCase.php +++ b/tests/src/Mooc/Shared/Infrastructure/PhpUnit/MoocContextInfrastructureTestCase.php @@ -27,7 +27,7 @@ protected function tearDown(): void parent::tearDown(); } - protected function clearUnitOfWork() + protected function clearUnitOfWork(): void { $this->service(EntityManager::class)->clear(); } diff --git a/tests/src/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php b/tests/src/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php index bfd13a732..591e94532 100644 --- a/tests/src/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php +++ b/tests/src/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php @@ -11,7 +11,7 @@ final class MoocEnvironmentArranger implements EnvironmentArranger { - private $entityManager; + private EntityManager $entityManager; public function __construct(EntityManager $entityManager) { diff --git a/tests/src/Shared/Domain/Criteria/CriteriaMother.php b/tests/src/Shared/Domain/Criteria/CriteriaMother.php index 12211c4e5..8966d67e3 100644 --- a/tests/src/Shared/Domain/Criteria/CriteriaMother.php +++ b/tests/src/Shared/Domain/Criteria/CriteriaMother.php @@ -11,8 +11,12 @@ final class CriteriaMother { - public static function create(Filters $filters, Order $order = null, int $offset = null, int $limit = null): Criteria - { + 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); } diff --git a/tests/src/Shared/Domain/RandomElementPicker.php b/tests/src/Shared/Domain/RandomElementPicker.php index c9334e28a..2ed15f142 100644 --- a/tests/src/Shared/Domain/RandomElementPicker.php +++ b/tests/src/Shared/Domain/RandomElementPicker.php @@ -4,8 +4,6 @@ namespace CodelyTv\Tests\Shared\Domain; -use CodelyTv\Tests\Shared\Domain\MotherCreator; - final class RandomElementPicker { public static function from(...$elements) diff --git a/tests/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php b/tests/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php index be6c06d8a..011bd365f 100644 --- a/tests/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php +++ b/tests/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php @@ -39,8 +39,7 @@ public function it_should_raise_an_exception_dispatching_a_non_registered_comman private function commandHandler() { - return new class - { + return new class { public function __invoke(FakeCommand $command) { throw new RuntimeException('This works fine!'); diff --git a/tests/src/Shared/Infrastructure/Bus/Query/FakeResponse.php b/tests/src/Shared/Infrastructure/Bus/Query/FakeResponse.php index 4d0e29931..034d3e63b 100644 --- a/tests/src/Shared/Infrastructure/Bus/Query/FakeResponse.php +++ b/tests/src/Shared/Infrastructure/Bus/Query/FakeResponse.php @@ -8,7 +8,7 @@ final class FakeResponse implements Response { - private $number; + private int $number; public function __construct(int $number) { diff --git a/tests/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php b/tests/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php index 1f359098b..141dde880 100644 --- a/tests/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php +++ b/tests/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php @@ -39,8 +39,7 @@ public function it_should_raise_an_exception_dispatching_a_non_registered_query( private function queryHandler() { - return new class - { + return new class { public function __invoke(FakeQuery $query) { throw new RuntimeException('This works fine!'); diff --git a/tests/src/Shared/Infrastructure/Doctrine/DatabaseCleaner.php b/tests/src/Shared/Infrastructure/Doctrine/DatabaseCleaner.php index db05cac55..ccd9caffe 100644 --- a/tests/src/Shared/Infrastructure/Doctrine/DatabaseCleaner.php +++ b/tests/src/Shared/Infrastructure/Doctrine/DatabaseCleaner.php @@ -11,7 +11,7 @@ final class DatabaseCleaner { - public function __invoke(EntityManagerInterface $entityManager) + public function __invoke(EntityManagerInterface $entityManager): void { $connection = $entityManager->getConnection(); @@ -30,9 +30,7 @@ private function truncateDatabaseSql(array $tables): string private function truncateTableSql(): callable { - return function (array $table): string { - return 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/src/Shared/Infrastructure/Mink/MinkHelper.php b/tests/src/Shared/Infrastructure/Mink/MinkHelper.php index 0e413a443..cae4f37e3 100644 --- a/tests/src/Shared/Infrastructure/Mink/MinkHelper.php +++ b/tests/src/Shared/Infrastructure/Mink/MinkHelper.php @@ -8,11 +8,10 @@ use Behat\Mink\Session; use Symfony\Component\BrowserKit\AbstractBrowser; use Symfony\Component\DomCrawler\Crawler; -use Symfony\Component\HttpFoundation\Request; final class MinkHelper { - private $session; + private Session $session; public function __construct(Session $session) { @@ -63,7 +62,7 @@ public function resetServerParameters(): void $this->getClient()->setServerParameters([]); } - public function getRequest(): Request + public function getRequest(): object { return $this->getClient()->getRequest(); } diff --git a/tests/src/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php b/tests/src/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php index 0a1b6dd72..af785a3e0 100644 --- a/tests/src/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php +++ b/tests/src/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php @@ -9,7 +9,7 @@ final class CodelyTvMatcherIsSimilar extends MatcherAbstract { - private $constraint; + private CodelyTvConstraintIsSimilar $constraint; public function __construct($value, $delta = 0.0) { diff --git a/tests/src/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php b/tests/src/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php index d40a3a2ac..d813d5251 100644 --- a/tests/src/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php +++ b/tests/src/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php @@ -38,14 +38,10 @@ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = f private function contains(array $expectedArray, array $actualArray): bool { - $exists = function (AggregateRoot $expected) use ($actualArray) { - return any( - function (AggregateRoot $actual) use ($expected) { - return TestUtils::isSimilar($expected, $actual); - }, - $actualArray - ); - }; + $exists = fn(AggregateRoot $expected) => any( + fn(AggregateRoot $actual) => TestUtils::isSimilar($expected, $actual), + $actualArray + ); return all($exists, $expectedArray); } diff --git a/tests/src/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php b/tests/src/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php index a6c91b580..880c51ed5 100644 --- a/tests/src/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php +++ b/tests/src/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php @@ -23,19 +23,6 @@ public function accepts($expected, $actual): bool $this->isValidDateTimeString($actual); } - private function isValidDateTimeString($expected): bool - { - $isValid = true; - - try { - new DateTimeImmutable($expected); - } catch (Throwable $throwable) { - $isValid = false; - } - - return $isValid; - } - public function assertEquals( $expected, $actual, @@ -69,4 +56,17 @@ protected function dateTimeToString(DateTimeInterface $datetime): string return $string ?: 'Invalid DateTime object'; } + + private function isValidDateTimeString($expected): bool + { + $isValid = true; + + try { + new DateTimeImmutable($expected); + } catch (Throwable $throwable) { + $isValid = false; + } + + return $isValid; + } } diff --git a/tests/src/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php b/tests/src/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php index a8b6bb527..d14af789c 100644 --- a/tests/src/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php +++ b/tests/src/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php @@ -38,14 +38,10 @@ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = f private function contains(array $expectedArray, array $actualArray): bool { - $exists = static function (DomainEvent $expected) use ($actualArray) { - return any( - static function (DomainEvent $actual) use ($expected) { - return TestUtils::isSimilar($expected, $actual); - }, - $actualArray - ); - }; + $exists = static fn(DomainEvent $expected) => any( + static fn(DomainEvent $actual) => TestUtils::isSimilar($expected, $actual), + $actualArray + ); return all($exists, $expectedArray); } From 74d54c85ec43b62ae3a06732953a9fd194ed40a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Fri, 6 Mar 2020 09:00:16 +0100 Subject: [PATCH 004/106] 404 on course counter not found (#136) --- .../Controller/Courses/CoursesPutController.php | 12 +++++------- .../CoursesCounterGetController.php | 16 +++++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/apps/mooc/backend/src/Controller/Courses/CoursesPutController.php b/apps/mooc/backend/src/Controller/Courses/CoursesPutController.php index aa24b592d..482e19c17 100644 --- a/apps/mooc/backend/src/Controller/Courses/CoursesPutController.php +++ b/apps/mooc/backend/src/Controller/Courses/CoursesPutController.php @@ -5,22 +5,20 @@ namespace CodelyTv\Apps\Mooc\Backend\Controller\Courses; use CodelyTv\Mooc\Courses\Application\Create\CreateCourseCommand; -use CodelyTv\Shared\Domain\Bus\Command\CommandBus; +use CodelyTv\Shared\Infrastructure\Symfony\ApiController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -final class CoursesPutController +final class CoursesPutController extends ApiController { - private CommandBus $bus; - - public function __construct(CommandBus $bus) + protected function exceptions(): array { - $this->bus = $bus; + return []; } public function __invoke(string $id, Request $request): Response { - $this->bus->dispatch( + $this->dispatch( new CreateCourseCommand( $id, $request->request->get('name'), diff --git a/apps/mooc/backend/src/Controller/CoursesCounter/CoursesCounterGetController.php b/apps/mooc/backend/src/Controller/CoursesCounter/CoursesCounterGetController.php index 43e4c0d7d..a91ed65d1 100644 --- a/apps/mooc/backend/src/Controller/CoursesCounter/CoursesCounterGetController.php +++ b/apps/mooc/backend/src/Controller/CoursesCounter/CoursesCounterGetController.php @@ -6,22 +6,24 @@ use CodelyTv\Mooc\CoursesCounter\Application\Find\CoursesCounterResponse; use CodelyTv\Mooc\CoursesCounter\Application\Find\FindCoursesCounterQuery; -use CodelyTv\Shared\Domain\Bus\Query\QueryBus; +use CodelyTv\Mooc\CoursesCounter\Domain\CoursesCounterNotExist; +use CodelyTv\Shared\Infrastructure\Symfony\ApiController; use Symfony\Component\HttpFoundation\JsonResponse; +use Symfony\Component\HttpFoundation\Response; -final class CoursesCounterGetController +final class CoursesCounterGetController extends ApiController { - private $bus; - - public function __construct(QueryBus $bus) + protected function exceptions(): array { - $this->bus = $bus; + return [ + CoursesCounterNotExist::class => Response::HTTP_NOT_FOUND, + ]; } public function __invoke() { /** @var CoursesCounterResponse $response */ - $response = $this->bus->ask(new FindCoursesCounterQuery()); + $response = $this->ask(new FindCoursesCounterQuery()); return new JsonResponse( [ From 34e55b093f1034669479966df6b3fc31bc0efa6d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Apr 2020 09:03:06 +0200 Subject: [PATCH 005/106] Bump symfony/http-foundation from 5.0.3 to 5.0.7 (#139) --- composer.lock | 172 +++++++++++++++++++++++++------------------------- 1 file changed, 86 insertions(+), 86 deletions(-) diff --git a/composer.lock b/composer.lock index 31c8606fa..0216e00ad 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": "7f9cc3fa2bf0afa96ae66ac76e3e9d9a", + "content-hash": "6dab900f626c1c58c8f3784e13725b3d", "packages": [ { "name": "doctrine/annotations", @@ -2150,62 +2150,6 @@ "homepage": "https://symfony.com", "time": "2020-01-19T11:13:19+00:00" }, - { - "name": "symfony/debug", - "version": "v4.4.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "20236471058bbaa9907382500fc14005c84601f0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/20236471058bbaa9907382500fc14005c84601f0", - "reference": "20236471058bbaa9907382500fc14005c84601f0", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": "<3.4" - }, - "require-dev": { - "symfony/http-kernel": "^3.4|^4.0|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, - "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": "Symfony Debug Component", - "homepage": "https://symfony.com", - "time": "2020-01-25T12:44:29+00:00" - }, { "name": "symfony/dependency-injection", "version": "v5.0.3", @@ -2750,16 +2694,16 @@ }, { "name": "symfony/http-foundation", - "version": "v5.0.3", + "version": "v5.0.7", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "5dc0db5026f2b611cb8910a1f465e95eafd84c2e" + "reference": "26fb006a2c7b6cdd23d52157b05f8414ffa417b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5dc0db5026f2b611cb8910a1f465e95eafd84c2e", - "reference": "5dc0db5026f2b611cb8910a1f465e95eafd84c2e", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/26fb006a2c7b6cdd23d52157b05f8414ffa417b6", + "reference": "26fb006a2c7b6cdd23d52157b05f8414ffa417b6", "shasum": "" }, "require": { @@ -2801,7 +2745,7 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2020-01-04T14:08:26+00:00" + "time": "2020-03-30T14:14:32+00:00" }, { "name": "symfony/http-kernel", @@ -2975,16 +2919,16 @@ }, { "name": "symfony/mime", - "version": "v5.0.3", + "version": "v5.0.7", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "2a3c7fee1f1a0961fa9cf360d5da553d05095e59" + "reference": "481b7d6da88922fb1e0d86a943987722b08f3955" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/2a3c7fee1f1a0961fa9cf360d5da553d05095e59", - "reference": "2a3c7fee1f1a0961fa9cf360d5da553d05095e59", + "url": "https://api.github.com/repos/symfony/mime/zipball/481b7d6da88922fb1e0d86a943987722b08f3955", + "reference": "481b7d6da88922fb1e0d86a943987722b08f3955", "shasum": "" }, "require": { @@ -3033,7 +2977,7 @@ "mime", "mime-type" ], - "time": "2020-01-04T14:08:26+00:00" + "time": "2020-03-27T16:56:45+00:00" }, { "name": "symfony/polyfill-ctype", @@ -3095,22 +3039,22 @@ }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.13.1", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "6f9c239e61e1b0c9229a28ff89a812dc449c3d46" + "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6f9c239e61e1b0c9229a28ff89a812dc449c3d46", - "reference": "6f9c239e61e1b0c9229a28ff89a812dc449c3d46", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", + "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", "shasum": "" }, "require": { "php": ">=5.3.3", "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.9" + "symfony/polyfill-php72": "^1.10" }, "suggest": { "ext-intl": "For best performance" @@ -3118,7 +3062,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -3153,20 +3097,20 @@ "portable", "shim" ], - "time": "2019-11-27T13:56:44+00:00" + "time": "2020-03-09T19:04:49+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.13.1", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f" + "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7b4aab9743c30be783b73de055d24a39cf4b954f", - "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac", + "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac", "shasum": "" }, "require": { @@ -3178,7 +3122,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -3212,20 +3156,20 @@ "portable", "shim" ], - "time": "2019-11-27T14:18:11+00:00" + "time": "2020-03-09T19:04:49+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.13.1", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "66fea50f6cb37a35eea048d75a7d99a45b586038" + "reference": "37b0976c78b94856543260ce09b460a7bc852747" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/66fea50f6cb37a35eea048d75a7d99a45b586038", - "reference": "66fea50f6cb37a35eea048d75a7d99a45b586038", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/37b0976c78b94856543260ce09b460a7bc852747", + "reference": "37b0976c78b94856543260ce09b460a7bc852747", "shasum": "" }, "require": { @@ -3234,7 +3178,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.15-dev" } }, "autoload": { @@ -3267,7 +3211,7 @@ "portable", "shim" ], - "time": "2019-11-27T13:56:44+00:00" + "time": "2020-02-27T09:26:54+00:00" }, { "name": "symfony/polyfill-php73", @@ -6380,6 +6324,62 @@ "homepage": "https://symfony.com", "time": "2020-01-01T11:03:25+00:00" }, + { + "name": "symfony/debug", + "version": "v4.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "20236471058bbaa9907382500fc14005c84601f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/20236471058bbaa9907382500fc14005c84601f0", + "reference": "20236471058bbaa9907382500fc14005c84601f0", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": "<3.4" + }, + "require-dev": { + "symfony/http-kernel": "^3.4|^4.0|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "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": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2020-01-25T12:44:29+00:00" + }, { "name": "symfony/dom-crawler", "version": "v5.0.3", From 18442e3521e2a7ae3caef25be148d371990b1d87 Mon Sep 17 00:00:00 2001 From: Jacob Dreesen Date: Tue, 12 May 2020 09:34:10 +0200 Subject: [PATCH 006/106] Fix typo (#153) --- .../Persistence/Elasticsearch/ElasticQueryGenerator.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php index add1097bb..fdcf26a4f 100644 --- a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php +++ b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php @@ -28,7 +28,7 @@ final class ElasticQueryGenerator public function __invoke(array $query, Filter $filter): array { $type = $this->typeFor($filter->operator()); - $termLevel = $this->termLeverFor($filter->operator()); + $termLevel = $this->termLevelFor($filter->operator()); $valueTemplate = $filter->operator()->isContaining() ? '*%s*' : '%s'; return array_merge_recursive( @@ -51,7 +51,7 @@ private function typeFor(FilterOperator $operator): string return in_array($operator->value(), self::$mustNotFields, true) ? self::MUST_NOT_TYPE : self::MUST_TYPE; } - private function termLeverFor(FilterOperator $operator): string + private function termLevelFor(FilterOperator $operator): string { return get($operator->value(), self::$termMapping); } From 4c714e7fbf02c36865984d858e14366f11d7bf46 Mon Sep 17 00:00:00 2001 From: Matteo Date: Wed, 3 Jun 2020 09:25:41 +0200 Subject: [PATCH 007/106] Fixed retrieval exception's baseclass on ApiExeptionListener (#163) it used a laravel function, which is not available with the actual dependencies. Defined baseclass calcuation as a util's method --- src/Shared/Domain/Utils.php | 7 +++++++ .../Infrastructure/Symfony/ApiExceptionListener.php | 11 +++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/Shared/Domain/Utils.php b/src/Shared/Domain/Utils.php index fbd5050e5..59788a6b5 100644 --- a/src/Shared/Domain/Utils.php +++ b/src/Shared/Domain/Utils.php @@ -7,6 +7,7 @@ use DateTimeImmutable; use DateTimeInterface; use RuntimeException; +use ReflectionClass; use function Lambdish\Phunctional\filter; final class Utils @@ -86,4 +87,10 @@ public static function filesIn(string $path, $fileType): array scandir($path) ); } + + public function getClassBasename(object $object): string + { + $reflect = new ReflectionClass($object); + return $reflect->getShortName(); + } } diff --git a/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php b/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php index d8d7aa8b0..9efa57974 100644 --- a/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php +++ b/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php @@ -6,9 +6,8 @@ use CodelyTv\Shared\Domain\DomainError; use CodelyTv\Shared\Domain\Utils; -use Exception; use Symfony\Component\HttpFoundation\JsonResponse; -use Symfony\Component\HttpKernel\Event\RequestEvent; +use Symfony\Component\HttpKernel\Event\ExceptionEvent; final class ApiExceptionListener { @@ -19,9 +18,9 @@ public function __construct(ApiExceptionsHttpStatusCodeMapping $exceptionHandler $this->exceptionHandler = $exceptionHandler; } - public function onException(RequestEvent $event): void + public function onException(ExceptionEvent $event): void { - $exception = $event->getException(); + $exception = $event->getThrowable(); $event->setResponse( new JsonResponse( @@ -34,10 +33,10 @@ public function onException(RequestEvent $event): void ); } - private function exceptionCodeFor(Exception $error): string + private function exceptionCodeFor(\Throwable $error): string { $domainErrorClass = DomainError::class; - return $error instanceof $domainErrorClass ? $error->errorCode() : Utils::toSnakeCase(class_basename($error)); + return $error instanceof $domainErrorClass ? $error->errorCode() : Utils::toSnakeCase(Utils::getClassBasename($error)); } } From a17ef45d4d7ed8e6a9b2fc0266e17d25bc32d80b Mon Sep 17 00:00:00 2001 From: Hector Date: Wed, 3 Jun 2020 10:16:06 +0200 Subject: [PATCH 008/106] Add composer-require to the Makefile (#155) --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index e067bc52e..2c6e0d5f5 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,8 @@ deps: composer-install # 🐘 Composer composer-install: CMD=install composer-update: CMD=update -composer composer-install composer-update: +composer-require: CMD=require +composer composer-install composer-update composer-require: @docker run --rm --interactive --volume $(current-dir):/app --user $(id -u):$(id -g) \ clevyr/prestissimo $(CMD) \ --ignore-platform-reqs \ From 88fb03e19bfc0af2f89273cf04c1e1e9e3dafb74 Mon Sep 17 00:00:00 2001 From: Matteo Date: Wed, 3 Jun 2020 10:24:32 +0200 Subject: [PATCH 009/106] Add missing .env.local on the php container env_file list (#162) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * added missing .env.local on the php container env_file list * added empty .env.local file * makefile creates an empty .env.local in case doesn't exist. File ignored * removed .env.local placeholder file * fixed generation of .env.local as placeholder file Co-authored-by: mbertamini@tuenti.com Co-authored-by: Rafa Gómez --- Makefile | 15 +++++++++------ docker-compose.yml | 1 + 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 2c6e0d5f5..24983550d 100644 --- a/Makefile +++ b/Makefile @@ -7,24 +7,27 @@ build: deps start deps: composer-install # 🐘 Composer +composer-env-file: + @if [ ! -f .env.local ]; then echo '' > .env.local; fi + composer-install: CMD=install composer-update: CMD=update composer-require: CMD=require -composer composer-install composer-update composer-require: +composer composer-install composer-update composer-require: composer-env-file @docker run --rm --interactive --volume $(current-dir):/app --user $(id -u):$(id -g) \ clevyr/prestissimo $(CMD) \ --ignore-platform-reqs \ --no-ansi \ --no-interaction -reload: +reload: composer-env-file @docker-compose exec php-fpm kill -USR2 1 @docker-compose exec nginx nginx -s reload -test: +test: composer-env-file @docker exec codelytv-php_ddd_skeleton-php make run-tests -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 tests ./vendor/bin/behat -p mooc_backend --format=progress -v @@ -36,10 +39,10 @@ destroy: CMD=down # Usage: `make doco CMD="ps --services"` # Usage: `make doco CMD="build --parallel --pull --force-rm --no-cache"` -doco start stop destroy: +doco start stop destroy: composer-env-file @docker-compose $(CMD) -rebuild: +rebuild: composer-env-file docker-compose build --pull --force-rm --no-cache make deps make start diff --git a/docker-compose.yml b/docker-compose.yml index 009164649..b9e494657 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -46,6 +46,7 @@ services: - .:/app:delegated env_file: - .env + - .env.local depends_on: - mysql - rabbitmq From b6bdaabe4a28d39f7bfe4ce1f509b0b7983aca35 Mon Sep 17 00:00:00 2001 From: Matteo Date: Wed, 3 Jun 2020 12:11:56 +0200 Subject: [PATCH 010/106] Add composer require interactive in makefile (#161) * added makefile target require-composer-module removed the --no-interaction flag in order to let the user insert github's token, if requested * fixed makefile environment variables for non-interactive automated tools composer-install and composer-update will able to run without console interaction * removed useless newline in the makefile * merged master changes Co-authored-by: mbertamini@tuenti.com --- Makefile | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 24983550d..f4ece3da8 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: build deps composer-install composer-update composer reload test run-tests start stop destroy doco rebuild start-local ping-mysql +.PHONY: build deps composer-install composer-update composer reload test run-tests start stop destroy doco rebuild start-local ping-mysql composer-require composer-require-module current-dir := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) @@ -13,12 +13,14 @@ composer-env-file: composer-install: CMD=install composer-update: CMD=update composer-require: CMD=require -composer composer-install composer-update composer-require: composer-env-file - @docker run --rm --interactive --volume $(current-dir):/app --user $(id -u):$(id -g) \ +composer-require: INTERACTIVE=-ti --interactive +composer-require-module: CMD=require $(module) +composer-require-module: INTERACTIVE=-ti --interactive +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) \ clevyr/prestissimo $(CMD) \ --ignore-platform-reqs \ - --no-ansi \ - --no-interaction + --no-ansi reload: composer-env-file @docker-compose exec php-fpm kill -USR2 1 From c1804b262cda7b77c3866c125e850367121cdc15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Wed, 3 Jun 2020 12:13:22 +0200 Subject: [PATCH 011/106] Use Behat directly (#169) * Require behat directly without specifying the repository url * Use mink extension from friends of behat * Use mink browserkit extension from origin --- composer.json | 27 +- composer.lock | 2618 +++++++++++++++++++++++++++++++++++-------------- 2 files changed, 1877 insertions(+), 768 deletions(-) diff --git a/composer.json b/composer.json index 780debf81..bb4caae52 100644 --- a/composer.json +++ b/composer.json @@ -1,25 +1,8 @@ { - "name": "codelytv/ddd-skeleton", + "name": "codelytv/php-ddd-example", "license": "MIT", "type": "project", - "description": "DDD php Skeleton - Monorepository", - "repositories": [ - { - "type": "vcs", - "url": "https://github.com/Behat/Behat", - "comment": "Waiting for new tag" - }, - { - "type": "vcs", - "url": "https://github.com/DonCallisto/MinkExtension", - "comment": "Waiting for https://github.com/Behat/MinkExtension/pull/355" - }, - { - "type": "vcs", - "url": "https://github.com/ruudk/MinkBrowserKitDriver", - "comment": "Waiting for https://github.com/minkphp/Mink/issues/787 and then a new release" - } - ], + "description": "An example project applying Domain-Driven Design, Hexagonal Architecture and CQRS in a Monorepository", "require": { "php": "7.4", @@ -52,9 +35,9 @@ "roave/security-advisories": "dev-master", - "behat/behat": "dev-master as 3.6", - "behat/mink-extension": "dev-patch-4", - "behat/mink-browserkit-driver": "dev-symfony-5", + "behat/behat": "^3.6", + "friends-of-behat/mink-extension": "^2.4", + "behat/mink-browserkit-driver": "^1.3", "friends-of-behat/symfony-extension": "2.1.0-BETA.1", "phpunit/phpunit": "^8.5", diff --git a/composer.lock b/composer.lock index 0216e00ad..1e62ef733 100644 --- a/composer.lock +++ b/composer.lock @@ -4,25 +4,26 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "6dab900f626c1c58c8f3784e13725b3d", + "content-hash": "90c4207255091c7e41a5190c1c90635a", "packages": [ { "name": "doctrine/annotations", - "version": "v1.8.0", + "version": "1.10.3", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc" + "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/904dca4eb10715b92569fbcd79e201d5c349b6bc", - "reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5db60a4969eba0e0c197a19c077780aadbc43c5d", + "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d", "shasum": "" }, "require": { "doctrine/lexer": "1.*", - "php": "^7.1" + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/cache": "1.*", @@ -31,7 +32,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.7.x-dev" + "dev-master": "1.9.x-dev" } }, "autoload": { @@ -72,24 +73,24 @@ "docblock", "parser" ], - "time": "2019-10-01T18:55:10+00:00" + "time": "2020-05-25T17:24:27+00:00" }, { "name": "doctrine/cache", - "version": "1.10.0", + "version": "1.10.1", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "382e7f4db9a12dc6c19431743a2b096041bcdd62" + "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/382e7f4db9a12dc6c19431743a2b096041bcdd62", - "reference": "382e7f4db9a12dc6c19431743a2b096041bcdd62", + "url": "https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3", + "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3", "shasum": "" }, "require": { - "php": "~7.1" + "php": "~7.1 || ^8.0" }, "conflict": { "doctrine/common": ">2.2,<2.4" @@ -154,37 +155,46 @@ "redis", "xcache" ], - "time": "2019-11-29T15:36:20+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%2Fcache", + "type": "tidelift" + } + ], + "time": "2020-05-27T16:24:54+00:00" }, { "name": "doctrine/collections", - "version": "1.6.4", + "version": "1.6.5", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7" + "reference": "fc0206348e17e530d09463fef07ba8968406cd6d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7", - "reference": "6b1e4b2b66f6d6e49983cebfe23a21b7ccc5b0d7", + "url": "https://api.github.com/repos/doctrine/collections/zipball/fc0206348e17e530d09463fef07ba8968406cd6d", + "reference": "fc0206348e17e530d09463fef07ba8968406cd6d", "shasum": "" }, "require": { - "php": "^7.1.3" + "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.2.2" + "vimeo/psalm": "^3.8.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" @@ -224,32 +234,39 @@ "iterators", "php" ], - "time": "2019-11-13T13:07:11+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": "2020-05-25T19:24:35+00:00" }, { "name": "doctrine/common", - "version": "2.12.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "2053eafdf60c2172ee1373d1b9289ba1db7f1fc6" + "reference": "402a424f1e7dc39ce8fa7901e56d25835978387c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/2053eafdf60c2172ee1373d1b9289ba1db7f1fc6", - "reference": "2053eafdf60c2172ee1373d1b9289ba1db7f1fc6", + "url": "https://api.github.com/repos/doctrine/common/zipball/402a424f1e7dc39ce8fa7901e56d25835978387c", + "reference": "402a424f1e7dc39ce8fa7901e56d25835978387c", "shasum": "" }, "require": { - "doctrine/annotations": "^1.0", - "doctrine/cache": "^1.0", - "doctrine/collections": "^1.0", - "doctrine/event-manager": "^1.0", - "doctrine/inflector": "^1.0", - "doctrine/lexer": "^1.0", - "doctrine/persistence": "^1.1", - "doctrine/reflection": "^1.0", - "php": "^7.1" + "doctrine/persistence": "^2.0", + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^1.0", @@ -262,7 +279,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.11.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -307,20 +324,34 @@ "doctrine", "php" ], - "time": "2020-01-10T15:49:25+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%2Fcommon", + "type": "tidelift" + } + ], + "time": "2020-05-30T15:08:34+00:00" }, { "name": "doctrine/dbal", - "version": "v2.10.1", + "version": "2.10.2", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "c2b8e6e82732a64ecde1cddf9e1e06cb8556e3d8" + "reference": "aab745e7b6b2de3b47019da81e7225e14dcfdac8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/c2b8e6e82732a64ecde1cddf9e1e06cb8556e3d8", - "reference": "c2b8e6e82732a64ecde1cddf9e1e06cb8556e3d8", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/aab745e7b6b2de3b47019da81e7225e14dcfdac8", + "reference": "aab745e7b6b2de3b47019da81e7225e14dcfdac8", "shasum": "" }, "require": { @@ -332,9 +363,11 @@ "require-dev": { "doctrine/coding-standard": "^6.0", "jetbrains/phpstorm-stubs": "^2019.1", - "phpstan/phpstan": "^0.11.3", + "nikic/php-parser": "^4.4", + "phpstan/phpstan": "^0.12", "phpunit/phpunit": "^8.4.1", - "symfony/console": "^2.0.5|^3.0|^4.0|^5.0" + "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", + "vimeo/psalm": "^3.11" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -399,7 +432,21 @@ "sqlserver", "sqlsrv" ], - "time": "2020-01-04T12:56:21+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%2Fdbal", + "type": "tidelift" + } + ], + "time": "2020-04-20T17:19:26+00:00" }, { "name": "doctrine/event-manager", @@ -479,33 +526,38 @@ }, { "name": "doctrine/inflector", - "version": "1.3.1", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1" + "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/ec3a55242203ffa6a4b27c58176da97ff0a7aec1", - "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/4650c8b30c753a76bf44fb2ed00117d6f367490c", + "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^6.2" + "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" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" + "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector", + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" } }, "notification-url": "https://packagist.org/downloads/", @@ -534,32 +586,52 @@ "email": "schmittjoh@gmail.com" } ], - "description": "Common String Manipulations with regard to casing and singular/plural rules.", - "homepage": "http://www.doctrine-project.org", + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", "keywords": [ "inflection", - "pluralize", - "singularize", - "string" + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "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%2Finflector", + "type": "tidelift" + } ], - "time": "2019-10-30T19:59:35+00:00" + "time": "2020-05-29T07:19:59+00:00" }, { "name": "doctrine/instantiator", - "version": "1.3.0", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", - "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^6.0", @@ -598,24 +670,38 @@ "constructor", "instantiate" ], - "time": "2019-10-21T16:45:58+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%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-05-29T17:27:14+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6" + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", - "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", "shasum": "" }, "require": { - "php": "^7.2" + "php": "^7.2 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^6.0", @@ -660,39 +746,58 @@ "parser", "php" ], - "time": "2019-10-30T14:39:59+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%2Flexer", + "type": "tidelift" + } + ], + "time": "2020-05-25T17:44:05+00:00" }, { "name": "doctrine/orm", - "version": "v2.7.0", + "version": "v2.7.3", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "4d763ca4c925f647b248b9fa01b5f47aa3685d62" + "reference": "d95e03ba660d50d785a9925f41927fef0ee553cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/4d763ca4c925f647b248b9fa01b5f47aa3685d62", - "reference": "4d763ca4c925f647b248b9fa01b5f47aa3685d62", + "url": "https://api.github.com/repos/doctrine/orm/zipball/d95e03ba660d50d785a9925f41927fef0ee553cf", + "reference": "d95e03ba660d50d785a9925f41927fef0ee553cf", "shasum": "" }, "require": { "doctrine/annotations": "^1.8", "doctrine/cache": "^1.9.1", "doctrine/collections": "^1.5", - "doctrine/common": "^2.11", + "doctrine/common": "^2.11 || ^3.0", "doctrine/dbal": "^2.9.3", "doctrine/event-manager": "^1.1", + "doctrine/inflector": "^1.0", "doctrine/instantiator": "^1.3", - "doctrine/persistence": "^1.2", + "doctrine/lexer": "^1.0", + "doctrine/persistence": "^1.3.3 || ^2.0", "ext-pdo": "*", + "ocramius/package-versions": "^1.2", "php": "^7.1", "symfony/console": "^3.0|^4.0|^5.0" }, "require-dev": { "doctrine/coding-standard": "^5.0", + "phpstan/phpstan": "^0.12.18", "phpunit/phpunit": "^7.5", - "symfony/yaml": "^3.4|^4.0|^5.0" + "symfony/yaml": "^3.4|^4.0|^5.0", + "vimeo/psalm": "^3.11" }, "suggest": { "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" @@ -743,20 +848,34 @@ "database", "orm" ], - "time": "2019-11-19T08:38:05+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/orm", + "type": "tidelift" + } + ], + "time": "2020-05-26T16:03:49+00:00" }, { "name": "doctrine/persistence", - "version": "1.3.6", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "5dd3ac5eebef2d0b074daa4440bb18f93132dee4" + "reference": "1dee036f22cd5dc0bc12132f1d1c38415907be55" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/5dd3ac5eebef2d0b074daa4440bb18f93132dee4", - "reference": "5dd3ac5eebef2d0b074daa4440bb18f93132dee4", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/1dee036f22cd5dc0bc12132f1d1c38415907be55", + "reference": "1dee036f22cd5dc0bc12132f1d1c38415907be55", "shasum": "" }, "require": { @@ -764,7 +883,7 @@ "doctrine/cache": "^1.0", "doctrine/collections": "^1.0", "doctrine/event-manager": "^1.0", - "doctrine/reflection": "^1.1", + "doctrine/reflection": "^1.2", "php": "^7.1" }, "conflict": { @@ -773,12 +892,13 @@ "require-dev": { "doctrine/coding-standard": "^6.0", "phpstan/phpstan": "^0.11", - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^7.0", + "vimeo/psalm": "^3.11" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -826,20 +946,34 @@ "orm", "persistence" ], - "time": "2020-01-16T22:06:23+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": "2020-05-12T19:32:44+00:00" }, { "name": "doctrine/reflection", - "version": "v1.1.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/doctrine/reflection.git", - "reference": "bc420ead87fdfe08c03ecc3549db603a45b06d4c" + "reference": "55e71912dfcd824b2fdd16f2d9afe15684cfce79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/reflection/zipball/bc420ead87fdfe08c03ecc3549db603a45b06d4c", - "reference": "bc420ead87fdfe08c03ecc3549db603a45b06d4c", + "url": "https://api.github.com/repos/doctrine/reflection/zipball/55e71912dfcd824b2fdd16f2d9afe15684cfce79", + "reference": "55e71912dfcd824b2fdd16f2d9afe15684cfce79", "shasum": "" }, "require": { @@ -860,7 +994,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -904,25 +1038,25 @@ "reflection", "static" ], - "time": "2020-01-08T19:53:19+00:00" + "time": "2020-03-27T11:06:43+00:00" }, { "name": "elasticsearch/elasticsearch", - "version": "v7.5.0", + "version": "v7.7.0", "source": { "type": "git", "url": "https://github.com/elastic/elasticsearch-php.git", - "reference": "81fbecb1046b801729fc10e2c494fffd683b0518" + "reference": "1d90a7ff4fb1936dc4376f09d723af75714f6f05" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/81fbecb1046b801729fc10e2c494fffd683b0518", - "reference": "81fbecb1046b801729fc10e2c494fffd683b0518", + "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/1d90a7ff4fb1936dc4376f09d723af75714f6f05", + "reference": "1d90a7ff4fb1936dc4376f09d723af75714f6f05", "shasum": "" }, "require": { "ext-json": ">=1.3.7", - "guzzlehttp/ringphp": "~1.0", + "ezimuel/ringphp": "^1.1.2", "php": "^7.1", "psr/log": "~1.0" }, @@ -930,7 +1064,7 @@ "cpliakas/git-wrapper": "~2.0", "doctrine/inflector": "^1.3", "mockery/mockery": "^1.2", - "phpstan/phpstan-shim": "^0.11", + "phpstan/phpstan": "^0.12", "phpunit/phpunit": "^7.5", "squizlabs/php_codesniffer": "^3.4", "symfony/finder": "~4.0", @@ -967,43 +1101,37 @@ "elasticsearch", "search" ], - "time": "2019-12-19T15:48:35+00:00" + "time": "2020-05-13T15:19:26+00:00" }, { - "name": "guzzlehttp/ringphp", - "version": "1.1.1", + "name": "ezimuel/guzzlestreams", + "version": "3.0.1", "source": { "type": "git", - "url": "https://github.com/guzzle/RingPHP.git", - "reference": "5e2a174052995663dd68e6b5ad838afd47dd615b" + "url": "https://github.com/ezimuel/guzzlestreams.git", + "reference": "abe3791d231167f14eb80d413420d1eab91163a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/5e2a174052995663dd68e6b5ad838afd47dd615b", - "reference": "5e2a174052995663dd68e6b5ad838afd47dd615b", + "url": "https://api.github.com/repos/ezimuel/guzzlestreams/zipball/abe3791d231167f14eb80d413420d1eab91163a8", + "reference": "abe3791d231167f14eb80d413420d1eab91163a8", "shasum": "" }, "require": { - "guzzlehttp/streams": "~3.0", - "php": ">=5.4.0", - "react/promise": "~2.0" + "php": ">=5.4.0" }, "require-dev": { - "ext-curl": "*", "phpunit/phpunit": "~4.0" }, - "suggest": { - "ext-curl": "Guzzle will use specific adapters if cURL is present" - }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "3.0-dev" } }, "autoload": { "psr-4": { - "GuzzleHttp\\Ring\\": "src/" + "GuzzleHttp\\Stream\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1017,39 +1145,49 @@ "homepage": "https://github.com/mtdowling" } ], - "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.", - "abandoned": true, - "time": "2018-07-31T13:22:33+00:00" + "description": "Fork of guzzle/streams (abandoned) to be used with elasticsearch-php", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "Guzzle", + "stream" + ], + "time": "2020-02-14T23:11:50+00:00" }, { - "name": "guzzlehttp/streams", - "version": "3.0.0", + "name": "ezimuel/ringphp", + "version": "1.1.2", "source": { "type": "git", - "url": "https://github.com/guzzle/streams.git", - "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5" + "url": "https://github.com/ezimuel/ringphp.git", + "reference": "0b78f89d8e0bb9e380046c31adfa40347e9f663b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", - "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", + "url": "https://api.github.com/repos/ezimuel/ringphp/zipball/0b78f89d8e0bb9e380046c31adfa40347e9f663b", + "reference": "0b78f89d8e0bb9e380046c31adfa40347e9f663b", "shasum": "" }, "require": { - "php": ">=5.4.0" + "ezimuel/guzzlestreams": "^3.0.1", + "php": ">=5.4.0", + "react/promise": "~2.0" }, "require-dev": { + "ext-curl": "*", "phpunit/phpunit": "~4.0" }, + "suggest": { + "ext-curl": "Guzzle will use specific adapters if cURL is present" + }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "1.1-dev" } }, "autoload": { "psr-4": { - "GuzzleHttp\\Stream\\": "src/" + "GuzzleHttp\\Ring\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1063,14 +1201,8 @@ "homepage": "https://github.com/mtdowling" } ], - "description": "Provides a simple abstraction over streams of data", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "Guzzle", - "stream" - ], - "abandoned": true, - "time": "2014-10-12T19:18:40+00:00" + "description": "Fork of guzzle/RingPHP (abandoned) to be used with elasticsearch-php", + "time": "2020-02-14T23:51:21+00:00" }, { "name": "lambdish/phunctional", @@ -1248,16 +1380,16 @@ }, { "name": "laminas/laminas-zendframework-bridge", - "version": "1.0.1", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/laminas/laminas-zendframework-bridge.git", - "reference": "0fb9675b84a1666ab45182b6c5b29956921e818d" + "reference": "fcd87520e4943d968557803919523772475e8ea3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/0fb9675b84a1666ab45182b6c5b29956921e818d", - "reference": "0fb9675b84a1666ab45182b6c5b29956921e818d", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/fcd87520e4943d968557803919523772475e8ea3", + "reference": "fcd87520e4943d968557803919523772475e8ea3", "shasum": "" }, "require": { @@ -1296,24 +1428,30 @@ "laminas", "zf" ], - "time": "2020-01-07T22:58:31+00:00" + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-05-20T16:45:56+00:00" }, { "name": "monolog/monolog", - "version": "2.0.2", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8" + "reference": "38914429aac460e8e4616c8cb486ecb40ec90bb1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c861fcba2ca29404dc9e617eedd9eff4616986b8", - "reference": "c861fcba2ca29404dc9e617eedd9eff4616986b8", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/38914429aac460e8e4616c8cb486ecb40ec90bb1", + "reference": "38914429aac460e8e4616c8cb486ecb40ec90bb1", "shasum": "" }, "require": { - "php": "^7.2", + "php": ">=7.2", "psr/log": "^1.0.1" }, "provide": { @@ -1324,11 +1462,11 @@ "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^6.0", "graylog2/gelf-php": "^1.4.2", - "jakub-onderka/php-parallel-lint": "^0.9", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", + "php-parallel-lint/php-parallel-lint": "^1.0", "phpspec/prophecy": "^1.6.1", - "phpunit/phpunit": "^8.3", + "phpunit/phpunit": "^8.5", "predis/predis": "^1.1", "rollbar/rollbar": "^1.3", "ruflin/elastica": ">=0.90 <3.0", @@ -1377,39 +1515,49 @@ "logging", "psr-3" ], - "time": "2019-12-20T14:22:59+00:00" + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2020-05-22T08:12:19+00:00" }, { "name": "ocramius/package-versions", - "version": "1.5.1", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/Ocramius/PackageVersions.git", - "reference": "1d32342b8c1eb27353c8887c366147b4c2da673c" + "reference": "421679846270a5772534828013a93be709fb13df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/1d32342b8c1eb27353c8887c366147b4c2da673c", - "reference": "1d32342b8c1eb27353c8887c366147b4c2da673c", + "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/421679846270a5772534828013a93be709fb13df", + "reference": "421679846270a5772534828013a93be709fb13df", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0.0", - "php": "^7.3.0" + "composer-plugin-api": "^1.1.0 || ^2.0", + "php": "^7.4.0" }, "require-dev": { - "composer/composer": "^1.8.6", - "doctrine/coding-standard": "^6.0.0", - "ext-zip": "*", - "infection/infection": "^0.13.4", - "phpunit/phpunit": "^8.2.5", - "vimeo/psalm": "^3.4.9" + "composer/composer": "^1.9.3 || ^2.0@dev", + "doctrine/coding-standard": "^7.0.2", + "ext-zip": "^1.15.0", + "infection/infection": "^0.15.3", + "phpunit/phpunit": "^9.0.1", + "vimeo/psalm": "^3.9.3" }, "type": "composer-plugin", "extra": { "class": "PackageVersions\\Installer", "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "1.99.x-dev" } }, "autoload": { @@ -1428,27 +1576,37 @@ } ], "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", - "time": "2019-07-17T15:49:50+00:00" + "funding": [ + { + "url": "https://github.com/Ocramius", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ocramius/package-versions", + "type": "tidelift" + } + ], + "time": "2020-04-06T17:43:35+00:00" }, { "name": "ocramius/proxy-manager", - "version": "2.6.1", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/Ocramius/ProxyManager.git", - "reference": "dec37bfb3c3594440ee4fa263494189344787d22" + "reference": "ac1dd414fd114cfc0da9930e0ab46063c2f5e62a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/dec37bfb3c3594440ee4fa263494189344787d22", - "reference": "dec37bfb3c3594440ee4fa263494189344787d22", + "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/ac1dd414fd114cfc0da9930e0ab46063c2f5e62a", + "reference": "ac1dd414fd114cfc0da9930e0ab46063c2f5e62a", "shasum": "" }, "require": { "laminas/laminas-code": "^3.4.1", - "ocramius/package-versions": "^1.5.1", - "php": "7.4.*", - "webimpress/safe-writer": "^2.0" + "ocramius/package-versions": "^1.8.0", + "php": "~7.4.1", + "webimpress/safe-writer": "^2.0.1" }, "conflict": { "doctrine/annotations": "<1.6.1", @@ -1458,15 +1616,13 @@ "require-dev": { "doctrine/coding-standard": "^6.0.0", "ext-phar": "*", - "infection/infection": "^0.15.0", - "mikey179/vfsstream": "^1.6.8", - "nikic/php-parser": "^4.3.0", - "phpbench/phpbench": "^0.16.10", - "phpunit/phpunit": "^8.5.1", + "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.3", - "symfony/console": "^4.4.2", - "vimeo/psalm": "3.7.0" + "squizlabs/php_codesniffer": "^3.5.4", + "vimeo/psalm": "^3.11.1" }, "suggest": { "laminas/laminas-json": "To have the JsonRpc adapter (Remote Object feature)", @@ -1505,7 +1661,17 @@ "proxy pattern", "service proxies" ], - "time": "2020-01-27T09:25:51+00:00" + "funding": [ + { + "url": "https://github.com/Ocramius", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ocramius/proxy-manager", + "type": "tidelift" + } + ], + "time": "2020-04-13T14:42:16+00:00" }, { "name": "paragonie/random_compat", @@ -1695,16 +1861,16 @@ }, { "name": "psr/log", - "version": "1.1.2", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", "shasum": "" }, "require": { @@ -1738,20 +1904,20 @@ "psr", "psr-3" ], - "time": "2019-11-01T11:05:21+00:00" + "time": "2020-03-23T09:12:05+00:00" }, { "name": "ramsey/uuid", - "version": "3.9.2", + "version": "3.9.3", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "7779489a47d443f845271badbdcedfe4df8e06fb" + "reference": "7e1633a6964b48589b142d60542f9ed31bd37a92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/7779489a47d443f845271badbdcedfe4df8e06fb", - "reference": "7779489a47d443f845271badbdcedfe4df8e06fb", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/7e1633a6964b48589b142d60542f9ed31bd37a92", + "reference": "7e1633a6964b48589b142d60542f9ed31bd37a92", "shasum": "" }, "require": { @@ -1825,27 +1991,27 @@ "identifier", "uuid" ], - "time": "2019-12-17T08:18:51+00:00" + "time": "2020-02-21T04:36:14+00:00" }, { "name": "react/promise", - "version": "v2.7.1", + "version": "v2.8.0", "source": { "type": "git", "url": "https://github.com/reactphp/promise.git", - "reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d" + "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/31ffa96f8d2ed0341a57848cbb84d88b89dd664d", - "reference": "31ffa96f8d2ed0341a57848cbb84d88b89dd664d", + "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4", + "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4", "shasum": "" }, "require": { "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "~4.8" + "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36" }, "type": "library", "autoload": { @@ -1871,27 +2037,98 @@ "promise", "promises" ], - "time": "2019-01-07T21:25:54+00:00" + "time": "2020-05-12T15:16:56+00:00" + }, + { + "name": "symfony/amqp-messenger", + "version": "v5.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/amqp-messenger.git", + "reference": "f8bc975215edd516e25c9ea2b82a3026952bd8bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/amqp-messenger/zipball/f8bc975215edd516e25c9ea2b82a3026952bd8bc", + "reference": "f8bc975215edd516e25c9ea2b82a3026952bd8bc", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/messenger": "^5.1" + }, + "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" + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "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", + "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": "2020-05-20T17:43:50+00:00" }, { "name": "symfony/cache", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "b503e72c8e2fa55eed9e2d3dd6a166f3eaaabb9a" + "reference": "653b1d1cefffedb67ed1932db59c0bb344adf088" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/b503e72c8e2fa55eed9e2d3dd6a166f3eaaabb9a", - "reference": "b503e72c8e2fa55eed9e2d3dd6a166f3eaaabb9a", + "url": "https://api.github.com/repos/symfony/cache/zipball/653b1d1cefffedb67ed1932db59c0bb344adf088", + "reference": "653b1d1cefffedb67ed1932db59c0bb344adf088", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/cache": "~1.0", "psr/log": "~1.0", "symfony/cache-contracts": "^1.1.7|^2", + "symfony/polyfill-php80": "^1.15", "symfony/service-contracts": "^1.1|^2", "symfony/var-exporter": "^4.4|^5.0" }, @@ -1908,9 +2145,9 @@ }, "require-dev": { "cache/integration-tests": "dev-master", - "doctrine/cache": "~1.6", - "doctrine/dbal": "~2.5", - "predis/predis": "~1.1", + "doctrine/cache": "^1.6", + "doctrine/dbal": "^2.5|^3.0", + "predis/predis": "^1.1", "psr/simple-cache": "^1.0", "symfony/config": "^4.4|^5.0", "symfony/dependency-injection": "^4.4|^5.0", @@ -1919,7 +2156,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -1950,24 +2187,38 @@ "caching", "psr6" ], - "time": "2020-01-10T21:57:37+00:00" + "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": "2020-05-28T09:10:22+00:00" }, { "name": "symfony/cache-contracts", - "version": "v2.0.1", + "version": "v2.1.2", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "23ed8bfc1a4115feca942cb5f1aacdf3dcdf3c16" + "reference": "87c92f62c494626598e9148208aaa6d1716b8e3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/23ed8bfc1a4115feca942cb5f1aacdf3dcdf3c16", - "reference": "23ed8bfc1a4115feca942cb5f1aacdf3dcdf3c16", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/87c92f62c494626598e9148208aaa6d1716b8e3c", + "reference": "87c92f62c494626598e9148208aaa6d1716b8e3c", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/cache": "^1.0" }, "suggest": { @@ -1976,7 +2227,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -2008,26 +2259,42 @@ "interoperability", "standards" ], - "time": "2019-11-18T17:27:11+00:00" + "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": "2020-05-20T17:43:50+00:00" }, { "name": "symfony/config", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "7640c6704f56bf64045066bc5d93fd9d664baa63" + "reference": "b8623ef3d99fe62a34baf7a111b576216965f880" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/7640c6704f56bf64045066bc5d93fd9d664baa63", - "reference": "7640c6704f56bf64045066bc5d93fd9d664baa63", + "url": "https://api.github.com/repos/symfony/config/zipball/b8623ef3d99fe62a34baf7a111b576216965f880", + "reference": "b8623ef3d99fe62a34baf7a111b576216965f880", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", "symfony/filesystem": "^4.4|^5.0", - "symfony/polyfill-ctype": "~1.8" + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php80": "^1.15" }, "conflict": { "symfony/finder": "<4.4" @@ -2045,7 +2312,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -2072,30 +2339,47 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2020-01-04T14:08:26+00:00" + "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": "2020-05-23T13:08:13+00:00" }, { "name": "symfony/console", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "345ab6ecb456b5147ea3b3271d7f1f00aadfd257" + "reference": "00bed125812716d09b163f0727ef33bb49bf3448" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/345ab6ecb456b5147ea3b3271d7f1f00aadfd257", - "reference": "345ab6ecb456b5147ea3b3271d7f1f00aadfd257", + "url": "https://api.github.com/repos/symfony/console/zipball/00bed125812716d09b163f0727ef33bb49bf3448", + "reference": "00bed125812716d09b163f0727ef33bb49bf3448", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php73": "^1.8", - "symfony/service-contracts": "^1.1|^2" + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2", + "symfony/string": "^5.1" }, "conflict": { "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", "symfony/event-dispatcher": "<4.4", "symfony/lock": "<4.4", "symfony/process": "<4.4" @@ -2121,7 +2405,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -2148,29 +2432,45 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2020-01-19T11:13:19+00:00" + "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": "2020-05-30T20:35:19+00:00" }, { "name": "symfony/dependency-injection", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "5a56807650c7258bbcc4a15a020904958c70247e" + "reference": "6a6791e9584273b32eeb01790da4c7446d87a621" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/5a56807650c7258bbcc4a15a020904958c70247e", - "reference": "5a56807650c7258bbcc4a15a020904958c70247e", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/6a6791e9584273b32eeb01790da4c7446d87a621", + "reference": "6a6791e9584273b32eeb01790da4c7446d87a621", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/container": "^1.0", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.15", "symfony/service-contracts": "^1.1.6|^2" }, "conflict": { - "symfony/config": "<5.0", + "symfony/config": "<5.1", "symfony/finder": "<4.4", "symfony/proxy-manager-bridge": "<4.4", "symfony/yaml": "<4.4" @@ -2180,7 +2480,7 @@ "symfony/service-implementation": "1.0" }, "require-dev": { - "symfony/config": "^5.0", + "symfony/config": "^5.1", "symfony/expression-language": "^4.4|^5.0", "symfony/yaml": "^4.4|^5.0" }, @@ -2194,7 +2494,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -2221,24 +2521,174 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2020-01-21T08:40:24+00:00" - }, + "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": "2020-05-30T20:35:19+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337", + "reference": "dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "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": "2020-05-27T08:34:37+00:00" + }, + { + "name": "symfony/doctrine-messenger", + "version": "v5.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/doctrine-messenger.git", + "reference": "f0f0bae7249223973d768a4afdc9bd6388e7a055" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/f0f0bae7249223973d768a4afdc9bd6388e7a055", + "reference": "f0f0bae7249223973d768a4afdc9bd6388e7a055", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/messenger": "^5.1", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "doctrine/persistence": "<1.3" + }, + "require-dev": { + "doctrine/dbal": "^2.6|^3.0", + "doctrine/orm": "^2.6.3", + "doctrine/persistence": "^1.3", + "symfony/property-access": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "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", + "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": "2020-05-29T03:19:22+00:00" + }, { "name": "symfony/dotenv", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "8331da80cc35fe903db0ff142376d518804ff1b1" + "reference": "42d2a18597f4c7cafc0e25b1ad6a1cbb4f2caf05" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/8331da80cc35fe903db0ff142376d518804ff1b1", - "reference": "8331da80cc35fe903db0ff142376d518804ff1b1", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/42d2a18597f4c7cafc0e25b1ad6a1cbb4f2caf05", + "reference": "42d2a18597f4c7cafc0e25b1ad6a1cbb4f2caf05", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1" }, "require-dev": { "symfony/process": "^4.4|^5.0" @@ -2246,7 +2696,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -2278,35 +2728,51 @@ "env", "environment" ], - "time": "2020-01-08T17:33:29+00:00" + "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": "2020-05-28T08:20:44+00:00" }, { "name": "symfony/error-handler", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "95f64c1d7dfb86a722dc9d278d0edf5176eff16e" + "reference": "7d0b927b9d3dc41d7d46cda38cbfcd20cdcbb896" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/95f64c1d7dfb86a722dc9d278d0edf5176eff16e", - "reference": "95f64c1d7dfb86a722dc9d278d0edf5176eff16e", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/7d0b927b9d3dc41d7d46cda38cbfcd20cdcbb896", + "reference": "7d0b927b9d3dc41d7d46cda38cbfcd20cdcbb896", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/log": "^1.0", + "symfony/polyfill-php80": "^1.15", "symfony/var-dumper": "^4.4|^5.0" }, "require-dev": { + "symfony/deprecation-contracts": "^2.1", "symfony/http-kernel": "^4.4|^5.0", "symfony/serializer": "^4.4|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -2333,25 +2799,41 @@ ], "description": "Symfony ErrorHandler Component", "homepage": "https://symfony.com", - "time": "2020-01-08T17:33:29+00:00" + "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": "2020-05-30T20:35:19+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "4a7a8cdca1120c091b4797f0e5bba69c1e783224" + "reference": "cc0d059e2e997e79ca34125a52f3e33de4424ac7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4a7a8cdca1120c091b4797f0e5bba69c1e783224", - "reference": "4a7a8cdca1120c091b4797f0e5bba69c1e783224", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/cc0d059e2e997e79ca34125a52f3e33de4424ac7", + "reference": "cc0d059e2e997e79ca34125a52f3e33de4424ac7", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/event-dispatcher-contracts": "^2" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/event-dispatcher-contracts": "^2", + "symfony/polyfill-php80": "^1.15" }, "conflict": { "symfony/dependency-injection": "<4.4" @@ -2376,7 +2858,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -2403,24 +2885,38 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2020-01-10T21:57:37+00:00" + "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": "2020-05-20T17:43:50+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.0.1", + "version": "v2.1.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "af23c2584d4577d54661c434446fb8fbed6025dd" + "reference": "405952c4e90941a17e52ef7489a2bd94870bb290" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/af23c2584d4577d54661c434446fb8fbed6025dd", - "reference": "af23c2584d4577d54661c434446fb8fbed6025dd", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/405952c4e90941a17e52ef7489a2bd94870bb290", + "reference": "405952c4e90941a17e52ef7489a2bd94870bb290", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/event-dispatcher": "^1" }, "suggest": { @@ -2429,7 +2925,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -2461,30 +2957,44 @@ "interoperability", "standards" ], - "time": "2019-11-18T17:27:11+00:00" + "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": "2020-05-20T17:43:50+00:00" }, { "name": "symfony/filesystem", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "3afadc0f57cd74f86379d073e694b0f2cda2a88c" + "reference": "6e4320f06d5f2cce0d96530162491f4465179157" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/3afadc0f57cd74f86379d073e694b0f2cda2a88c", - "reference": "3afadc0f57cd74f86379d073e694b0f2cda2a88c", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/6e4320f06d5f2cce0d96530162491f4465179157", + "reference": "6e4320f06d5f2cce0d96530162491f4465179157", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -2511,29 +3021,43 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2020-01-21T08:40:24+00:00" + "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": "2020-05-30T20:35:19+00:00" }, { "name": "symfony/finder", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "4176e7cb846fe08f32518b7e0ed8462e2db8d9bb" + "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/4176e7cb846fe08f32518b7e0ed8462e2db8d9bb", - "reference": "4176e7cb846fe08f32518b7e0ed8462e2db8d9bb", + "url": "https://api.github.com/repos/symfony/finder/zipball/4298870062bfc667cb78d2b379be4bf5dec5f187", + "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -2560,46 +3084,62 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2020-01-04T14:08:26+00:00" + "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": "2020-05-20T17:43:50+00:00" }, { "name": "symfony/framework-bundle", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "cc59bc797b77c6ecccd6c87d9052f6b3eb6a8d63" + "reference": "db39e29cf3a99692390e6d18fdc57d42e9e5a3c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/cc59bc797b77c6ecccd6c87d9052f6b3eb6a8d63", - "reference": "cc59bc797b77c6ecccd6c87d9052f6b3eb6a8d63", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/db39e29cf3a99692390e6d18fdc57d42e9e5a3c9", + "reference": "db39e29cf3a99692390e6d18fdc57d42e9e5a3c9", "shasum": "" }, "require": { "ext-xml": "*", - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/cache": "^4.4|^5.0", "symfony/config": "^5.0", - "symfony/dependency-injection": "^5.0.1", + "symfony/dependency-injection": "^5.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": "^4.4|^5.0", "symfony/http-kernel": "^5.0", "symfony/polyfill-mbstring": "~1.0", - "symfony/routing": "^5.0" + "symfony/polyfill-php80": "^1.15", + "symfony/routing": "^5.1" }, "conflict": { "doctrine/persistence": "<1.3", "phpdocumentor/reflection-docblock": "<3.0", "phpdocumentor/type-resolver": "<0.2.1", "phpunit/phpunit": "<5.4.3", - "symfony/asset": "<4.4", + "symfony/asset": "<5.1", "symfony/browser-kit": "<4.4", "symfony/console": "<4.4", "symfony/dom-crawler": "<4.4", - "symfony/dotenv": "<4.4", + "symfony/dotenv": "<5.1", "symfony/form": "<4.4", "symfony/http-client": "<4.4", "symfony/lock": "<4.4", @@ -2621,12 +3161,12 @@ "doctrine/cache": "~1.0", "paragonie/sodium_compat": "^1.8", "phpdocumentor/reflection-docblock": "^3.0|^4.0", - "symfony/asset": "^4.4|^5.0", + "symfony/asset": "^5.1", "symfony/browser-kit": "^4.4|^5.0", "symfony/console": "^4.4|^5.0", "symfony/css-selector": "^4.4|^5.0", "symfony/dom-crawler": "^4.4|^5.0", - "symfony/dotenv": "^4.4|^5.0", + "symfony/dotenv": "^5.1", "symfony/expression-language": "^4.4|^5.0", "symfony/form": "^4.4|^5.0", "symfony/http-client": "^4.4|^5.0", @@ -2637,11 +3177,12 @@ "symfony/polyfill-intl-icu": "~1.0", "symfony/process": "^4.4|^5.0", "symfony/property-info": "^4.4|^5.0", + "symfony/security-bundle": "^5.1", "symfony/security-csrf": "^4.4|^5.0", "symfony/security-http": "^4.4|^5.0", "symfony/serializer": "^4.4|^5.0", "symfony/stopwatch": "^4.4|^5.0", - "symfony/string": "~5.0.0", + "symfony/string": "^5.0", "symfony/translation": "^5.0", "symfony/twig-bundle": "^4.4|^5.0", "symfony/validator": "^4.4|^5.0", @@ -2663,7 +3204,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -2690,35 +3231,55 @@ ], "description": "Symfony FrameworkBundle", "homepage": "https://symfony.com", - "time": "2020-01-21T08:40:24+00:00" + "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": "2020-05-25T12:33:44+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.0.7", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "26fb006a2c7b6cdd23d52157b05f8414ffa417b6" + "reference": "e0d853bddc2b2cfb0d67b0b4496c03fffe1d37fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/26fb006a2c7b6cdd23d52157b05f8414ffa417b6", - "reference": "26fb006a2c7b6cdd23d52157b05f8414ffa417b6", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e0d853bddc2b2cfb0d67b0b4496c03fffe1d37fa", + "reference": "e0d853bddc2b2cfb0d67b0b4496c03fffe1d37fa", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/mime": "^4.4|^5.0", - "symfony/polyfill-mbstring": "~1.1" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.15" }, "require-dev": { "predis/predis": "~1.0", - "symfony/expression-language": "^4.4|^5.0" + "symfony/cache": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -2745,35 +3306,52 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2020-03-30T14:14:32+00:00" + "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": "2020-05-24T12:18:07+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "9e31e5e11cbe038cbb853beb3e3bb6e4f2500259" + "reference": "75ff5327a7d6ede3ccc2fac3ebca9ed776b3e85c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9e31e5e11cbe038cbb853beb3e3bb6e4f2500259", - "reference": "9e31e5e11cbe038cbb853beb3e3bb6e4f2500259", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/75ff5327a7d6ede3ccc2fac3ebca9ed776b3e85c", + "reference": "75ff5327a7d6ede3ccc2fac3ebca9ed776b3e85c", "shasum": "" }, "require": { - "php": "^7.2.5", + "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-foundation": "^4.4|^5.0", "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php73": "^1.9" + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.15" }, "conflict": { "symfony/browser-kit": "<4.4", "symfony/cache": "<5.0", "symfony/config": "<5.0", + "symfony/console": "<4.4", "symfony/dependency-injection": "<4.4", "symfony/doctrine-bridge": "<5.0", "symfony/form": "<5.0", @@ -2814,7 +3392,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -2841,35 +3419,51 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2020-01-21T13:29:58+00:00" + "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": "2020-05-31T06:14:18+00:00" }, { "name": "symfony/messenger", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/messenger.git", - "reference": "15359794dcadcc90f0713c3506e03187ea89117e" + "reference": "4e668843aee9f035baaefbac6961a52d2b293928" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/messenger/zipball/15359794dcadcc90f0713c3506e03187ea89117e", - "reference": "15359794dcadcc90f0713c3506e03187ea89117e", + "url": "https://api.github.com/repos/symfony/messenger/zipball/4e668843aee9f035baaefbac6961a52d2b293928", + "reference": "4e668843aee9f035baaefbac6961a52d2b293928", "shasum": "" }, "require": { - "php": "^7.2.5", - "psr/log": "~1.0" + "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" }, "conflict": { - "doctrine/persistence": "<1.3", "symfony/event-dispatcher": "<4.4", "symfony/framework-bundle": "<4.4", "symfony/http-kernel": "<4.4" }, "require-dev": { - "doctrine/dbal": "^2.6", - "doctrine/persistence": "^1.3", "psr/cache": "~1.0", "symfony/console": "^4.4|^5.0", "symfony/dependency-injection": "^4.4|^5.0", @@ -2888,7 +3482,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -2915,46 +3509,54 @@ ], "description": "Symfony Messenger Component", "homepage": "https://symfony.com", - "time": "2020-01-21T10:12:04+00:00" + "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": "2020-05-24T08:49:09+00:00" }, { - "name": "symfony/mime", - "version": "v5.0.7", + "name": "symfony/polyfill-ctype", + "version": "v1.17.0", "source": { "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "481b7d6da88922fb1e0d86a943987722b08f3955" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/481b7d6da88922fb1e0d86a943987722b08f3955", - "reference": "481b7d6da88922fb1e0d86a943987722b08f3955", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9", + "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "conflict": { - "symfony/mailer": "<4.4" + "php": ">=5.3.3" }, - "require-dev": { - "egulias/email-validator": "^2.1.10", - "symfony/dependency-injection": "^4.4|^5.0" + "suggest": { + "ext-ctype": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "1.17-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Mime\\": "" + "Symfony\\Polyfill\\Ctype\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -2963,51 +3565,67 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "A library to manipulate MIME messages", + "description": "Symfony polyfill for ctype functions", "homepage": "https://symfony.com", "keywords": [ - "mime", - "mime-type" + "compatibility", + "ctype", + "polyfill", + "portable" ], - "time": "2020-03-27T16:56:45+00:00" + "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": "2020-05-12T16:14:59+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.13.1", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.17.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "e094b0770f7833fdf257e6ba4775be4e258230b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f8f0b461be3385e56d6de3dbb5a0df24c0c275e3", - "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e094b0770f7833fdf257e6ba4775be4e258230b2", + "reference": "e094b0770f7833fdf257e6ba4775be4e258230b2", "shasum": "" }, "require": { "php": ">=5.3.3" }, "suggest": { - "ext-ctype": "For best performance" + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.17-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" }, "files": [ "bootstrap.php" @@ -3019,42 +3637,56 @@ ], "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for ctype functions", + "description": "Symfony polyfill for intl's grapheme_* functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "ctype", + "grapheme", + "intl", "polyfill", - "portable" + "portable", + "shim" + ], + "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": "2019-11-27T13:56:44+00:00" + "time": "2020-05-12T16:47:27+00:00" }, { - "name": "symfony/polyfill-intl-idn", - "version": "v1.15.0", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.17.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "1357b1d168eb7f68ad6a134838e46b0b159444a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", - "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/1357b1d168eb7f68ad6a134838e46b0b159444a9", + "reference": "1357b1d168eb7f68ad6a134838e46b0b159444a9", "shasum": "" }, "require": { - "php": ">=5.3.3", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.10" + "php": ">=5.3.3" }, "suggest": { "ext-intl": "For best performance" @@ -3062,15 +3694,18 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" }, "files": [ "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3079,38 +3714,52 @@ ], "authors": [ { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "description": "Symfony polyfill for intl's Normalizer class and related functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "idn", "intl", + "normalizer", "polyfill", "portable", "shim" ], - "time": "2020-03-09T19:04:49+00:00" + "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": "2020-05-12T16:14:59+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.15.0", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac" + "reference": "fa79b11539418b02fc5e1897267673ba2c19419c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac", - "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c", + "reference": "fa79b11539418b02fc5e1897267673ba2c19419c", "shasum": "" }, "require": { @@ -3122,7 +3771,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" } }, "autoload": { @@ -3156,20 +3805,34 @@ "portable", "shim" ], - "time": "2020-03-09T19:04:49+00:00" + "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": "2020-05-12T16:47:27+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.15.0", + "name": "symfony/polyfill-php73", + "version": "v1.17.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "37b0976c78b94856543260ce09b460a7bc852747" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/37b0976c78b94856543260ce09b460a7bc852747", - "reference": "37b0976c78b94856543260ce09b460a7bc852747", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a760d8964ff79ab9bf057613a5808284ec852ccc", + "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc", "shasum": "" }, "require": { @@ -3178,15 +3841,18 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.15-dev" + "dev-master": "1.17-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" + "Symfony\\Polyfill\\Php73\\": "" }, "files": [ "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3203,7 +3869,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -3211,34 +3877,48 @@ "portable", "shim" ], - "time": "2020-02-27T09:26:54+00:00" + "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": "2020-05-12T16:47:27+00:00" }, { - "name": "symfony/polyfill-php73", - "version": "v1.13.1", + "name": "symfony/polyfill-php80", + "version": "v1.17.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "4b0e2222c55a25b4541305a053013d5647d3a25f" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "5e30b2799bc1ad68f7feb62b60a73743589438dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/4b0e2222c55a25b4541305a053013d5647d3a25f", - "reference": "4b0e2222c55a25b4541305a053013d5647d3a25f", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/5e30b2799bc1ad68f7feb62b60a73743589438dd", + "reference": "5e30b2799bc1ad68f7feb62b60a73743589438dd", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.17-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" + "Symfony\\Polyfill\\Php80\\": "" }, "files": [ "bootstrap.php" @@ -3252,6 +3932,10 @@ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -3261,7 +3945,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -3269,24 +3953,108 @@ "portable", "shim" ], - "time": "2019-11-27T16:25:15+00:00" + "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": "2020-05-12T16:47:27+00:00" + }, + { + "name": "symfony/redis-messenger", + "version": "v5.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/redis-messenger.git", + "reference": "d37c6a267d79b0e0dff5e2b96c5f07886353d7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/redis-messenger/zipball/d37c6a267d79b0e0dff5e2b96c5f07886353d7a2", + "reference": "d37c6a267d79b0e0dff5e2b96c5f07886353d7a2", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/messenger": "^5.1" + }, + "require-dev": { + "symfony/property-access": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "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", + "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": "2020-05-20T17:43:50+00:00" }, { "name": "symfony/routing", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "7da33371d8ecfed6c9d93d87c73749661606f803" + "reference": "95cf30145b26c758d6d832aa2d0de3128978d556" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/7da33371d8ecfed6c9d93d87c73749661606f803", - "reference": "7da33371d8ecfed6c9d93d87c73749661606f803", + "url": "https://api.github.com/repos/symfony/routing/zipball/95cf30145b26c758d6d832aa2d0de3128978d556", + "reference": "95cf30145b26c758d6d832aa2d0de3128978d556", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.15" }, "conflict": { "symfony/config": "<5.0", @@ -3312,7 +4080,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -3345,24 +4113,38 @@ "uri", "url" ], - "time": "2020-01-04T14:08:26+00:00" + "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": "2020-05-30T20:35:19+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.0.1", + "version": "v2.1.2", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "144c5e51266b281231e947b51223ba14acf1a749" + "reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749", - "reference": "144c5e51266b281231e947b51223ba14acf1a749", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/66a8f0957a3ca54e4f724e49028ab19d75a8918b", + "reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/container": "^1.0" }, "suggest": { @@ -3371,7 +4153,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -3403,24 +4185,123 @@ "interoperability", "standards" ], - "time": "2019-11-18T17:27:11+00:00" + "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": "2020-05-20T17:43:50+00:00" + }, + { + "name": "symfony/string", + "version": "v5.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "90c2a5103f07feb19069379f3abdcdbacc7753a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/90c2a5103f07feb19069379f3abdcdbacc7753a9", + "reference": "90c2a5103f07feb19069379f3abdcdbacc7753a9", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "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" + }, + "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" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony String component", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "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": "2020-05-20T17:43:50+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.0.1", + "version": "v2.1.2", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed" + "reference": "e5ca07c8f817f865f618aa072c2fe8e0e637340e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/8cc682ac458d75557203b2f2f14b0b92e1c744ed", - "reference": "8cc682ac458d75557203b2f2f14b0b92e1c744ed", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e5ca07c8f817f865f618aa072c2fe8e0e637340e", + "reference": "e5ca07c8f817f865f618aa072c2fe8e0e637340e", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5" }, "suggest": { "symfony/translation-implementation": "" @@ -3428,7 +4309,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -3460,30 +4341,45 @@ "interoperability", "standards" ], - "time": "2019-11-18T17:27:11+00:00" + "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": "2020-05-20T17:43:50+00:00" }, { "name": "symfony/twig-bridge", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "39cc296147e010af3c13d7734a21528426bd46ff" + "reference": "04f57638e591b23d06f72dca2f123605dbbe3a75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/39cc296147e010af3c13d7734a21528426bd46ff", - "reference": "39cc296147e010af3c13d7734a21528426bd46ff", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/04f57638e591b23d06f72dca2f123605dbbe3a75", + "reference": "04f57638e591b23d06f72dca2f123605dbbe3a75", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15", "symfony/translation-contracts": "^1.1|^2", "twig/twig": "^2.10|^3.0" }, "conflict": { "symfony/console": "<4.4", - "symfony/form": "<5.0", + "symfony/form": "<5.1", "symfony/http-foundation": "<4.4", "symfony/http-kernel": "<4.4", "symfony/translation": "<5.0", @@ -3496,7 +4392,7 @@ "symfony/dependency-injection": "^4.4|^5.0", "symfony/expression-language": "^4.4|^5.0", "symfony/finder": "^4.4|^5.0", - "symfony/form": "^5.0", + "symfony/form": "^5.1", "symfony/http-foundation": "^4.4|^5.0", "symfony/http-kernel": "^4.4|^5.0", "symfony/mime": "^4.4|^5.0", @@ -3534,7 +4430,7 @@ "type": "symfony-bridge", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -3555,30 +4451,44 @@ "email": "fabien@symfony.com" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Twig Bridge", + "homepage": "https://symfony.com", + "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" } ], - "description": "Symfony Twig Bridge", - "homepage": "https://symfony.com", - "time": "2020-01-08T17:33:29+00:00" + "time": "2020-05-30T20:35:19+00:00" }, { "name": "symfony/twig-bundle", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "1bd6192a7742d7807b9ecd0eff347ea549a19390" + "reference": "8898ef8aea8fa48638e15ce00c7c6318ce570ce1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/1bd6192a7742d7807b9ecd0eff347ea549a19390", - "reference": "1bd6192a7742d7807b9ecd0eff347ea549a19390", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/8898ef8aea8fa48638e15ce00c7c6318ce570ce1", + "reference": "8898ef8aea8fa48638e15ce00c7c6318ce570ce1", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/config": "^4.4|^5.0", "symfony/http-foundation": "^4.4|^5.0", "symfony/http-kernel": "^5.0", @@ -3609,7 +4519,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -3636,32 +4546,48 @@ ], "description": "Symfony TwigBundle", "homepage": "https://symfony.com", - "time": "2020-01-04T14:08:26+00:00" + "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": "2020-05-20T17:43:50+00:00" }, { "name": "symfony/validator", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "bad9814bf042b01b326c77cbb7740a03e5667ccf" + "reference": "7a012b935dffe51d37ce001f62fbc6cb307d96df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/bad9814bf042b01b326c77cbb7740a03e5667ccf", - "reference": "bad9814bf042b01b326c77cbb7740a03e5667ccf", + "url": "https://api.github.com/repos/symfony/validator/zipball/7a012b935dffe51d37ce001f62fbc6cb307d96df", + "reference": "7a012b935dffe51d37ce001f62fbc6cb307d96df", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15", "symfony/translation-contracts": "^1.1|^2" }, "conflict": { "doctrine/lexer": "<1.0.2", "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/translation": "<4.4", @@ -3674,11 +4600,12 @@ "symfony/cache": "^4.4|^5.0", "symfony/config": "^4.4|^5.0", "symfony/dependency-injection": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", + "symfony/expression-language": "^5.1", "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": "^4.4|^5.0", "symfony/translation": "^4.4|^5.0", @@ -3690,7 +4617,7 @@ "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", + "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", @@ -3701,7 +4628,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -3728,25 +4655,40 @@ ], "description": "Symfony Validator Component", "homepage": "https://symfony.com", - "time": "2020-01-21T08:40:24+00:00" + "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": "2020-05-30T21:58:16+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "ccb1be566ae15f790020f917f06d1da0b04fe47b" + "reference": "46a942903059b0b05e601f00eb64179e05578c0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ccb1be566ae15f790020f917f06d1da0b04fe47b", - "reference": "ccb1be566ae15f790020f917f06d1da0b04fe47b", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/46a942903059b0b05e601f00eb64179e05578c0f", + "reference": "46a942903059b0b05e601f00eb64179e05578c0f", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15" }, "conflict": { "phpunit/phpunit": "<5.4.3", @@ -3769,7 +4711,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -3803,32 +4745,47 @@ "debug", "dump" ], - "time": "2020-01-04T14:08:26+00:00" + "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": "2020-05-30T20:35:19+00:00" }, { "name": "symfony/var-exporter", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "960f9ac0fdbd642461ed29d7717aeb2a94d428b9" + "reference": "76cf21551652b14d80abf13243159fbdf4bbef22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/960f9ac0fdbd642461ed29d7717aeb2a94d428b9", - "reference": "960f9ac0fdbd642461ed29d7717aeb2a94d428b9", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/76cf21551652b14d80abf13243159fbdf4bbef22", + "reference": "76cf21551652b14d80abf13243159fbdf4bbef22", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15" }, "require-dev": { - "symfony/var-dumper": "^4.4|^5.0" + "symfony/var-dumper": "^4.4.9|^5.0.9" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -3863,24 +4820,39 @@ "instantiate", "serialize" ], - "time": "2020-01-04T14:08:26+00:00" + "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": "2020-05-20T17:43:50+00:00" }, { "name": "symfony/yaml", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "69b44e3b8f90949aee2eb3aa9b86ceeb01cbf62a" + "reference": "ea342353a3ef4f453809acc4ebc55382231d4d23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/69b44e3b8f90949aee2eb3aa9b86ceeb01cbf62a", - "reference": "69b44e3b8f90949aee2eb3aa9b86ceeb01cbf62a", + "url": "https://api.github.com/repos/symfony/yaml/zipball/ea342353a3ef4f453809acc4ebc55382231d4d23", + "reference": "ea342353a3ef4f453809acc4ebc55382231d4d23", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-ctype": "~1.8" }, "conflict": { @@ -3892,10 +4864,13 @@ "suggest": { "symfony/console": "For validating YAML files using the lint command" }, + "bin": [ + "Resources/bin/yaml-lint" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -3922,20 +4897,34 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2020-01-21T11:12:28+00:00" + "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": "2020-05-20T17:43:50+00:00" }, { "name": "twig/twig", - "version": "v3.0.1", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "28f856a4c57eeb24485916e8a68403f41a133616" + "reference": "3b88ccd180a6b61ebb517aea3b1a8906762a1dc2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/28f856a4c57eeb24485916e8a68403f41a133616", - "reference": "28f856a4c57eeb24485916e8a68403f41a133616", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/3b88ccd180a6b61ebb517aea3b1a8906762a1dc2", + "reference": "3b88ccd180a6b61ebb517aea3b1a8906762a1dc2", "shasum": "" }, "require": { @@ -3984,28 +4973,28 @@ "keywords": [ "templating" ], - "time": "2019-12-28T07:17:28+00:00" + "time": "2020-02-11T15:33:47+00:00" }, { "name": "webimpress/safe-writer", - "version": "2.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/webimpress/safe-writer.git", - "reference": "d03bea3b98abe1d4c8b24cbebf524361ffaafee4" + "reference": "d6e879960febb307c112538997316371f1e95b12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webimpress/safe-writer/zipball/d03bea3b98abe1d4c8b24cbebf524361ffaafee4", - "reference": "d03bea3b98abe1d4c8b24cbebf524361ffaafee4", + "url": "https://api.github.com/repos/webimpress/safe-writer/zipball/d6e879960febb307c112538997316371f1e95b12", + "reference": "d6e879960febb307c112538997316371f1e95b12", "shasum": "" }, "require": { "php": "^7.2" }, "require-dev": { - "phpunit/phpunit": "^8.4.3", - "webimpress/coding-standard": "dev-develop" + "phpunit/phpunit": "^8.5.2 || ^9.0.1", + "webimpress/coding-standard": "^1.1.4" }, "type": "library", "extra": { @@ -4032,22 +5021,28 @@ "safe writer", "webimpress" ], - "time": "2019-11-27T19:40:53+00:00" + "funding": [ + { + "url": "https://github.com/michalbundyra", + "type": "github" + } + ], + "time": "2020-03-21T15:49:08+00:00" } ], "packages-dev": [ { "name": "behat/behat", - "version": "dev-master", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/Behat/Behat.git", - "reference": "7aa8161be7499ecc8b73ccc6dcd18f4062e6bf8e" + "reference": "9bfe195b4745c32e068af03fa4df9558b4916d30" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Behat/zipball/7aa8161be7499ecc8b73ccc6dcd18f4062e6bf8e", - "reference": "7aa8161be7499ecc8b73ccc6dcd18f4062e6bf8e", + "url": "https://api.github.com/repos/Behat/Behat/zipball/9bfe195b4745c32e068af03fa4df9558b4916d30", + "reference": "9bfe195b4745c32e068af03fa4df9558b4916d30", "shasum": "" }, "require": { @@ -4078,7 +5073,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.5.x-dev" + "dev-master": "3.6.x-dev" } }, "autoload": { @@ -4087,11 +5082,7 @@ "Behat\\Testwork\\": "src/Behat/Testwork/" } }, - "autoload-dev": { - "psr-4": { - "Behat\\Tests\\": "tests/" - } - }, + "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -4107,35 +5098,31 @@ "keywords": [ "Agile", "BDD", - "Examples", "ScenarioBDD", "Scrum", "StoryBDD", - "Symfony", "User story", "business", "development", "documentation", + "examples", + "symfony", "testing" ], - "support": { - "source": "https://github.com/Behat/Behat/tree/master", - "issues": "https://github.com/Behat/Behat/issues" - }, - "time": "2020-01-14T16:41:31+00:00" + "time": "2020-02-06T09:54:48+00:00" }, { "name": "behat/gherkin", - "version": "v4.6.0", + "version": "v4.6.2", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07" + "reference": "51ac4500c4dc30cbaaabcd2f25694299df666a31" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07", - "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/51ac4500c4dc30cbaaabcd2f25694299df666a31", + "reference": "51ac4500c4dc30cbaaabcd2f25694299df666a31", "shasum": "" }, "require": { @@ -4181,39 +5168,42 @@ "gherkin", "parser" ], - "time": "2019-01-16T14:22:17+00:00" + "time": "2020-03-17T14:03:26+00:00" }, { "name": "behat/mink", - "version": "v1.7.1", + "version": "v1.8.1", "source": { "type": "git", "url": "https://github.com/minkphp/Mink.git", - "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9" + "reference": "07c6a9fe3fa98c2de074b25d9ed26c22904e3887" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/Mink/zipball/e6930b9c74693dff7f4e58577e1b1743399f3ff9", - "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9", + "url": "https://api.github.com/repos/minkphp/Mink/zipball/07c6a9fe3fa98c2de074b25d9ed26c22904e3887", + "reference": "07c6a9fe3fa98c2de074b25d9ed26c22904e3887", "shasum": "" }, "require": { "php": ">=5.3.1", - "symfony/css-selector": "~2.1|~3.0" + "symfony/css-selector": "^2.7|^3.0|^4.0|^5.0" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7|~3.0" + "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" }, "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-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)" + "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)" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.7.x-dev" + "dev-master": "1.8.x-dev" } }, "autoload": { @@ -4239,31 +5229,32 @@ "testing", "web" ], - "time": "2016-03-05T08:26:18+00:00" + "time": "2020-03-11T15:45:53+00:00" }, { "name": "behat/mink-browserkit-driver", - "version": "dev-symfony-5", + "version": "v1.3.4", "source": { "type": "git", - "url": "https://github.com/ruudk/MinkBrowserKitDriver.git", - "reference": "3f4a066ad6ab001fd4f838aa8ec27b31e8afbadf" + "url": "https://github.com/minkphp/MinkBrowserKitDriver.git", + "reference": "e3b90840022ebcd544c7b394a3c9597ae242cbee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ruudk/MinkBrowserKitDriver/zipball/3f4a066ad6ab001fd4f838aa8ec27b31e8afbadf", - "reference": "3f4a066ad6ab001fd4f838aa8ec27b31e8afbadf", + "url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/e3b90840022ebcd544c7b394a3c9597ae242cbee", + "reference": "e3b90840022ebcd544c7b394a3c9597ae242cbee", "shasum": "" }, "require": { "behat/mink": "^1.7.1@dev", "php": ">=5.3.6", - "symfony/browser-kit": "~2.3|~3.0|~4.0|~5.0", - "symfony/dom-crawler": "~2.3|~3.0|~4.0|~5.0" + "symfony/browser-kit": "~2.3|~3.0|~4.0", + "symfony/dom-crawler": "~2.3|~3.0|~4.0" }, "require-dev": { "mink/driver-testsuite": "dev-master", - "symfony/http-kernel": "~2.3|~3.0|~4.0|~5.0" + "symfony/debug": "^2.7|^3.0|^4.0", + "symfony/http-kernel": "~2.3|~3.0|~4.0" }, "type": "mink-driver", "extra": { @@ -4276,11 +5267,7 @@ "Behat\\Mink\\Driver\\": "src/" } }, - "autoload-dev": { - "psr-4": { - "Behat\\Mink\\Tests\\Driver\\": "tests" - } - }, + "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -4299,71 +5286,7 @@ "browser", "testing" ], - "support": { - "source": "https://github.com/ruudk/MinkBrowserKitDriver/tree/symfony-5" - }, - "time": "2019-12-23T19:35:20+00:00" - }, - { - "name": "behat/mink-extension", - "version": "dev-patch-4", - "source": { - "type": "git", - "url": "https://github.com/DonCallisto/MinkExtension.git", - "reference": "9cc94afdfe2e1df3058e5ef70970dded1504673b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/DonCallisto/MinkExtension/zipball/9cc94afdfe2e1df3058e5ef70970dded1504673b", - "reference": "9cc94afdfe2e1df3058e5ef70970dded1504673b", - "shasum": "" - }, - "require": { - "behat/behat": "^3.0.5", - "behat/mink": "^1.5", - "php": ">=5.3.2", - "symfony/config": "^2.7|^3.0|^4.0|^5.0" - }, - "require-dev": { - "behat/mink-goutte-driver": "^1.1", - "phpspec/phpspec": "^2.0" - }, - "type": "behat-extension", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "autoload": { - "psr-0": { - "Behat\\MinkExtension": "src/" - } - }, - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com" - }, - { - "name": "Christophe Coevoet", - "email": "stof@notk.org" - } - ], - "description": "Mink extension for Behat", - "homepage": "http://extensions.behat.org/mink", - "keywords": [ - "browser", - "gui", - "test", - "web" - ], - "support": { - "source": "https://github.com/DonCallisto/MinkExtension/tree/patch-4" - }, - "time": "2019-11-24T19:02:47+00:00" + "time": "2020-03-11T09:49:45+00:00" }, { "name": "behat/transliterator", @@ -4442,6 +5365,68 @@ "abandoned": "psr/container", "time": "2017-02-14T19:40:03+00:00" }, + { + "name": "friends-of-behat/mink-extension", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfBehat/MinkExtension.git", + "reference": "ca8796a20f2b39ea275860d1cee7b863447dfe06" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfBehat/MinkExtension/zipball/ca8796a20f2b39ea275860d1cee7b863447dfe06", + "reference": "ca8796a20f2b39ea275860d1cee7b863447dfe06", + "shasum": "" + }, + "require": { + "behat/behat": "^3.0.5", + "behat/mink": "^1.5", + "php": "^7.2", + "symfony/config": "^4.4|^5.0" + }, + "replace": { + "behat/mink-extension": "self.version" + }, + "require-dev": { + "behat/mink-goutte-driver": "^1.1", + "phpspec/phpspec": "^6.0" + }, + "type": "behat-extension", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "psr-0": { + "Behat\\MinkExtension": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com" + }, + { + "name": "Christophe Coevoet", + "email": "stof@notk.org" + } + ], + "description": "Mink extension for Behat", + "homepage": "http://extensions.behat.org/mink", + "keywords": [ + "browser", + "gui", + "test", + "web" + ], + "time": "2020-01-15T17:16:57+00:00" + }, { "name": "friends-of-behat/symfony-extension", "version": "v2.1.0-BETA.1", @@ -4609,30 +5594,33 @@ }, { "name": "mockery/mockery", - "version": "1.3.1", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be" + "reference": "6c6a7c533469873deacf998237e7649fc6b36223" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be", - "reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be", + "url": "https://api.github.com/repos/mockery/mockery/zipball/6c6a7c533469873deacf998237e7649fc6b36223", + "reference": "6c6a7c533469873deacf998237e7649fc6b36223", "shasum": "" }, "require": { "hamcrest/hamcrest-php": "~2.0", "lib-pcre": ">=7.0", - "php": ">=5.6.0" + "php": "^7.3.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "~5.7.10|~6.5|~7.0|~8.0" + "phpunit/phpunit": "^8.0.0 || ^9.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { @@ -4670,7 +5658,7 @@ "test double", "testing" ], - "time": "2019-12-26T09:49:15+00:00" + "time": "2020-05-19T14:25:16+00:00" }, { "name": "myclabs/deep-copy", @@ -4824,24 +5812,21 @@ }, { "name": "phpdocumentor/reflection-common", - "version": "2.0.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b", "shasum": "" }, "require": { "php": ">=7.1" }, - "require-dev": { - "phpunit/phpunit": "~6" - }, "type": "library", "extra": { "branch-alias": { @@ -4872,45 +5857,42 @@ "reflection", "static analysis" ], - "time": "2018-08-07T13:53:10+00:00" + "time": "2020-04-27T09:25:28+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.3.4", + "version": "5.1.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c" + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c", - "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", "shasum": "" }, "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", - "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", - "webmozart/assert": "^1.0" + "ext-filter": "^7.1", + "php": "^7.2", + "phpdocumentor/reflection-common": "^2.0", + "phpdocumentor/type-resolver": "^1.0", + "webmozart/assert": "^1" }, "require-dev": { - "doctrine/instantiator": "^1.0.5", - "mockery/mockery": "^1.0", - "phpdocumentor/type-resolver": "0.4.*", - "phpunit/phpunit": "^6.4" + "doctrine/instantiator": "^1", + "mockery/mockery": "^1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-master": "5.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -4921,33 +5903,36 @@ { "name": "Mike van Riel", "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@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.", - "time": "2019-12-28T18:55:12+00:00" + "time": "2020-02-22T12:28:44+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.0.1", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" + "reference": "7462d5f123dfc080dfdf26897032a6513644fc95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", - "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95", + "reference": "7462d5f123dfc080dfdf26897032a6513644fc95", "shasum": "" }, "require": { - "php": "^7.1", + "php": "^7.2", "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "ext-tokenizer": "^7.1", - "mockery/mockery": "~1", - "phpunit/phpunit": "^7.0" + "ext-tokenizer": "^7.2", + "mockery/mockery": "~1" }, "type": "library", "extra": { @@ -4971,20 +5956,20 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2019-08-22T18:11:29+00:00" + "time": "2020-02-18T18:59:58+00:00" }, { "name": "phpspec/prophecy", - "version": "v1.10.2", + "version": "v1.10.3", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9" + "reference": "451c3cd1418cf640de218914901e51b064abb093" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b4400efc9d206e83138e2bb97ed7f5b14b831cd9", - "reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", + "reference": "451c3cd1418cf640de218914901e51b064abb093", "shasum": "" }, "require": { @@ -5034,7 +6019,7 @@ "spy", "stub" ], - "time": "2020-01-20T15:57:02+00:00" + "time": "2020-03-05T15:02:03+00:00" }, { "name": "phpunit/php-code-coverage", @@ -5290,16 +6275,16 @@ }, { "name": "phpunit/phpunit", - "version": "8.5.2", + "version": "8.5.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "018b6ac3c8ab20916db85fa91bf6465acb64d1e0" + "reference": "63dda3b212a0025d380a745f91bdb4d8c985adb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/018b6ac3c8ab20916db85fa91bf6465acb64d1e0", - "reference": "018b6ac3c8ab20916db85fa91bf6465acb64d1e0", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/63dda3b212a0025d380a745f91bdb4d8c985adb7", + "reference": "63dda3b212a0025d380a745f91bdb4d8c985adb7", "shasum": "" }, "require": { @@ -5369,7 +6354,17 @@ "testing", "xunit" ], - "time": "2020-01-08T08:49:49+00:00" + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-05-22T13:51:52+00:00" }, { "name": "roave/security-advisories", @@ -5377,12 +6372,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "666ba252853924887ac57dc9f66e6b6af78d5a76" + "reference": "55922f51129488c246a776ff944463605d447da0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/666ba252853924887ac57dc9f66e6b6af78d5a76", - "reference": "666ba252853924887ac57dc9f66e6b6af78d5a76", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/55922f51129488c246a776ff944463605d447da0", + "reference": "55922f51129488c246a776ff944463605d447da0", "shasum": "" }, "conflict": { @@ -5394,11 +6389,18 @@ "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6", "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", + "bolt/bolt": "<3.6.10", "brightlocal/phpwhois": "<=4.2.5", + "buddypress/buddypress": "<5.1.2", "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", "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", "cartalyst/sentry": "<=2.1.6", + "centreon/centreon": "<18.10.8|>=19,<19.4.5", + "cesnet/simplesamlphp-module-proxystatistics": "<3.1", "codeigniter/framework": "<=3.0.6", "composer/composer": "<=1-alpha.11", "contao-components/mediaelement": ">=2.14.2,<2.21.1", @@ -5416,22 +6418,32 @@ "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", + "dolibarr/dolibarr": "<11.0.4", "dompdf/dompdf": ">=0.6,<0.6.2", - "drupal/core": ">=7,<7.69|>=8,<8.7.11|>=8.8,<8.8.1", - "drupal/drupal": ">=7,<7.69|>=8,<8.7.11|>=8.8,<8.8.1", + "drupal/core": ">=7,<7.70|>=8,<8.7.14|>=8.8,<8.8.6", + "drupal/drupal": ">=7,<7.70|>=8,<8.7.14|>=8.8,<8.8.6", "endroid/qr-code-bundle": "<3.4.2", + "enshrined/svg-sanitize": "<0.13.1", "erusev/parsedown": "<1.7.2", - "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.4", - "ezsystems/ezpublish-kernel": ">=5.3,<5.3.12.1|>=5.4,<5.4.13.1|>=6,<6.7.9.1|>=6.8,<6.13.5.1|>=7,<7.2.4.1|>=7.3,<7.3.2.1", - "ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.6|>=5.4,<5.4.12.3|>=2011,<2017.12.4.3|>=2018.6,<2018.6.1.4|>=2018.9,<2018.9.1.3", + "ezsystems/demobundle": ">=5.4,<5.4.6.1", + "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-admin-ui-assets": ">=4,<4.2", + "ezsystems/ezplatform-user": ">=1,<1.0.1", + "ezsystems/ezpublish-kernel": ">=5.3,<5.3.12.1|>=5.4,<5.4.14.1|>=6,<6.7.9.1|>=6.8,<6.13.6.2|>=7,<7.2.4.1|>=7.3,<7.3.2.1|>=7.5,<7.5.6.2", + "ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.6|>=5.4,<5.4.14.1|>=2011,<2017.12.7.2|>=2018.6,<2018.6.1.4|>=2018.9,<2018.9.1.3|>=2019.3,<2019.3.4.2", "ezsystems/repository-forms": ">=2.3,<2.3.2.1", "ezyang/htmlpurifier": "<4.1.1", "firebase/php-jwt": "<2", "fooman/tcpdf": "<6.2.22", "fossar/tcpdf-parser": "<6.2.22", + "friendsofsymfony/oauth2-php": "<1.3", "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", "fuel/core": "<1.8.1", + "getgrav/grav": "<1.7-beta.8", "gree/jose": "<=2.2", "gregwar/rst": "<1.0.3", "guzzlehttp/guzzle": ">=4-rc.2,<4.2.4|>=5,<5.3.1|>=6,<6.2.1", @@ -5439,6 +6451,7 @@ "illuminate/cookie": ">=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.42|>=5.6,<5.6.30", "illuminate/database": ">=4,<4.0.99|>=4.1,<4.1.29", "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", "ivankristianto/phpwhois": "<=4.3", "james-heinrich/getid3": "<1.9.9", "joomla/session": "<1.3.1", @@ -5446,15 +6459,19 @@ "kazist/phpwhois": "<=4.2.6", "kreait/firebase-php": ">=3.2,<3.8.1", "la-haute-societe/tcpdf": "<6.2.22", - "laravel/framework": ">=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.42|>=5.6,<5.6.30", + "laravel/framework": ">=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.42|>=5.6,<5.6.30|>=7,<7.1.2", "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", "league/commonmark": "<0.18.3", + "librenms/librenms": "<1.53", + "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", "monolog/monolog": ">=1.8,<1.12", "namshi/jose": "<2.2", + "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", "onelogin/php-saml": "<2.10.4", + "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", "openid/php-openid": "<2.3", "oro/crm": ">=1.7,<1.7.4", "oro/platform": ">=1.7,<1.7.4", @@ -5463,50 +6480,67 @@ "paragonie/random_compat": "<2", "paypal/merchant-sdk-php": "<3.12", "pear/archive_tar": "<1.4.4", - "phpmailer/phpmailer": ">=5,<5.2.27|>=6,<6.0.6", - "phpoffice/phpexcel": "<=1.8.1", - "phpoffice/phpspreadsheet": "<=1.5", + "phpfastcache/phpfastcache": ">=5,<5.0.13", + "phpmailer/phpmailer": "<6.1.6", + "phpmyadmin/phpmyadmin": "<4.9.2", + "phpoffice/phpexcel": "<1.8.2", + "phpoffice/phpspreadsheet": "<1.8", "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.3", + "prestashop/autoupgrade": ">=4,<4.10.1", + "prestashop/gamification": "<2.3.2", + "prestashop/ps_facetedsearch": "<3.4.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", "pusher/pusher-php-server": "<2.2.1", - "robrichards/xmlseclibs": ">=1,<3.0.4", + "robrichards/xmlseclibs": "<3.0.4", "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/shopware": "<5.3.7", - "silverstripe/cms": ">=3,<=3.0.11|>=3.1,<3.1.11", + "silverstripe/admin": ">=1.0.3,<1.0.4|>=1.1,<1.1.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": ">=3,<3.6.7|>=3.7,<3.7.3|>=4,<4.4", + "silverstripe/framework": "<4.4.5|>=4.5,<4.5.2", "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.1.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", + "silverstripe/taxonomy": ">=1.3,<1.3.1|>=2,<2.0.1", "silverstripe/userforms": "<3", "simple-updates/phpwhois": "<=1", "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4", - "simplesamlphp/simplesamlphp": "<1.17.8", + "simplesamlphp/simplesamlphp": "<1.18.6", "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", + "simplito/elliptic-php": "<1.0.6", "slim/slim": "<2.6", "smarty/smarty": "<3.1.33", "socalnick/scn-social-auth": "<1.15.2", "spoonity/tcpdf": "<6.2.22", "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", + "ssddanbrown/bookstack": "<0.29.2", "stormpath/sdk": ">=0,<9.9.99", "studio-42/elfinder": "<2.1.49", "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/resource-bundle": ">=1,<1.3.13|>=1.4,<1.4.6|>=1.5,<1.5.1|>=1.6,<1.6.3", - "sylius/sylius": ">=1,<1.3.12|>=1.4,<1.4.4", + "sylius/resource-bundle": "<1.3.13|>=1.4,<1.4.6|>=1.5,<1.5.1|>=1.6,<1.6.3", + "sylius/sylius": "<1.3.16|>=1.4,<1.4.12|>=1.5,<1.5.9|>=1.6,<1.6.5", + "symbiote/silverstripe-multivaluefield": ">=3,<3.0.99", + "symbiote/silverstripe-versionedfiles": "<=2.0.3", "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/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", + "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.3.8", "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", "symfony/mime": ">=4.3,<4.3.8", @@ -5515,19 +6549,20 @@ "symfony/polyfill-php55": ">=1,<1.10", "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,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", + "symfony/security": ">=2,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=4.4,<4.4.7|>=5,<5.0.7", "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-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<2.8.37|>=3,<3.3.17|>=3.4,<3.4.7|>=4,<4.0.7", "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,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", - "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", + "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", "symfony/serializer": ">=2,<2.0.11", - "symfony/symfony": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", + "symfony/symfony": ">=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/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", "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", + "t3g/svg-sanitizer": "<1.0.3", "tecnickcom/tcpdf": "<6.2.22", "thelia/backoffice-default-template": ">=2.1,<2.1.2", "thelia/thelia": ">=2.1-beta.1,<2.1.3", @@ -5535,14 +6570,17 @@ "titon/framework": ">=0,<9.9.99", "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.30|>=9,<9.5.12|>=10,<10.2.1", - "typo3/cms-core": ">=8,<8.7.30|>=9,<9.5.12|>=10,<10.2.1", + "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.30|>=9,<9.5.17|>=10,<10.4.2", + "typo3/cms-core": ">=8,<8.7.30|>=9,<9.5.17|>=10,<10.4.2", "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5", "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4", "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", "ua-parser/uap-php": "<3.8", + "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", + "verot/class.upload.php": "<=1.0.3|>=2,<=2.0.4", "wallabag/tcpdf": "<6.2.22", "willdurand/js-translation-bundle": "<2.1.1", + "yii2mod/yii2-cms": "<1.9.2", "yiisoft/yii": ">=1.1.14,<1.1.15", "yiisoft/yii2": "<2.0.15", "yiisoft/yii2-bootstrap": "<2.0.4", @@ -5551,6 +6589,7 @@ "yiisoft/yii2-gii": "<2.0.4", "yiisoft/yii2-jui": "<2.0.4", "yiisoft/yii2-redis": "<2.0.8", + "yourls/yourls": "<1.7.4", "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", @@ -5595,7 +6634,17 @@ } ], "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", - "time": "2020-01-28T17:25:41+00:00" + "funding": [ + { + "url": "https://github.com/Ocramius", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/roave/security-advisories", + "type": "tidelift" + } + ], + "time": "2020-05-28T00:01:39+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -6214,27 +7263,27 @@ }, { "name": "symfony/browser-kit", - "version": "v5.0.3", + "version": "v4.4.9", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "b0294489a7fbb4f3f39c39efe6f0328cb09731b9" + "reference": "f53310646af9901292488b2ff36e26ea10f545f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/b0294489a7fbb4f3f39c39efe6f0328cb09731b9", - "reference": "b0294489a7fbb4f3f39c39efe6f0328cb09731b9", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/f53310646af9901292488b2ff36e26ea10f545f5", + "reference": "f53310646af9901292488b2ff36e26ea10f545f5", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/dom-crawler": "^4.4|^5.0" + "php": ">=7.1.3", + "symfony/dom-crawler": "^3.4|^4.0|^5.0" }, "require-dev": { - "symfony/css-selector": "^4.4|^5.0", - "symfony/http-client": "^4.4|^5.0", - "symfony/mime": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0" + "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" }, "suggest": { "symfony/process": "" @@ -6242,7 +7291,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -6269,29 +7318,43 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "time": "2020-01-04T14:08:26+00:00" + "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": "2020-05-22T17:28:00+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.37", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "e1b3e1a0621d6e48ee46092b4c7d8280f746b3c5" + "reference": "e544e24472d4c97b2d11ade7caacd446727c6bf9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/e1b3e1a0621d6e48ee46092b4c7d8280f746b3c5", - "reference": "e1b3e1a0621d6e48ee46092b4c7d8280f746b3c5", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/e544e24472d4c97b2d11ade7caacd446727c6bf9", + "reference": "e544e24472d4c97b2d11ade7caacd446727c6bf9", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=7.2.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -6322,25 +7385,40 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2020-01-01T11:03:25+00:00" + "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": "2020-05-20T17:43:50+00:00" }, { "name": "symfony/debug", - "version": "v4.4.4", + "version": "v4.4.9", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "20236471058bbaa9907382500fc14005c84601f0" + "reference": "28f92d08bb6d1fddf8158e02c194ad43870007e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/20236471058bbaa9907382500fc14005c84601f0", - "reference": "20236471058bbaa9907382500fc14005c84601f0", + "url": "https://api.github.com/repos/symfony/debug/zipball/28f92d08bb6d1fddf8158e02c194ad43870007e6", + "reference": "28f92d08bb6d1fddf8158e02c194ad43870007e6", "shasum": "" }, "require": { - "php": "^7.1.3", - "psr/log": "~1.0" + "php": ">=7.1.3", + "psr/log": "~1.0", + "symfony/polyfill-php80": "^1.15" }, "conflict": { "symfony/http-kernel": "<3.4" @@ -6378,24 +7456,38 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2020-01-25T12:44:29+00:00" + "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": "2020-05-24T08:33:35+00:00" }, { "name": "symfony/dom-crawler", - "version": "v5.0.3", + "version": "v4.4.9", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "439c3c7be4daa569deef0dd1e30cf3562108d062" + "reference": "c18354d5a0bb84c945f6257c51b971d52f10c614" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/439c3c7be4daa569deef0dd1e30cf3562108d062", - "reference": "439c3c7be4daa569deef0dd1e30cf3562108d062", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/c18354d5a0bb84c945f6257c51b971d52f10c614", + "reference": "c18354d5a0bb84c945f6257c51b971d52f10c614", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.1.3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0" }, @@ -6404,7 +7496,7 @@ }, "require-dev": { "masterminds/html5": "^2.6", - "symfony/css-selector": "^4.4|^5.0" + "symfony/css-selector": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/css-selector": "" @@ -6412,7 +7504,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "4.4-dev" } }, "autoload": { @@ -6439,25 +7531,39 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2020-01-04T14:08:26+00:00" + "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": "2020-05-23T00:03:06+00:00" }, { "name": "symfony/proxy-manager-bridge", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/proxy-manager-bridge.git", - "reference": "04db5e211ec98c3053b37d5cc393677a619e6002" + "reference": "65f834babc07abe54c8e0f5bb5cb01f953480953" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/04db5e211ec98c3053b37d5cc393677a619e6002", - "reference": "04db5e211ec98c3053b37d5cc393677a619e6002", + "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/65f834babc07abe54c8e0f5bb5cb01f953480953", + "reference": "65f834babc07abe54c8e0f5bb5cb01f953480953", "shasum": "" }, "require": { "ocramius/proxy-manager": "~2.1", - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/dependency-injection": "^5.0" }, "conflict": { @@ -6469,7 +7575,7 @@ "type": "symfony-bridge", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -6496,25 +7602,40 @@ ], "description": "Symfony ProxyManager Bridge", "homepage": "https://symfony.com", - "time": "2020-01-04T14:08:26+00:00" + "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": "2020-05-20T17:43:50+00:00" }, { "name": "symfony/translation", - "version": "v5.0.3", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "28e1054f1ea26c63762d9260c37cb1056ea62dbb" + "reference": "d387f07d4c15f9c09439cf3f13ddbe0b2c5e8be2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/28e1054f1ea26c63762d9260c37cb1056ea62dbb", - "reference": "28e1054f1ea26c63762d9260c37cb1056ea62dbb", + "url": "https://api.github.com/repos/symfony/translation/zipball/d387f07d4c15f9c09439cf3f13ddbe0b2c5e8be2", + "reference": "d387f07d4c15f9c09439cf3f13ddbe0b2c5e8be2", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15", "symfony/translation-contracts": "^2" }, "conflict": { @@ -6546,7 +7667,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -6573,7 +7694,21 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2020-01-21T08:40:24+00:00" + "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": "2020-05-30T20:35:19+00:00" }, { "name": "theseer/tokenizer", @@ -6617,16 +7752,16 @@ }, { "name": "webmozart/assert", - "version": "1.6.0", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "573381c0a64f155a0d9a23f4b0c797194805b925" + "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/573381c0a64f155a0d9a23f4b0c797194805b925", - "reference": "573381c0a64f155a0d9a23f4b0c797194805b925", + "url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6", + "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6", "shasum": "" }, "require": { @@ -6634,7 +7769,7 @@ "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "vimeo/psalm": "<3.6.0" + "vimeo/psalm": "<3.9.1" }, "require-dev": { "phpunit/phpunit": "^4.8.36 || ^7.5.13" @@ -6661,23 +7796,13 @@ "check", "validate" ], - "time": "2019-11-24T13:36:37+00:00" - } - ], - "aliases": [ - { - "alias": "3.6", - "alias_normalized": "3.6.0.0", - "version": "9999999-dev", - "package": "behat/behat" + "time": "2020-04-18T12:12:48+00:00" } ], + "aliases": [], "minimum-stability": "stable", "stability-flags": { "roave/security-advisories": 20, - "behat/behat": 20, - "behat/mink-extension": 20, - "behat/mink-browserkit-driver": 20, "friends-of-behat/symfony-extension": 10 }, "prefer-stable": false, @@ -6692,5 +7817,6 @@ }, "platform-dev": { "ext-xdebug": "*" - } + }, + "plugin-api-version": "1.1.0" } From 239880c0b7ec9020a5053b4c6fea7491cb52e49c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Wed, 3 Jun 2020 12:43:04 +0200 Subject: [PATCH 012/106] Use psr-12 for strict_types --- .../MySql/ConsumeMySqlDomainEventsCommand.php | 2 +- .../RabbitMq/ConfigureRabbitMqCommand.php | 2 +- .../ConsumeRabbitMqDomainEventsCommand.php | 2 +- ...SupervisorRabbitMqConsumerFilesCommand.php | 2 +- .../Courses/CoursesPutController.php | 12 ++--- .../CoursesCounterGetController.php | 16 +++---- .../HealthCheck/HealthCheckGetController.php | 2 +- apps/mooc/backend/src/MoocBackendKernel.php | 2 +- .../Application/Store/DomainEventStorer.php | 2 +- .../Store/StoreDomainEventOnOccurred.php | 2 +- .../Domain/AnalyticsDomainEvent.php | 2 +- .../AnalyticsDomainEventAggregateId.php | 2 +- .../Domain/AnalyticsDomainEventBody.php | 2 +- .../Domain/AnalyticsDomainEventId.php | 2 +- .../Domain/AnalyticsDomainEventName.php | 2 +- .../Domain/DomainEventsRepository.php | 2 +- .../Authenticate/AuthenticateUserCommand.php | 2 +- .../AuthenticateUserCommandHandler.php | 2 +- .../Authenticate/UserAuthenticator.php | 2 +- src/Backoffice/Auth/Domain/AuthPassword.php | 2 +- src/Backoffice/Auth/Domain/AuthRepository.php | 2 +- src/Backoffice/Auth/Domain/AuthUser.php | 2 +- src/Backoffice/Auth/Domain/AuthUsername.php | 2 +- .../Auth/Domain/InvalidAuthCredentials.php | 2 +- .../Auth/Domain/InvalidAuthUsername.php | 2 +- .../Persistence/InMemoryAuthRepository.php | 2 +- .../Application/BackofficeCourseResponse.php | 2 +- .../Application/BackofficeCoursesResponse.php | 2 +- .../Create/BackofficeCourseCreator.php | 2 +- .../CreateBackofficeCourseOnCourseCreated.php | 2 +- .../AllBackofficeCoursesSearcher.php | 2 +- .../SearchAllBackofficeCoursesQuery.php | 2 +- ...SearchAllBackofficeCoursesQueryHandler.php | 2 +- .../BackofficeCoursesByCriteriaSearcher.php | 2 +- ...SearchBackofficeCoursesByCriteriaQuery.php | 2 +- ...ackofficeCoursesByCriteriaQueryHandler.php | 2 +- .../Courses/Domain/BackofficeCourse.php | 12 ++--- .../Domain/BackofficeCourseRepository.php | 2 +- ...lasticsearchBackofficeCourseRepository.php | 2 +- ...nMemoryCacheBackofficeCourseRepository.php | 2 +- .../MySqlBackofficeCourseRepository.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 | 2 +- src/Mooc/Courses/Domain/Course.php | 2 +- .../Domain/CourseCreatedDomainEvent.php | 18 ++++---- src/Mooc/Courses/Domain/CourseDuration.php | 2 +- src/Mooc/Courses/Domain/CourseName.php | 2 +- src/Mooc/Courses/Domain/CourseNotExist.php | 2 +- src/Mooc/Courses/Domain/CourseRepository.php | 2 +- .../Persistence/Doctrine/CourseIdType.php | 2 +- .../Persistence/DoctrineCourseRepository.php | 2 +- .../Persistence/FileCourseRepository.php | 2 +- .../Application/Find/CoursesCounterFinder.php | 2 +- .../Find/CoursesCounterResponse.php | 2 +- .../Find/FindCoursesCounterQuery.php | 2 +- .../Find/FindCoursesCounterQueryHandler.php | 2 +- .../Increment/CoursesCounterIncrementer.php | 2 +- ...IncrementCoursesCounterOnCourseCreated.php | 2 +- .../CoursesCounter/Domain/CoursesCounter.php | 2 +- .../Domain/CoursesCounterId.php | 2 +- .../CoursesCounterIncrementedDomainEvent.php | 16 +++---- .../Domain/CoursesCounterNotExist.php | 2 +- .../Domain/CoursesCounterRepository.php | 2 +- .../Domain/CoursesCounterTotal.php | 2 +- .../Doctrine/CourseCounterIdType.php | 2 +- .../Persistence/Doctrine/CourseIdsType.php | 2 +- .../DoctrineCoursesCounterRepository.php | 2 +- src/Mooc/Shared/Domain/Course/CourseId.php | 2 +- .../Doctrine/DbalTypesSearcher.php | 2 +- .../Doctrine/DoctrinePrefixesSearcher.php | 2 +- .../Doctrine/MoocEntityManagerFactory.php | 2 +- src/Shared/Domain/Aggregate/AggregateRoot.php | 2 +- src/Shared/Domain/Assert.php | 2 +- src/Shared/Domain/Bus/Command/Command.php | 2 +- src/Shared/Domain/Bus/Command/CommandBus.php | 2 +- .../Domain/Bus/Command/CommandHandler.php | 2 +- src/Shared/Domain/Bus/Event/DomainEvent.php | 6 +-- .../Bus/Event/DomainEventSubscriber.php | 2 +- src/Shared/Domain/Bus/Event/EventBus.php | 2 +- src/Shared/Domain/Bus/Query/Query.php | 2 +- src/Shared/Domain/Bus/Query/QueryBus.php | 2 +- src/Shared/Domain/Bus/Query/QueryHandler.php | 2 +- src/Shared/Domain/Bus/Query/Response.php | 2 +- src/Shared/Domain/Collection.php | 2 +- src/Shared/Domain/Criteria/Criteria.php | 2 +- src/Shared/Domain/Criteria/Filter.php | 2 +- src/Shared/Domain/Criteria/FilterField.php | 2 +- src/Shared/Domain/Criteria/FilterOperator.php | 2 +- src/Shared/Domain/Criteria/FilterValue.php | 2 +- src/Shared/Domain/Criteria/Filters.php | 14 +++--- src/Shared/Domain/Criteria/Order.php | 22 ++++----- src/Shared/Domain/Criteria/OrderBy.php | 2 +- src/Shared/Domain/Criteria/OrderType.php | 2 +- src/Shared/Domain/DomainError.php | 2 +- src/Shared/Domain/Logger.php | 2 +- src/Shared/Domain/Monitoring.php | 2 +- src/Shared/Domain/RandomNumberGenerator.php | 2 +- src/Shared/Domain/Utils.php | 4 +- src/Shared/Domain/UuidGenerator.php | 2 +- src/Shared/Domain/ValueObject/Enum.php | 30 ++++++------ .../Domain/ValueObject/IntValueObject.php | 2 +- .../Domain/ValueObject/StringValueObject.php | 2 +- src/Shared/Domain/ValueObject/Uuid.php | 22 ++++----- .../Bus/CallableFirstParameterExtractor.php | 46 +++++++++---------- .../Bus/Command/CommandNotRegisteredError.php | 2 +- .../Bus/Command/InMemorySymfonyCommandBus.php | 2 +- .../Bus/Event/DomainEventJsonDeserializer.php | 2 +- .../Bus/Event/DomainEventJsonSerializer.php | 2 +- .../Bus/Event/DomainEventMapping.php | 2 +- .../Event/DomainEventSubscriberLocator.php | 2 +- .../InMemory/InMemorySymfonyEventBus.php | 2 +- .../MySqlDoctrineDomainEventsConsumer.php | 2 +- .../Bus/Event/MySql/MySqlDoctrineEventBus.php | 2 +- .../Bus/Event/RabbitMq/RabbitMqConfigurer.php | 2 +- .../Bus/Event/RabbitMq/RabbitMqConnection.php | 4 +- .../RabbitMq/RabbitMqDomainEventsConsumer.php | 2 +- .../Bus/Event/RabbitMq/RabbitMqEventBus.php | 2 +- .../RabbitMqExchangeNameFormatter.php | 2 +- .../RabbitMq/RabbitMqQueueNameFormatter.php | 2 +- .../Bus/Query/InMemorySymfonyQueryBus.php | 2 +- .../Bus/Query/QueryNotRegisteredError.php | 2 +- .../Doctrine/DatabaseConnections.php | 2 +- .../Dbal/DbalCustomTypesRegistrar.php | 2 +- .../Doctrine/Dbal/DoctrineCustomType.php | 2 +- .../Doctrine/DoctrineEntityManagerFactory.php | 2 +- .../Elasticsearch/ElasticsearchClient.php | 2 +- .../ElasticsearchClientFactory.php | 2 +- .../Infrastructure/Logger/MonologLogger.php | 2 +- .../Doctrine/DoctrineCriteriaConverter.php | 2 +- .../Doctrine/DoctrineRepository.php | 2 +- .../Persistence/Doctrine/UuidType.php | 2 +- .../Elasticsearch/ElasticQueryGenerator.php | 2 +- .../ElasticsearchCriteriaConverter.php | 2 +- .../Elasticsearch/ElasticsearchRepository.php | 2 +- .../PhpRandomNumberGenerator.php | 2 +- .../Infrastructure/RamseyUuidGenerator.php | 2 +- .../Symfony/AddJsonBodyToRequestListener.php | 2 +- .../Infrastructure/Symfony/ApiController.php | 2 +- .../Symfony/ApiExceptionListener.php | 5 +- .../ApiExceptionsHttpStatusCodeMapping.php | 2 +- .../Symfony/BasicHttpAuthMiddleware.php | 2 +- .../Infrastructure/Symfony/FlashSession.php | 2 +- .../Infrastructure/Symfony/WebController.php | 2 +- .../AuthenticateUserCommandHandlerTest.php | 2 +- .../AuthenticateUserCommandMother.php | 2 +- .../Auth/AuthModuleUnitTestCase.php | 2 +- .../Auth/Domain/AuthPasswordMother.php | 2 +- .../Backoffice/Auth/Domain/AuthUserMother.php | 2 +- .../Auth/Domain/AuthUsernameMother.php | 2 +- ...iceCoursesModuleInfrastructureTestCase.php | 2 +- .../Domain/BackofficeCourseCriteriaMother.php | 2 +- .../Courses/Domain/BackofficeCourseMother.php | 2 +- .../MySqlBackofficeCourseRepositoryTest.php | 2 +- .../Create/CreateCourseCommandHandlerTest.php | 2 +- .../Create/CreateCourseCommandMother.php | 2 +- .../Application/Update/CourseRenamerTest.php | 2 +- .../CoursesModuleInfrastructureTestCase.php | 2 +- .../Courses/CoursesModuleUnitTestCase.php | 2 +- .../Domain/CourseCreatedDomainEventMother.php | 2 +- .../Courses/Domain/CourseDurationMother.php | 2 +- .../Mooc/Courses/Domain/CourseIdMother.php | 2 +- .../src/Mooc/Courses/Domain/CourseMother.php | 2 +- .../Mooc/Courses/Domain/CourseNameMother.php | 2 +- .../Persistence/CourseRepositoryTest.php | 2 +- .../Find/CoursesCounterResponseMother.php | 2 +- .../FindCoursesCounterQueryHandlerTest.php | 2 +- ...ementCoursesCounterOnCourseCreatedTest.php | 2 +- .../CoursesCounterModuleUnitTestCase.php | 2 +- .../Domain/CoursesCounterIdMother.php | 2 +- ...sesCounterIncrementedDomainEventMother.php | 2 +- .../Domain/CoursesCounterMother.php | 2 +- .../Domain/CoursesCounterTotalMother.php | 2 +- .../MoocContextInfrastructureTestCase.php | 2 +- .../PhpUnit/MoocEnvironmentArranger.php | 2 +- .../Shared/Domain/Criteria/CriteriaMother.php | 2 +- .../Domain/Criteria/FilterFieldMother.php | 2 +- .../Shared/Domain/Criteria/FilterMother.php | 2 +- .../Domain/Criteria/FilterValueMother.php | 2 +- .../Shared/Domain/Criteria/FiltersMother.php | 2 +- .../Shared/Domain/Criteria/OrderByMother.php | 2 +- .../Shared/Domain/Criteria/OrderMother.php | 2 +- tests/src/Shared/Domain/DuplicatorMother.php | 2 +- tests/src/Shared/Domain/IntegerMother.php | 2 +- tests/src/Shared/Domain/MotherCreator.php | 2 +- .../src/Shared/Domain/RandomElementPicker.php | 2 +- tests/src/Shared/Domain/Repeater.php | 2 +- tests/src/Shared/Domain/TestUtils.php | 2 +- tests/src/Shared/Domain/UuidMother.php | 2 +- tests/src/Shared/Domain/WordMother.php | 2 +- .../Arranger/EnvironmentArranger.php | 2 +- .../Infrastructure/Behat/ApiContext.php | 2 +- .../Behat/ApplicationFeatureContext.php | 2 +- .../Bus/Command/FakeCommand.php | 2 +- .../Command/InMemorySymfonyCommandBusTest.php | 2 +- .../Event/MySql/MySqlDoctrineEventBusTest.php | 2 +- .../Event/RabbitMq/RabbitMqEventBusTest.php | 2 +- .../TestAllWorksOnRabbitMqEventsPublished.php | 2 +- .../Infrastructure/Bus/Query/FakeQuery.php | 2 +- .../Infrastructure/Bus/Query/FakeResponse.php | 2 +- .../Bus/Query/InMemorySymfonyQueryBusTest.php | 2 +- .../ConstantRandomNumberGenerator.php | 2 +- .../Doctrine/DatabaseCleaner.php | 2 +- .../Shared/Infrastructure/Mink/MinkHelper.php | 2 +- .../Mink/MinkSessionRequestHelper.php | 2 +- .../Mockery/CodelyTvMatcherIsSimilar.php | 2 +- .../AggregateRootArraySimilarComparator.php | 2 +- .../AggregateRootSimilarComparator.php | 2 +- .../Comparator/DateTimeSimilarComparator.php | 2 +- .../DateTimeStringSimilarComparator.php | 2 +- .../DomainEventArraySimilarComparator.php | 2 +- .../DomainEventSimilarComparator.php | 2 +- .../CodelyTvConstraintIsSimilar.php | 2 +- .../PhpUnit/InfrastructureTestCase.php | 2 +- .../Infrastructure/PhpUnit/UnitTestCase.php | 2 +- 217 files changed, 317 insertions(+), 316 deletions(-) diff --git a/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php b/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php index 9763b5625..22f9c1a1b 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php @@ -1,6 +1,6 @@ dispatch( @@ -28,4 +23,9 @@ public function __invoke(string $id, Request $request): Response return new Response('', Response::HTTP_CREATED); } + + 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 a91ed65d1..13d7ba3ad 100644 --- a/apps/mooc/backend/src/Controller/CoursesCounter/CoursesCounterGetController.php +++ b/apps/mooc/backend/src/Controller/CoursesCounter/CoursesCounterGetController.php @@ -1,6 +1,6 @@ Response::HTTP_NOT_FOUND, - ]; - } - public function __invoke() { /** @var CoursesCounterResponse $response */ @@ -31,4 +24,11 @@ public function __invoke() ] ); } + + 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 e267ac7be..39d283f7c 100644 --- a/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php +++ b/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php @@ -1,6 +1,6 @@ duration = $duration; } + public static function fromPrimitives(array $primitives): BackofficeCourse + { + return new self($primitives['id'], $primitives['name'], $primitives['duration']); + } + public function toPrimitives(): array { return [ @@ -28,11 +33,6 @@ public function toPrimitives(): array ]; } - public static function fromPrimitives(array $primitives): BackofficeCourse - { - return new self($primitives['id'], $primitives['name'], $primitives['duration']); - } - public function id(): string { return $this->id; diff --git a/src/Backoffice/Courses/Domain/BackofficeCourseRepository.php b/src/Backoffice/Courses/Domain/BackofficeCourseRepository.php index 45016edd3..1f8d82c40 100644 --- a/src/Backoffice/Courses/Domain/BackofficeCourseRepository.php +++ b/src/Backoffice/Courses/Domain/BackofficeCourseRepository.php @@ -1,6 +1,6 @@ $this->name, - 'duration' => $this->duration, - ]; - } - public static function fromPrimitives( string $aggregateId, array $body, @@ -46,6 +38,14 @@ public static function fromPrimitives( 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; diff --git a/src/Mooc/Courses/Domain/CourseDuration.php b/src/Mooc/Courses/Domain/CourseDuration.php index 1a0124066..3de808b53 100644 --- a/src/Mooc/Courses/Domain/CourseDuration.php +++ b/src/Mooc/Courses/Domain/CourseDuration.php @@ -1,6 +1,6 @@ $this->total, - ]; - } - public static function fromPrimitives( string $aggregateId, array $body, @@ -37,4 +30,11 @@ public static function fromPrimitives( ): DomainEvent { return new self($aggregateId, $body['total'], $eventId, $occurredOn); } + + 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 7ccaf2f1a..5650c9267 100644 --- a/src/Mooc/CoursesCounter/Domain/CoursesCounterNotExist.php +++ b/src/Mooc/CoursesCounter/Domain/CoursesCounterNotExist.php @@ -1,6 +1,6 @@ occurredOn = $occurredOn ?: Utils::dateToString(new DateTimeImmutable()); } - abstract public function toPrimitives(): array; - abstract public static function fromPrimitives( string $aggregateId, array $body, @@ -32,6 +30,8 @@ abstract public static function fromPrimitives( abstract public static function eventName(): string; + abstract public function toPrimitives(): array; + public function aggregateId(): string { return $this->aggregateId; diff --git a/src/Shared/Domain/Bus/Event/DomainEventSubscriber.php b/src/Shared/Domain/Bus/Event/DomainEventSubscriber.php index 3f18b937a..54903808c 100644 --- a/src/Shared/Domain/Bus/Event/DomainEventSubscriber.php +++ b/src/Shared/Domain/Bus/Event/DomainEventSubscriber.php @@ -1,6 +1,6 @@ Filter::fromValues($values); } public function add(Filter $filter): self @@ -38,8 +38,8 @@ public function serialize(): string ); } - private static function filterBuilder(): callable + protected function type(): string { - return fn(array $values) => Filter::fromValues($values); + return Filter::class; } } diff --git a/src/Shared/Domain/Criteria/Order.php b/src/Shared/Domain/Criteria/Order.php index 888141614..2ab172180 100644 --- a/src/Shared/Domain/Criteria/Order.php +++ b/src/Shared/Domain/Criteria/Order.php @@ -1,6 +1,6 @@ orderBy; + return null === $orderBy ? self::none() : new Order(new OrderBy($orderBy), new OrderType($order)); } - public function orderType(): OrderType + public static function none(): Order { - return $this->orderType; + return new Order(new OrderBy(''), OrderType::none()); } - public static function fromValues(?string $orderBy, ?string $order): Order + public function orderBy(): OrderBy { - return null === $orderBy ? self::none() : new Order(new OrderBy($orderBy), new OrderType($order)); + return $this->orderBy; } - public function isNone(): bool + public function orderType(): OrderType { - return $this->orderType()->isNone(); + return $this->orderType; } - public static function none(): Order + public function isNone(): bool { - return new Order(new OrderBy(''), OrderType::none()); + return $this->orderType()->isNone(); } public function serialize(): string diff --git a/src/Shared/Domain/Criteria/OrderBy.php b/src/Shared/Domain/Criteria/OrderBy.php index ac0f1a3bf..c6e43e6b9 100644 --- a/src/Shared/Domain/Criteria/OrderBy.php +++ b/src/Shared/Domain/Criteria/OrderBy.php @@ -1,6 +1,6 @@ value; + return new static(self::randomValue()); } - public function equals(Enum $other): bool + private static function keysFormatter(): callable { - return $other == $this; + return static fn($unused, string $key): string => Utils::toCamelCase(strtolower($key)); } - private function ensureIsBetweenAcceptedValues($value): void + public function value() { - if (!in_array($value, static::values(), true)) { - $this->throwExceptionForInvalidValue($value); - } + return $this->value; } - public static function random(): self + public function equals(Enum $other): bool { - return new static(self::randomValue()); + return $other == $this; } - private static function keysFormatter(): callable + public function __toString(): string { - return static fn($unused, string $key): string => Utils::toCamelCase(strtolower($key)); + return (string) $this->value(); } - public function __toString(): string + private function ensureIsBetweenAcceptedValues($value): void { - return (string) $this->value(); + if (!in_array($value, static::values(), true)) { + $this->throwExceptionForInvalidValue($value); + } } } diff --git a/src/Shared/Domain/ValueObject/IntValueObject.php b/src/Shared/Domain/ValueObject/IntValueObject.php index dcab01cce..f34a11ac9 100644 --- a/src/Shared/Domain/ValueObject/IntValueObject.php +++ b/src/Shared/Domain/ValueObject/IntValueObject.php @@ -1,6 +1,6 @@ value = $value; } + public static function random(): self + { + return new static(RamseyUuid::uuid4()->toString()); + } + public function value(): string { return $this->value; @@ -28,20 +33,15 @@ public function equals(Uuid $other): bool return $this->value() === $other->value(); } + public function __toString(): string + { + return $this->value(); + } + private function ensureIsValidUuid($id): void { if (!RamseyUuid::isValid($id)) { throw new InvalidArgumentException(sprintf('<%s> does not allow the value <%s>.', static::class, $id)); } } - - public static function random(): self - { - return new static(RamseyUuid::uuid4()->toString()); - } - - public function __toString(): string - { - return $this->value(); - } } diff --git a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php index 32a72e30a..55049ca4b 100644 --- a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php +++ b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php @@ -1,6 +1,6 @@ getMethod('__invoke'); - - if ($this->hasOnlyOneParameter($method)) { - return $this->firstParameterClassFrom($method); - } - - return null; - } - public static function forCallables(iterable $callables): array { return map(self::unflatten(), reindex(self::classExtractor(new self()), $callables)); @@ -35,16 +23,6 @@ public static function forPipedCallables(iterable $callables): array return reduce(self::pipedCallablesReducer(), $callables, []); } - private function firstParameterClassFrom(ReflectionMethod $method): string - { - return $method->getParameters()[0]->getClass()->getName(); - } - - private function hasOnlyOneParameter(ReflectionMethod $method): bool - { - return $method->getNumberOfParameters() === 1; - } - private static function classExtractor(CallableFirstParameterExtractor $parameterExtractor): callable { return static fn(callable $handler): string => $parameterExtractor->extract($handler); @@ -67,4 +45,26 @@ private static function unflatten(): callable { return static fn($value) => [$value]; } + + public function extract($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 + { + return $method->getParameters()[0]->getClass()->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 8a4406640..7d18fd696 100644 --- a/src/Shared/Infrastructure/Bus/Command/CommandNotRegisteredError.php +++ b/src/Shared/Infrastructure/Bus/Command/CommandNotRegisteredError.php @@ -1,6 +1,6 @@ Date: Wed, 3 Jun 2020 13:13:52 +0200 Subject: [PATCH 013/106] Simplify dbal custom types registration --- .../Infrastructure/Persistence/Doctrine/CourseIdType.php | 5 ----- .../Persistence/Doctrine/CourseCounterIdType.php | 5 ----- .../Doctrine/Dbal/DbalCustomTypesRegistrar.php | 8 ++++---- .../Infrastructure/Persistence/Doctrine/UuidType.php | 7 +++++++ 4 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/CourseIdType.php b/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/CourseIdType.php index 7eba9b38f..ed6c5790a 100644 --- a/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/CourseIdType.php +++ b/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/CourseIdType.php @@ -9,11 +9,6 @@ final class CourseIdType extends UuidType { - public static function customTypeName(): string - { - return 'course_id'; - } - protected function typeClassName(): string { return CourseId::class; diff --git a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseCounterIdType.php b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseCounterIdType.php index 181e49825..7a300a2bc 100644 --- a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseCounterIdType.php +++ b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseCounterIdType.php @@ -9,11 +9,6 @@ final class CourseCounterIdType extends UuidType { - public static function customTypeName(): string - { - return 'course_counter_id'; - } - protected function typeClassName(): string { return CoursesCounterId::class; diff --git a/src/Shared/Infrastructure/Doctrine/Dbal/DbalCustomTypesRegistrar.php b/src/Shared/Infrastructure/Doctrine/Dbal/DbalCustomTypesRegistrar.php index 1b7d8cac3..b671836cb 100644 --- a/src/Shared/Infrastructure/Doctrine/Dbal/DbalCustomTypesRegistrar.php +++ b/src/Shared/Infrastructure/Doctrine/Dbal/DbalCustomTypesRegistrar.php @@ -11,10 +11,10 @@ final class DbalCustomTypesRegistrar { private static bool $initialized = false; - public static function register(array $dbalCustomTypesClasses): void + public static function register(array $customTypeClassNames): void { if (!self::$initialized) { - each(self::registerType(), $dbalCustomTypesClasses); + each(self::registerType(), $customTypeClassNames); self::$initialized = true; } @@ -22,8 +22,8 @@ public static function register(array $dbalCustomTypesClasses): void private static function registerType(): callable { - return static function ($dbalCustomTypesClasses): void { - Type::addType($dbalCustomTypesClasses::customTypeName(), $dbalCustomTypesClasses); + return static function (string $customTypeClassName): void { + Type::addType($customTypeClassName::customTypeName(), $customTypeClassName); }; } } diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php b/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php index 627e6da77..5353a8716 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php @@ -4,10 +4,12 @@ namespace CodelyTv\Shared\Infrastructure\Persistence\Doctrine; +use CodelyTv\Shared\Domain\Utils; use CodelyTv\Shared\Domain\ValueObject\Uuid; 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 { @@ -18,6 +20,11 @@ public function getName(): string return self::customTypeName(); } + public static function customTypeName(): string + { + return Utils::toSnakeCase(str_replace('Type', '', last(explode('\\', static::class)))); + } + public function convertToPHPValue($value, AbstractPlatform $platform) { $className = $this->typeClassName(); From fbd65c83ed9aefda9863dbeaf4454bcc9ab8e598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Wed, 3 Jun 2020 13:43:32 +0200 Subject: [PATCH 014/106] Use arrow function when possible --- .../backend/src/BackofficeBackendKernel.php | 2 +- .../Courses/CoursesGetController.php | 22 ++++++++----------- .../HealthCheck/HealthCheckGetController.php | 2 +- .../frontend/src/BackofficeFrontendKernel.php | 2 +- .../ImportCoursesToElasticsearchCommand.php | 2 +- .../Courses/CoursesGetWebController.php | 2 +- .../Courses/CoursesPostWebController.php | 2 +- .../HealthCheck/HealthCheckGetController.php | 2 +- .../Controller/Home/HomeGetWebController.php | 2 +- .../MySql/ConsumeMySqlDomainEventsCommand.php | 9 +------- .../Persistence/Doctrine/CourseIdsType.php | 18 ++------------- .../Doctrine/DatabaseConnections.php | 18 ++------------- .../Infrastructure/Symfony/ApiController.php | 18 +++++---------- .../Event/MySql/MySqlDoctrineEventBusTest.php | 9 +------- 14 files changed, 29 insertions(+), 81 deletions(-) diff --git a/apps/backoffice/backend/src/BackofficeBackendKernel.php b/apps/backoffice/backend/src/BackofficeBackendKernel.php index c66dd921c..7642e5e76 100644 --- a/apps/backoffice/backend/src/BackofficeBackendKernel.php +++ b/apps/backoffice/backend/src/BackofficeBackendKernel.php @@ -1,6 +1,6 @@ toArray(), $response->courses()), + map( + fn(BackofficeCourseResponse $course) => [ + 'id' => $course->id(), + 'name' => $course->name(), + 'duration' => $course->duration(), + ], + $response->courses() + ), 200, ['Access-Control-Allow-Origin' => '*'] ); } - - private function toArray(): callable - { - return static function (BackofficeCourseResponse $course) { - return [ - 'id' => $course->id(), - 'name' => $course->name(), - 'duration' => $course->duration(), - ]; - }; - } } diff --git a/apps/backoffice/backend/src/Controller/HealthCheck/HealthCheckGetController.php b/apps/backoffice/backend/src/Controller/HealthCheck/HealthCheckGetController.php index 7125402d8..af32d30ea 100644 --- a/apps/backoffice/backend/src/Controller/HealthCheck/HealthCheckGetController.php +++ b/apps/backoffice/backend/src/Controller/HealthCheck/HealthCheckGetController.php @@ -1,6 +1,6 @@ getArgument('quantity'); - $consumer = pipe($this->consumer(), $this->clearConnections()); + $consumer = pipe($this->consumer(), fn() => $this->connections->clear()); $this->consumer->consume($consumer, $quantityEventsToProcess); } @@ -59,11 +59,4 @@ private function consumer(): callable } }; } - - private function clearConnections(): callable - { - return function () { - $this->connections->clear(); - }; - } } diff --git a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php index d8de83eae..b5da7711a 100644 --- a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php +++ b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php @@ -25,27 +25,13 @@ public function getName(): string /** @var CourseId[] $value */ public function convertToDatabaseValue($value, AbstractPlatform $platform) { - return parent::convertToDatabaseValue(map($this->values(), $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($this->toCourseId(), $scalars); - } - - private function values() - { - return static function (CourseId $id) { - return $id->value(); - }; - } - - private function toCourseId() - { - return static function (string $value) { - return new CourseId($value); - }; + return map(fn(string $value) => new CourseId($value), $scalars); } } diff --git a/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php b/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php index b372f65e1..d1a37b4c6 100644 --- a/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php +++ b/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php @@ -11,7 +11,7 @@ final class DatabaseConnections { - private array $connections = []; + private array $connections; public function __construct(iterable $connections) { @@ -20,25 +20,11 @@ public function __construct(iterable $connections) public function clear(): void { - each($this->clearer(), $this->connections); - } - - public function allConnectionsClearer(): callable - { - return function (): void { - $this->clear(); - }; + each(fn(EntityManager $entityManager) => $entityManager->clear(), $this->connections); } public function truncate(): void { apply(new DatabaseCleaner(), array_values($this->connections)); } - - private function clearer(): callable - { - return static function (EntityManager $entityManager) { - $entityManager->clear(); - }; - } } diff --git a/src/Shared/Infrastructure/Symfony/ApiController.php b/src/Shared/Infrastructure/Symfony/ApiController.php index c677bfdc3..eda372f9a 100644 --- a/src/Shared/Infrastructure/Symfony/ApiController.php +++ b/src/Shared/Infrastructure/Symfony/ApiController.php @@ -15,18 +15,19 @@ abstract class ApiController { private QueryBus $queryBus; private CommandBus $commandBus; - private ApiExceptionsHttpStatusCodeMapping $exceptionHandler; public function __construct( QueryBus $queryBus, CommandBus $commandBus, ApiExceptionsHttpStatusCodeMapping $exceptionHandler ) { - $this->queryBus = $queryBus; - $this->commandBus = $commandBus; - $this->exceptionHandler = $exceptionHandler; + $this->queryBus = $queryBus; + $this->commandBus = $commandBus; - each($this->exceptionRegistrar(), $this->exceptions()); + each( + fn(int $httpCode, string $exceptionClass) => $exceptionHandler->register($exceptionClass, $httpCode), + $this->exceptions() + ); } abstract protected function exceptions(): array; @@ -40,11 +41,4 @@ protected function dispatch(Command $command): void { $this->commandBus->dispatch($command); } - - private function exceptionRegistrar(): callable - { - return function ($httpCode, $exception): void { - $this->exceptionHandler->register($exception, $httpCode); - }; - } } diff --git a/tests/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php b/tests/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php index 9bd956440..fbaf5e2dd 100644 --- a/tests/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php +++ b/tests/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php @@ -38,15 +38,8 @@ public function it_should_publish_and_consume_domain_events_from_msql(): void $this->bus->publish($domainEvent, $anotherDomainEvent); $this->consumer->consume( - $this->spySubscriber($domainEvent, $anotherDomainEvent), + fn(DomainEvent ...$expectedEvents) => $this->assertContainsEquals($domainEvent, $expectedEvents), $eventsToConsume = 2 ); } - - private function spySubscriber(DomainEvent ...$expectedDomainEvents): callable - { - return function (DomainEvent $domainEvent) use ($expectedDomainEvents): void { - $this->assertContainsEquals($domainEvent, $expectedDomainEvents); - }; - } } From 45fe5e5734539d6bf472711327e26778b492c665 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Wed, 3 Jun 2020 13:45:46 +0200 Subject: [PATCH 015/106] Change labeler limits --- .github/workflows/labeler.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 5b7b1aedb..5ff07378c 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -11,7 +11,7 @@ jobs: with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} xs_max_size: '10' - s_max_size: '100' - m_max_size: '350' - l_max_size: '700' + s_max_size: '300' + m_max_size: '600' + l_max_size: '1400' fail_if_xl: 'true' From 5bc5192dad1a01abd86c8a760f0288c9bcdd41dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Wed, 3 Jun 2020 13:52:22 +0200 Subject: [PATCH 016/106] Remove unused code --- .../Shared/Infrastructure/Doctrine/DbalTypesSearcher.php | 5 ----- .../Elasticsearch/ElasticsearchCriteriaConverter.php | 2 -- 2 files changed, 7 deletions(-) diff --git a/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php b/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php index 56f64b09f..07d8290a9 100644 --- a/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php +++ b/src/Mooc/Shared/Infrastructure/Doctrine/DbalTypesSearcher.php @@ -46,11 +46,6 @@ private static function isExistingDbalPath(): callable return static fn(string $path) => !empty($path); } - private static function namespaceFormatter($baseNamespace): callable - { - return static fn(string $path, string $module) => "$baseNamespace\\$module\Domain"; - } - private static function dbalClassesSearcher(string $contextName): callable { return static function (array $totalNamespaces, string $path) use ($contextName) { diff --git a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchCriteriaConverter.php b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchCriteriaConverter.php index 94875d0a9..bd8a5373b 100644 --- a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchCriteriaConverter.php +++ b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchCriteriaConverter.php @@ -23,8 +23,6 @@ public function convert(Criteria $criteria): array private function formatQuery(Criteria $criteria): array { if ($criteria->hasFilters()) { - $multipleFilters = 1 < $criteria->filters()->count(); - return [ 'query' => [ 'bool' => reduce(new ElasticQueryGenerator(), $criteria->filters(), []), From f07ad6c4d64024684164a6e5dc6d6135b2afe501 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Wed, 3 Jun 2020 15:02:52 +0200 Subject: [PATCH 017/106] Add more cohesion to the tests --- .../mooc/backend/tests}/features/courses/course_put.feature | 0 .../features/courses_counter/courses_counter_get.feature | 0 .../tests}/features/health_check/health_check_get.feature | 0 .../backend => apps/mooc/backend/tests}/mooc_backend.yml | 6 +++--- behat.yml | 2 +- composer.json | 2 +- .../Authenticate/AuthenticateUserCommandHandlerTest.php | 0 .../Authenticate/AuthenticateUserCommandMother.php | 0 tests/{src => }/Backoffice/Auth/AuthModuleUnitTestCase.php | 0 .../{src => }/Backoffice/Auth/Domain/AuthPasswordMother.php | 0 tests/{src => }/Backoffice/Auth/Domain/AuthUserMother.php | 0 .../{src => }/Backoffice/Auth/Domain/AuthUsernameMother.php | 0 .../BackofficeCoursesModuleInfrastructureTestCase.php | 0 .../Courses/Domain/BackofficeCourseCriteriaMother.php | 0 .../Backoffice/Courses/Domain/BackofficeCourseMother.php | 0 .../Persistence/MySqlBackofficeCourseRepositoryTest.php | 0 .../Application/Create/CreateCourseCommandHandlerTest.php | 0 .../Application/Create/CreateCourseCommandMother.php | 0 .../Mooc/Courses/Application/Update/CourseRenamerTest.php | 0 .../Mooc/Courses/CoursesModuleInfrastructureTestCase.php | 0 tests/{src => }/Mooc/Courses/CoursesModuleUnitTestCase.php | 0 .../Mooc/Courses/Domain/CourseCreatedDomainEventMother.php | 0 .../{src => }/Mooc/Courses/Domain/CourseDurationMother.php | 0 tests/{src => }/Mooc/Courses/Domain/CourseIdMother.php | 0 tests/{src => }/Mooc/Courses/Domain/CourseMother.php | 0 tests/{src => }/Mooc/Courses/Domain/CourseNameMother.php | 0 .../Infrastructure/Persistence/CourseRepositoryTest.php | 0 .../Application/Find/CoursesCounterResponseMother.php | 0 .../Application/Find/FindCoursesCounterQueryHandlerTest.php | 0 .../IncrementCoursesCounterOnCourseCreatedTest.php | 0 .../CoursesCounter/CoursesCounterModuleUnitTestCase.php | 0 .../Mooc/CoursesCounter/Domain/CoursesCounterIdMother.php | 0 .../Domain/CoursesCounterIncrementedDomainEventMother.php | 0 .../Mooc/CoursesCounter/Domain/CoursesCounterMother.php | 0 .../CoursesCounter/Domain/CoursesCounterTotalMother.php | 0 .../backoffice/backend => Mooc/Shared/Domain}/.gitkeep | 0 .../PhpUnit/MoocContextInfrastructureTestCase.php | 0 .../Infrastructure/PhpUnit/MoocEnvironmentArranger.php | 0 .../frontend => Mooc/Videos/Application}/.gitkeep | 0 tests/{apps/mooc/frontend => Mooc/Videos/Domain}/.gitkeep | 0 .../Shared/Domain => Mooc/Videos/Infrastructure}/.gitkeep | 0 tests/{src => }/Shared/Domain/Criteria/CriteriaMother.php | 0 .../{src => }/Shared/Domain/Criteria/FilterFieldMother.php | 0 tests/{src => }/Shared/Domain/Criteria/FilterMother.php | 0 .../{src => }/Shared/Domain/Criteria/FilterValueMother.php | 0 tests/{src => }/Shared/Domain/Criteria/FiltersMother.php | 0 tests/{src => }/Shared/Domain/Criteria/OrderByMother.php | 0 tests/{src => }/Shared/Domain/Criteria/OrderMother.php | 0 tests/{src => }/Shared/Domain/DuplicatorMother.php | 0 tests/{src => }/Shared/Domain/IntegerMother.php | 0 tests/{src => }/Shared/Domain/MotherCreator.php | 0 tests/{src => }/Shared/Domain/RandomElementPicker.php | 0 tests/{src => }/Shared/Domain/Repeater.php | 0 tests/{src => }/Shared/Domain/TestUtils.php | 0 tests/{src => }/Shared/Domain/UuidMother.php | 0 tests/{src => }/Shared/Domain/WordMother.php | 0 .../Shared/Infrastructure/Arranger/EnvironmentArranger.php | 0 tests/{src => }/Shared/Infrastructure/Behat/ApiContext.php | 0 .../Infrastructure/Behat/ApplicationFeatureContext.php | 0 .../Shared/Infrastructure/Bus/Command/FakeCommand.php | 0 .../Bus/Command/InMemorySymfonyCommandBusTest.php | 0 .../Bus/Event/MySql/MySqlDoctrineEventBusTest.php | 0 .../Bus/Event/RabbitMq/RabbitMqEventBusTest.php | 0 .../RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php | 0 .../{src => }/Shared/Infrastructure/Bus/Query/FakeQuery.php | 0 .../Shared/Infrastructure/Bus/Query/FakeResponse.php | 0 .../Bus/Query/InMemorySymfonyQueryBusTest.php | 0 .../Shared/Infrastructure/ConstantRandomNumberGenerator.php | 0 .../Shared/Infrastructure/Doctrine/DatabaseCleaner.php | 0 tests/{src => }/Shared/Infrastructure/Mink/MinkHelper.php | 0 .../Shared/Infrastructure/Mink/MinkSessionRequestHelper.php | 0 .../Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php | 0 .../Comparator/AggregateRootArraySimilarComparator.php | 0 .../PhpUnit/Comparator/AggregateRootSimilarComparator.php | 0 .../PhpUnit/Comparator/DateTimeSimilarComparator.php | 0 .../PhpUnit/Comparator/DateTimeStringSimilarComparator.php | 0 .../Comparator/DomainEventArraySimilarComparator.php | 0 .../PhpUnit/Comparator/DomainEventSimilarComparator.php | 0 .../PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php | 0 .../Infrastructure/PhpUnit/InfrastructureTestCase.php | 0 .../Shared/Infrastructure/PhpUnit/UnitTestCase.php | 0 tests/src/Mooc/Videos/Application/.gitkeep | 0 tests/src/Mooc/Videos/Domain/.gitkeep | 0 tests/src/Mooc/Videos/Infrastructure/.gitkeep | 0 84 files changed, 5 insertions(+), 5 deletions(-) rename {tests/apps/mooc/backend => apps/mooc/backend/tests}/features/courses/course_put.feature (100%) rename {tests/apps/mooc/backend => apps/mooc/backend/tests}/features/courses_counter/courses_counter_get.feature (100%) rename {tests/apps/mooc/backend => apps/mooc/backend/tests}/features/health_check/health_check_get.feature (100%) rename {tests/apps/mooc/backend => apps/mooc/backend/tests}/mooc_backend.yml (79%) rename tests/{src => }/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php (100%) rename tests/{src => }/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandMother.php (100%) rename tests/{src => }/Backoffice/Auth/AuthModuleUnitTestCase.php (100%) rename tests/{src => }/Backoffice/Auth/Domain/AuthPasswordMother.php (100%) rename tests/{src => }/Backoffice/Auth/Domain/AuthUserMother.php (100%) rename tests/{src => }/Backoffice/Auth/Domain/AuthUsernameMother.php (100%) rename tests/{src => }/Backoffice/Courses/BackofficeCoursesModuleInfrastructureTestCase.php (100%) rename tests/{src => }/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php (100%) rename tests/{src => }/Backoffice/Courses/Domain/BackofficeCourseMother.php (100%) rename tests/{src => }/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php (100%) rename tests/{src => }/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php (100%) rename tests/{src => }/Mooc/Courses/Application/Create/CreateCourseCommandMother.php (100%) rename tests/{src => }/Mooc/Courses/Application/Update/CourseRenamerTest.php (100%) rename tests/{src => }/Mooc/Courses/CoursesModuleInfrastructureTestCase.php (100%) rename tests/{src => }/Mooc/Courses/CoursesModuleUnitTestCase.php (100%) rename tests/{src => }/Mooc/Courses/Domain/CourseCreatedDomainEventMother.php (100%) rename tests/{src => }/Mooc/Courses/Domain/CourseDurationMother.php (100%) rename tests/{src => }/Mooc/Courses/Domain/CourseIdMother.php (100%) rename tests/{src => }/Mooc/Courses/Domain/CourseMother.php (100%) rename tests/{src => }/Mooc/Courses/Domain/CourseNameMother.php (100%) rename tests/{src => }/Mooc/Courses/Infrastructure/Persistence/CourseRepositoryTest.php (100%) rename tests/{src => }/Mooc/CoursesCounter/Application/Find/CoursesCounterResponseMother.php (100%) rename tests/{src => }/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php (100%) rename tests/{src => }/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php (100%) rename tests/{src => }/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php (100%) rename tests/{src => }/Mooc/CoursesCounter/Domain/CoursesCounterIdMother.php (100%) rename tests/{src => }/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEventMother.php (100%) rename tests/{src => }/Mooc/CoursesCounter/Domain/CoursesCounterMother.php (100%) rename tests/{src => }/Mooc/CoursesCounter/Domain/CoursesCounterTotalMother.php (100%) rename tests/{apps/backoffice/backend => Mooc/Shared/Domain}/.gitkeep (100%) rename tests/{src => }/Mooc/Shared/Infrastructure/PhpUnit/MoocContextInfrastructureTestCase.php (100%) rename tests/{src => }/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php (100%) rename tests/{apps/backoffice/frontend => Mooc/Videos/Application}/.gitkeep (100%) rename tests/{apps/mooc/frontend => Mooc/Videos/Domain}/.gitkeep (100%) rename tests/{src/Mooc/Shared/Domain => Mooc/Videos/Infrastructure}/.gitkeep (100%) rename tests/{src => }/Shared/Domain/Criteria/CriteriaMother.php (100%) rename tests/{src => }/Shared/Domain/Criteria/FilterFieldMother.php (100%) rename tests/{src => }/Shared/Domain/Criteria/FilterMother.php (100%) rename tests/{src => }/Shared/Domain/Criteria/FilterValueMother.php (100%) rename tests/{src => }/Shared/Domain/Criteria/FiltersMother.php (100%) rename tests/{src => }/Shared/Domain/Criteria/OrderByMother.php (100%) rename tests/{src => }/Shared/Domain/Criteria/OrderMother.php (100%) rename tests/{src => }/Shared/Domain/DuplicatorMother.php (100%) rename tests/{src => }/Shared/Domain/IntegerMother.php (100%) rename tests/{src => }/Shared/Domain/MotherCreator.php (100%) rename tests/{src => }/Shared/Domain/RandomElementPicker.php (100%) rename tests/{src => }/Shared/Domain/Repeater.php (100%) rename tests/{src => }/Shared/Domain/TestUtils.php (100%) rename tests/{src => }/Shared/Domain/UuidMother.php (100%) rename tests/{src => }/Shared/Domain/WordMother.php (100%) rename tests/{src => }/Shared/Infrastructure/Arranger/EnvironmentArranger.php (100%) rename tests/{src => }/Shared/Infrastructure/Behat/ApiContext.php (100%) rename tests/{src => }/Shared/Infrastructure/Behat/ApplicationFeatureContext.php (100%) rename tests/{src => }/Shared/Infrastructure/Bus/Command/FakeCommand.php (100%) rename tests/{src => }/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php (100%) rename tests/{src => }/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php (100%) rename tests/{src => }/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php (100%) rename tests/{src => }/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php (100%) rename tests/{src => }/Shared/Infrastructure/Bus/Query/FakeQuery.php (100%) rename tests/{src => }/Shared/Infrastructure/Bus/Query/FakeResponse.php (100%) rename tests/{src => }/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php (100%) rename tests/{src => }/Shared/Infrastructure/ConstantRandomNumberGenerator.php (100%) rename tests/{src => }/Shared/Infrastructure/Doctrine/DatabaseCleaner.php (100%) rename tests/{src => }/Shared/Infrastructure/Mink/MinkHelper.php (100%) rename tests/{src => }/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php (100%) rename tests/{src => }/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php (100%) rename tests/{src => }/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php (100%) rename tests/{src => }/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php (100%) rename tests/{src => }/Shared/Infrastructure/PhpUnit/Comparator/DateTimeSimilarComparator.php (100%) rename tests/{src => }/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php (100%) rename tests/{src => }/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php (100%) rename tests/{src => }/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php (100%) rename tests/{src => }/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php (100%) rename tests/{src => }/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php (100%) rename tests/{src => }/Shared/Infrastructure/PhpUnit/UnitTestCase.php (100%) delete mode 100644 tests/src/Mooc/Videos/Application/.gitkeep delete mode 100644 tests/src/Mooc/Videos/Domain/.gitkeep delete mode 100644 tests/src/Mooc/Videos/Infrastructure/.gitkeep diff --git a/tests/apps/mooc/backend/features/courses/course_put.feature b/apps/mooc/backend/tests/features/courses/course_put.feature similarity index 100% rename from tests/apps/mooc/backend/features/courses/course_put.feature rename to apps/mooc/backend/tests/features/courses/course_put.feature diff --git a/tests/apps/mooc/backend/features/courses_counter/courses_counter_get.feature b/apps/mooc/backend/tests/features/courses_counter/courses_counter_get.feature similarity index 100% rename from tests/apps/mooc/backend/features/courses_counter/courses_counter_get.feature rename to apps/mooc/backend/tests/features/courses_counter/courses_counter_get.feature diff --git a/tests/apps/mooc/backend/features/health_check/health_check_get.feature b/apps/mooc/backend/tests/features/health_check/health_check_get.feature similarity index 100% rename from tests/apps/mooc/backend/features/health_check/health_check_get.feature rename to apps/mooc/backend/tests/features/health_check/health_check_get.feature diff --git a/tests/apps/mooc/backend/mooc_backend.yml b/apps/mooc/backend/tests/mooc_backend.yml similarity index 79% rename from tests/apps/mooc/backend/mooc_backend.yml rename to apps/mooc/backend/tests/mooc_backend.yml index 094d5f85b..75681594e 100644 --- a/tests/apps/mooc/backend/mooc_backend.yml +++ b/apps/mooc/backend/tests/mooc_backend.yml @@ -12,18 +12,18 @@ mooc_backend: suites: health_check: - paths: [ tests/apps/mooc/backend/features/health_check ] + paths: [ apps/mooc/backend/tests/features/health_check ] contexts: - CodelyTv\Tests\Shared\Infrastructure\Behat\ApiContext courses: - paths: [ tests/apps/mooc/backend/features/courses ] + paths: [ apps/mooc/backend/tests/features/courses ] contexts: - CodelyTv\Tests\Shared\Infrastructure\Behat\ApplicationFeatureContext - CodelyTv\Tests\Shared\Infrastructure\Behat\ApiContext courses_counter: - paths: [ tests/apps/mooc/backend/features/courses_counter ] + paths: [ apps/mooc/backend/tests/features/courses_counter ] contexts: - CodelyTv\Tests\Shared\Infrastructure\Behat\ApplicationFeatureContext - CodelyTv\Tests\Shared\Infrastructure\Behat\ApiContext diff --git a/behat.yml b/behat.yml index 142855c34..af66723dd 100644 --- a/behat.yml +++ b/behat.yml @@ -1,2 +1,2 @@ imports: - - tests/apps/mooc/backend/mooc_backend.yml + - apps/mooc/backend/tests/mooc_backend.yml diff --git a/composer.json b/composer.json index bb4caae52..dd641ef64 100644 --- a/composer.json +++ b/composer.json @@ -60,7 +60,7 @@ }, "autoload-dev": { "psr-4": { - "CodelyTv\\Tests\\": ["tests/src"] + "CodelyTv\\Tests\\": ["tests"] } } } diff --git a/tests/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php b/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php similarity index 100% rename from tests/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php rename to tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php diff --git a/tests/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandMother.php b/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandMother.php similarity index 100% rename from tests/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandMother.php rename to tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandMother.php diff --git a/tests/src/Backoffice/Auth/AuthModuleUnitTestCase.php b/tests/Backoffice/Auth/AuthModuleUnitTestCase.php similarity index 100% rename from tests/src/Backoffice/Auth/AuthModuleUnitTestCase.php rename to tests/Backoffice/Auth/AuthModuleUnitTestCase.php diff --git a/tests/src/Backoffice/Auth/Domain/AuthPasswordMother.php b/tests/Backoffice/Auth/Domain/AuthPasswordMother.php similarity index 100% rename from tests/src/Backoffice/Auth/Domain/AuthPasswordMother.php rename to tests/Backoffice/Auth/Domain/AuthPasswordMother.php diff --git a/tests/src/Backoffice/Auth/Domain/AuthUserMother.php b/tests/Backoffice/Auth/Domain/AuthUserMother.php similarity index 100% rename from tests/src/Backoffice/Auth/Domain/AuthUserMother.php rename to tests/Backoffice/Auth/Domain/AuthUserMother.php diff --git a/tests/src/Backoffice/Auth/Domain/AuthUsernameMother.php b/tests/Backoffice/Auth/Domain/AuthUsernameMother.php similarity index 100% rename from tests/src/Backoffice/Auth/Domain/AuthUsernameMother.php rename to tests/Backoffice/Auth/Domain/AuthUsernameMother.php diff --git a/tests/src/Backoffice/Courses/BackofficeCoursesModuleInfrastructureTestCase.php b/tests/Backoffice/Courses/BackofficeCoursesModuleInfrastructureTestCase.php similarity index 100% rename from tests/src/Backoffice/Courses/BackofficeCoursesModuleInfrastructureTestCase.php rename to tests/Backoffice/Courses/BackofficeCoursesModuleInfrastructureTestCase.php diff --git a/tests/src/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php b/tests/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php similarity index 100% rename from tests/src/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php rename to tests/Backoffice/Courses/Domain/BackofficeCourseCriteriaMother.php diff --git a/tests/src/Backoffice/Courses/Domain/BackofficeCourseMother.php b/tests/Backoffice/Courses/Domain/BackofficeCourseMother.php similarity index 100% rename from tests/src/Backoffice/Courses/Domain/BackofficeCourseMother.php rename to tests/Backoffice/Courses/Domain/BackofficeCourseMother.php diff --git a/tests/src/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php b/tests/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php similarity index 100% rename from tests/src/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php rename to tests/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php diff --git a/tests/src/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php b/tests/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php similarity index 100% rename from tests/src/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php rename to tests/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php diff --git a/tests/src/Mooc/Courses/Application/Create/CreateCourseCommandMother.php b/tests/Mooc/Courses/Application/Create/CreateCourseCommandMother.php similarity index 100% rename from tests/src/Mooc/Courses/Application/Create/CreateCourseCommandMother.php rename to tests/Mooc/Courses/Application/Create/CreateCourseCommandMother.php diff --git a/tests/src/Mooc/Courses/Application/Update/CourseRenamerTest.php b/tests/Mooc/Courses/Application/Update/CourseRenamerTest.php similarity index 100% rename from tests/src/Mooc/Courses/Application/Update/CourseRenamerTest.php rename to tests/Mooc/Courses/Application/Update/CourseRenamerTest.php diff --git a/tests/src/Mooc/Courses/CoursesModuleInfrastructureTestCase.php b/tests/Mooc/Courses/CoursesModuleInfrastructureTestCase.php similarity index 100% rename from tests/src/Mooc/Courses/CoursesModuleInfrastructureTestCase.php rename to tests/Mooc/Courses/CoursesModuleInfrastructureTestCase.php diff --git a/tests/src/Mooc/Courses/CoursesModuleUnitTestCase.php b/tests/Mooc/Courses/CoursesModuleUnitTestCase.php similarity index 100% rename from tests/src/Mooc/Courses/CoursesModuleUnitTestCase.php rename to tests/Mooc/Courses/CoursesModuleUnitTestCase.php diff --git a/tests/src/Mooc/Courses/Domain/CourseCreatedDomainEventMother.php b/tests/Mooc/Courses/Domain/CourseCreatedDomainEventMother.php similarity index 100% rename from tests/src/Mooc/Courses/Domain/CourseCreatedDomainEventMother.php rename to tests/Mooc/Courses/Domain/CourseCreatedDomainEventMother.php diff --git a/tests/src/Mooc/Courses/Domain/CourseDurationMother.php b/tests/Mooc/Courses/Domain/CourseDurationMother.php similarity index 100% rename from tests/src/Mooc/Courses/Domain/CourseDurationMother.php rename to tests/Mooc/Courses/Domain/CourseDurationMother.php diff --git a/tests/src/Mooc/Courses/Domain/CourseIdMother.php b/tests/Mooc/Courses/Domain/CourseIdMother.php similarity index 100% rename from tests/src/Mooc/Courses/Domain/CourseIdMother.php rename to tests/Mooc/Courses/Domain/CourseIdMother.php diff --git a/tests/src/Mooc/Courses/Domain/CourseMother.php b/tests/Mooc/Courses/Domain/CourseMother.php similarity index 100% rename from tests/src/Mooc/Courses/Domain/CourseMother.php rename to tests/Mooc/Courses/Domain/CourseMother.php diff --git a/tests/src/Mooc/Courses/Domain/CourseNameMother.php b/tests/Mooc/Courses/Domain/CourseNameMother.php similarity index 100% rename from tests/src/Mooc/Courses/Domain/CourseNameMother.php rename to tests/Mooc/Courses/Domain/CourseNameMother.php diff --git a/tests/src/Mooc/Courses/Infrastructure/Persistence/CourseRepositoryTest.php b/tests/Mooc/Courses/Infrastructure/Persistence/CourseRepositoryTest.php similarity index 100% rename from tests/src/Mooc/Courses/Infrastructure/Persistence/CourseRepositoryTest.php rename to tests/Mooc/Courses/Infrastructure/Persistence/CourseRepositoryTest.php diff --git a/tests/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponseMother.php b/tests/Mooc/CoursesCounter/Application/Find/CoursesCounterResponseMother.php similarity index 100% rename from tests/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponseMother.php rename to tests/Mooc/CoursesCounter/Application/Find/CoursesCounterResponseMother.php diff --git a/tests/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php b/tests/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php similarity index 100% rename from tests/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php rename to tests/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php diff --git a/tests/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php b/tests/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php similarity index 100% rename from tests/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php rename to tests/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php diff --git a/tests/src/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php b/tests/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php similarity index 100% rename from tests/src/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php rename to tests/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php diff --git a/tests/src/Mooc/CoursesCounter/Domain/CoursesCounterIdMother.php b/tests/Mooc/CoursesCounter/Domain/CoursesCounterIdMother.php similarity index 100% rename from tests/src/Mooc/CoursesCounter/Domain/CoursesCounterIdMother.php rename to tests/Mooc/CoursesCounter/Domain/CoursesCounterIdMother.php diff --git a/tests/src/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEventMother.php b/tests/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEventMother.php similarity index 100% rename from tests/src/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEventMother.php rename to tests/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEventMother.php diff --git a/tests/src/Mooc/CoursesCounter/Domain/CoursesCounterMother.php b/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php similarity index 100% rename from tests/src/Mooc/CoursesCounter/Domain/CoursesCounterMother.php rename to tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php diff --git a/tests/src/Mooc/CoursesCounter/Domain/CoursesCounterTotalMother.php b/tests/Mooc/CoursesCounter/Domain/CoursesCounterTotalMother.php similarity index 100% rename from tests/src/Mooc/CoursesCounter/Domain/CoursesCounterTotalMother.php rename to tests/Mooc/CoursesCounter/Domain/CoursesCounterTotalMother.php diff --git a/tests/apps/backoffice/backend/.gitkeep b/tests/Mooc/Shared/Domain/.gitkeep similarity index 100% rename from tests/apps/backoffice/backend/.gitkeep rename to tests/Mooc/Shared/Domain/.gitkeep diff --git a/tests/src/Mooc/Shared/Infrastructure/PhpUnit/MoocContextInfrastructureTestCase.php b/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocContextInfrastructureTestCase.php similarity index 100% rename from tests/src/Mooc/Shared/Infrastructure/PhpUnit/MoocContextInfrastructureTestCase.php rename to tests/Mooc/Shared/Infrastructure/PhpUnit/MoocContextInfrastructureTestCase.php diff --git a/tests/src/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php b/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php similarity index 100% rename from tests/src/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php rename to tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php diff --git a/tests/apps/backoffice/frontend/.gitkeep b/tests/Mooc/Videos/Application/.gitkeep similarity index 100% rename from tests/apps/backoffice/frontend/.gitkeep rename to tests/Mooc/Videos/Application/.gitkeep diff --git a/tests/apps/mooc/frontend/.gitkeep b/tests/Mooc/Videos/Domain/.gitkeep similarity index 100% rename from tests/apps/mooc/frontend/.gitkeep rename to tests/Mooc/Videos/Domain/.gitkeep diff --git a/tests/src/Mooc/Shared/Domain/.gitkeep b/tests/Mooc/Videos/Infrastructure/.gitkeep similarity index 100% rename from tests/src/Mooc/Shared/Domain/.gitkeep rename to tests/Mooc/Videos/Infrastructure/.gitkeep diff --git a/tests/src/Shared/Domain/Criteria/CriteriaMother.php b/tests/Shared/Domain/Criteria/CriteriaMother.php similarity index 100% rename from tests/src/Shared/Domain/Criteria/CriteriaMother.php rename to tests/Shared/Domain/Criteria/CriteriaMother.php diff --git a/tests/src/Shared/Domain/Criteria/FilterFieldMother.php b/tests/Shared/Domain/Criteria/FilterFieldMother.php similarity index 100% rename from tests/src/Shared/Domain/Criteria/FilterFieldMother.php rename to tests/Shared/Domain/Criteria/FilterFieldMother.php diff --git a/tests/src/Shared/Domain/Criteria/FilterMother.php b/tests/Shared/Domain/Criteria/FilterMother.php similarity index 100% rename from tests/src/Shared/Domain/Criteria/FilterMother.php rename to tests/Shared/Domain/Criteria/FilterMother.php diff --git a/tests/src/Shared/Domain/Criteria/FilterValueMother.php b/tests/Shared/Domain/Criteria/FilterValueMother.php similarity index 100% rename from tests/src/Shared/Domain/Criteria/FilterValueMother.php rename to tests/Shared/Domain/Criteria/FilterValueMother.php diff --git a/tests/src/Shared/Domain/Criteria/FiltersMother.php b/tests/Shared/Domain/Criteria/FiltersMother.php similarity index 100% rename from tests/src/Shared/Domain/Criteria/FiltersMother.php rename to tests/Shared/Domain/Criteria/FiltersMother.php diff --git a/tests/src/Shared/Domain/Criteria/OrderByMother.php b/tests/Shared/Domain/Criteria/OrderByMother.php similarity index 100% rename from tests/src/Shared/Domain/Criteria/OrderByMother.php rename to tests/Shared/Domain/Criteria/OrderByMother.php diff --git a/tests/src/Shared/Domain/Criteria/OrderMother.php b/tests/Shared/Domain/Criteria/OrderMother.php similarity index 100% rename from tests/src/Shared/Domain/Criteria/OrderMother.php rename to tests/Shared/Domain/Criteria/OrderMother.php diff --git a/tests/src/Shared/Domain/DuplicatorMother.php b/tests/Shared/Domain/DuplicatorMother.php similarity index 100% rename from tests/src/Shared/Domain/DuplicatorMother.php rename to tests/Shared/Domain/DuplicatorMother.php diff --git a/tests/src/Shared/Domain/IntegerMother.php b/tests/Shared/Domain/IntegerMother.php similarity index 100% rename from tests/src/Shared/Domain/IntegerMother.php rename to tests/Shared/Domain/IntegerMother.php diff --git a/tests/src/Shared/Domain/MotherCreator.php b/tests/Shared/Domain/MotherCreator.php similarity index 100% rename from tests/src/Shared/Domain/MotherCreator.php rename to tests/Shared/Domain/MotherCreator.php diff --git a/tests/src/Shared/Domain/RandomElementPicker.php b/tests/Shared/Domain/RandomElementPicker.php similarity index 100% rename from tests/src/Shared/Domain/RandomElementPicker.php rename to tests/Shared/Domain/RandomElementPicker.php diff --git a/tests/src/Shared/Domain/Repeater.php b/tests/Shared/Domain/Repeater.php similarity index 100% rename from tests/src/Shared/Domain/Repeater.php rename to tests/Shared/Domain/Repeater.php diff --git a/tests/src/Shared/Domain/TestUtils.php b/tests/Shared/Domain/TestUtils.php similarity index 100% rename from tests/src/Shared/Domain/TestUtils.php rename to tests/Shared/Domain/TestUtils.php diff --git a/tests/src/Shared/Domain/UuidMother.php b/tests/Shared/Domain/UuidMother.php similarity index 100% rename from tests/src/Shared/Domain/UuidMother.php rename to tests/Shared/Domain/UuidMother.php diff --git a/tests/src/Shared/Domain/WordMother.php b/tests/Shared/Domain/WordMother.php similarity index 100% rename from tests/src/Shared/Domain/WordMother.php rename to tests/Shared/Domain/WordMother.php diff --git a/tests/src/Shared/Infrastructure/Arranger/EnvironmentArranger.php b/tests/Shared/Infrastructure/Arranger/EnvironmentArranger.php similarity index 100% rename from tests/src/Shared/Infrastructure/Arranger/EnvironmentArranger.php rename to tests/Shared/Infrastructure/Arranger/EnvironmentArranger.php diff --git a/tests/src/Shared/Infrastructure/Behat/ApiContext.php b/tests/Shared/Infrastructure/Behat/ApiContext.php similarity index 100% rename from tests/src/Shared/Infrastructure/Behat/ApiContext.php rename to tests/Shared/Infrastructure/Behat/ApiContext.php diff --git a/tests/src/Shared/Infrastructure/Behat/ApplicationFeatureContext.php b/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php similarity index 100% rename from tests/src/Shared/Infrastructure/Behat/ApplicationFeatureContext.php rename to tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php diff --git a/tests/src/Shared/Infrastructure/Bus/Command/FakeCommand.php b/tests/Shared/Infrastructure/Bus/Command/FakeCommand.php similarity index 100% rename from tests/src/Shared/Infrastructure/Bus/Command/FakeCommand.php rename to tests/Shared/Infrastructure/Bus/Command/FakeCommand.php diff --git a/tests/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php b/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php similarity index 100% rename from tests/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php rename to tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php diff --git a/tests/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php b/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php similarity index 100% rename from tests/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php rename to tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php diff --git a/tests/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php similarity index 100% rename from tests/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php rename to tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php diff --git a/tests/src/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php similarity index 100% rename from tests/src/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php rename to tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php diff --git a/tests/src/Shared/Infrastructure/Bus/Query/FakeQuery.php b/tests/Shared/Infrastructure/Bus/Query/FakeQuery.php similarity index 100% rename from tests/src/Shared/Infrastructure/Bus/Query/FakeQuery.php rename to tests/Shared/Infrastructure/Bus/Query/FakeQuery.php diff --git a/tests/src/Shared/Infrastructure/Bus/Query/FakeResponse.php b/tests/Shared/Infrastructure/Bus/Query/FakeResponse.php similarity index 100% rename from tests/src/Shared/Infrastructure/Bus/Query/FakeResponse.php rename to tests/Shared/Infrastructure/Bus/Query/FakeResponse.php diff --git a/tests/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php b/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php similarity index 100% rename from tests/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php rename to tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php diff --git a/tests/src/Shared/Infrastructure/ConstantRandomNumberGenerator.php b/tests/Shared/Infrastructure/ConstantRandomNumberGenerator.php similarity index 100% rename from tests/src/Shared/Infrastructure/ConstantRandomNumberGenerator.php rename to tests/Shared/Infrastructure/ConstantRandomNumberGenerator.php diff --git a/tests/src/Shared/Infrastructure/Doctrine/DatabaseCleaner.php b/tests/Shared/Infrastructure/Doctrine/DatabaseCleaner.php similarity index 100% rename from tests/src/Shared/Infrastructure/Doctrine/DatabaseCleaner.php rename to tests/Shared/Infrastructure/Doctrine/DatabaseCleaner.php diff --git a/tests/src/Shared/Infrastructure/Mink/MinkHelper.php b/tests/Shared/Infrastructure/Mink/MinkHelper.php similarity index 100% rename from tests/src/Shared/Infrastructure/Mink/MinkHelper.php rename to tests/Shared/Infrastructure/Mink/MinkHelper.php diff --git a/tests/src/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php b/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php similarity index 100% rename from tests/src/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php rename to tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php diff --git a/tests/src/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php b/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php similarity index 100% rename from tests/src/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php rename to tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php diff --git a/tests/src/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php similarity index 100% rename from tests/src/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php rename to tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php diff --git a/tests/src/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php similarity index 100% rename from tests/src/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php rename to tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php diff --git a/tests/src/Shared/Infrastructure/PhpUnit/Comparator/DateTimeSimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeSimilarComparator.php similarity index 100% rename from tests/src/Shared/Infrastructure/PhpUnit/Comparator/DateTimeSimilarComparator.php rename to tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeSimilarComparator.php diff --git a/tests/src/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php similarity index 100% rename from tests/src/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php rename to tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php diff --git a/tests/src/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php similarity index 100% rename from tests/src/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php rename to tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php diff --git a/tests/src/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php similarity index 100% rename from tests/src/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php rename to tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php diff --git a/tests/src/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php b/tests/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php similarity index 100% rename from tests/src/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php rename to tests/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php diff --git a/tests/src/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php b/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php similarity index 100% rename from tests/src/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php rename to tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php diff --git a/tests/src/Shared/Infrastructure/PhpUnit/UnitTestCase.php b/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php similarity index 100% rename from tests/src/Shared/Infrastructure/PhpUnit/UnitTestCase.php rename to tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php diff --git a/tests/src/Mooc/Videos/Application/.gitkeep b/tests/src/Mooc/Videos/Application/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/tests/src/Mooc/Videos/Domain/.gitkeep b/tests/src/Mooc/Videos/Domain/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/tests/src/Mooc/Videos/Infrastructure/.gitkeep b/tests/src/Mooc/Videos/Infrastructure/.gitkeep deleted file mode 100644 index e69de29bb..000000000 From 1f55edb467e21cd32645b40f0fb7050d5ea4aca2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Wed, 3 Jun 2020 15:03:41 +0200 Subject: [PATCH 018/106] Move http requests to /etc --- {doc => etc}/endpoints/backoffice_frontend.http | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {doc => etc}/endpoints/backoffice_frontend.http (100%) diff --git a/doc/endpoints/backoffice_frontend.http b/etc/endpoints/backoffice_frontend.http similarity index 100% rename from doc/endpoints/backoffice_frontend.http rename to etc/endpoints/backoffice_frontend.http From f959b7e2c23860c4ce97d569b9ef99361a67c885 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Wed, 3 Jun 2020 15:22:00 +0200 Subject: [PATCH 019/106] Remove non used methods --- apps/backoffice/backend/config/services_test.yaml | 2 +- .../backoffice/frontend/config/services_test.yaml | 2 +- apps/mooc/backend/config/services_test.yaml | 2 +- phpunit.xml | 2 +- src/Shared/Domain/Assert.php | 12 ------------ src/Shared/Domain/Criteria/FilterOperator.php | 2 +- src/Shared/Domain/Utils.php | 11 ++--------- .../Bus/Event/RabbitMq/RabbitMqConnection.php | 12 +++++------- .../RabbitMq/RabbitMqDomainEventsConsumer.php | 8 ++++---- .../Bus/Query/InMemorySymfonyQueryBus.php | 2 +- .../Doctrine/DoctrineCriteriaConverter.php | 15 --------------- .../Symfony/ApiExceptionListener.php | 4 +++- 12 files changed, 20 insertions(+), 54 deletions(-) diff --git a/apps/backoffice/backend/config/services_test.yaml b/apps/backoffice/backend/config/services_test.yaml index 934fc56a0..3a81827df 100644 --- a/apps/backoffice/backend/config/services_test.yaml +++ b/apps/backoffice/backend/config/services_test.yaml @@ -7,7 +7,7 @@ services: autowire: true CodelyTv\Tests\: - resource: '../../../../tests/src' + resource: '../../../../tests' # -- IMPLEMENTATIONS SELECTOR -- CodelyTv\Shared\Domain\Bus\Event\EventBus: '@CodelyTv\Shared\Infrastructure\Bus\Event\InMemory\InMemorySymfonyEventBus' diff --git a/apps/backoffice/frontend/config/services_test.yaml b/apps/backoffice/frontend/config/services_test.yaml index 934fc56a0..3a81827df 100644 --- a/apps/backoffice/frontend/config/services_test.yaml +++ b/apps/backoffice/frontend/config/services_test.yaml @@ -7,7 +7,7 @@ services: autowire: true CodelyTv\Tests\: - resource: '../../../../tests/src' + resource: '../../../../tests' # -- IMPLEMENTATIONS SELECTOR -- CodelyTv\Shared\Domain\Bus\Event\EventBus: '@CodelyTv\Shared\Infrastructure\Bus\Event\InMemory\InMemorySymfonyEventBus' diff --git a/apps/mooc/backend/config/services_test.yaml b/apps/mooc/backend/config/services_test.yaml index e3b6c91dd..8e4fe2146 100644 --- a/apps/mooc/backend/config/services_test.yaml +++ b/apps/mooc/backend/config/services_test.yaml @@ -7,7 +7,7 @@ services: autowire: true CodelyTv\Tests\: - resource: '../../../../tests/src' + resource: '../../../../tests' # Instance selector CodelyTv\Shared\Domain\RandomNumberGenerator: '@CodelyTv\Tests\Shared\Infrastructure\ConstantRandomNumberGenerator' diff --git a/phpunit.xml b/phpunit.xml index d6b6663a6..232119235 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -31,7 +31,7 @@ - ./tests/src + ./tests diff --git a/src/Shared/Domain/Assert.php b/src/Shared/Domain/Assert.php index cdb49e0a7..92817d74a 100644 --- a/src/Shared/Domain/Assert.php +++ b/src/Shared/Domain/Assert.php @@ -23,16 +23,4 @@ public static function instanceOf($class, $item): void ); } } - - public static function money($value): void - { - if (!self::isValidMoneyAmount($value)) { - throw new InvalidArgumentException(sprintf('The value <%s> is not a valid money amount', $value)); - } - } - - private static function isValidMoneyAmount($value): bool - { - return is_numeric($value) && $value >= 0; - } } diff --git a/src/Shared/Domain/Criteria/FilterOperator.php b/src/Shared/Domain/Criteria/FilterOperator.php index 6b2e4ad1a..319318590 100644 --- a/src/Shared/Domain/Criteria/FilterOperator.php +++ b/src/Shared/Domain/Criteria/FilterOperator.php @@ -20,7 +20,7 @@ final class FilterOperator extends Enum public const LT = '<'; public const CONTAINS = 'CONTAINS'; public const NOT_CONTAINS = 'NOT_CONTAINS'; - private static $containing = [self::CONTAINS, self::NOT_CONTAINS]; + private static array $containing = [self::CONTAINS, self::NOT_CONTAINS]; public static function equal(): self { diff --git a/src/Shared/Domain/Utils.php b/src/Shared/Domain/Utils.php index b9997d8c2..34a3c48ca 100644 --- a/src/Shared/Domain/Utils.php +++ b/src/Shared/Domain/Utils.php @@ -72,14 +72,6 @@ public static function dot($array, $prepend = ''): array return $results; } - public static function directoriesIn(string $path): array - { - return filter( - static fn(string $possibleModule) => !in_array($possibleModule, ['.', '..']), - scandir($path) - ); - } - public static function filesIn(string $path, $fileType): array { return filter( @@ -88,9 +80,10 @@ public static function filesIn(string $path, $fileType): array ); } - public function getClassBasename(object $object): string + public static function extractClassName(object $object): string { $reflect = new ReflectionClass($object); + return $reflect->getShortName(); } } diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php index 8f274bc4d..c2712db17 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php @@ -11,15 +11,13 @@ final class RabbitMqConnection { - /** @var AMQPConnection */ - private static $connection; - /** @var AMQPChannel */ - private static $channel; + private static AMQPConnection $connection; + private static AMQPChannel $channel; /** @var AMQPExchange[] */ - private static $exchanges = []; + private static array $exchanges = []; /** @var AMQPQueue[] */ - private static $queues = []; - private $configuration; + private static array $queues = []; + private array $configuration; public function __construct(array $configuration) { diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php index 21d2a8162..16a727eaf 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqDomainEventsConsumer.php @@ -14,10 +14,10 @@ final class RabbitMqDomainEventsConsumer { - private $connection; - private $deserializer; - private $exchangeName; - private $maxRetries; + private RabbitMqConnection $connection; + private DomainEventJsonDeserializer $deserializer; + private string $exchangeName; + private int $maxRetries; public function __construct( RabbitMqConnection $connection, diff --git a/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBus.php b/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBus.php index 54bd98847..bf00586b9 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 $bus; + private MessageBus $bus; public function __construct(iterable $queryHandlers) { diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php index 6f16b4e57..cea3bfd88 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php @@ -35,16 +35,6 @@ public static function convert( return $converter->convertToDoctrineCriteria(); } - public static function convertToCount( - Criteria $criteria, - array $criteriaToDoctrineFields = [], - array $hydrators = [] - ): DoctrineCriteria { - $converter = new self($criteria, $criteriaToDoctrineFields, $hydrators); - - return $converter->convertToDoctrineCriteriaToCount(); - } - private function convertToDoctrineCriteria(): DoctrineCriteria { return new DoctrineCriteria( @@ -55,11 +45,6 @@ private function convertToDoctrineCriteria(): DoctrineCriteria ); } - private function convertToDoctrineCriteriaToCount(): DoctrineCriteria - { - return new DoctrineCriteria($this->buildExpression($this->criteria), $this->formatOrder($this->criteria)); - } - private function buildExpression(Criteria $criteria): ?CompositeExpression { if ($criteria->hasFilters()) { diff --git a/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php b/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php index b936f3217..4474cfb09 100644 --- a/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php +++ b/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php @@ -38,6 +38,8 @@ private function exceptionCodeFor(Throwable $error): string { $domainErrorClass = DomainError::class; - return $error instanceof $domainErrorClass ? $error->errorCode() : Utils::toSnakeCase(Utils::getClassBasename($error)); + return $error instanceof $domainErrorClass + ? $error->errorCode() + : Utils::toSnakeCase(Utils::extractClassName($error)); } } From 39ec566b1f01032882170c5e5fd0c7616ed9bd8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Wed, 3 Jun 2020 15:28:32 +0200 Subject: [PATCH 020/106] Move databases to etc --- apps/backoffice/backend/config/services.yaml | 2 +- apps/backoffice/frontend/config/services.yaml | 2 +- {databases => etc/databases}/backoffice/courses.json | 0 {databases => etc/databases}/mooc.sql | 0 .../Infrastructure/Doctrine/MoocEntityManagerFactory.php | 2 +- .../Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php | 4 ++-- 6 files changed, 5 insertions(+), 5 deletions(-) rename {databases => etc/databases}/backoffice/courses.json (100%) rename {databases => etc/databases}/mooc.sql (100%) diff --git a/apps/backoffice/backend/config/services.yaml b/apps/backoffice/backend/config/services.yaml index 674162405..7f02db2be 100644 --- a/apps/backoffice/backend/config/services.yaml +++ b/apps/backoffice/backend/config/services.yaml @@ -84,7 +84,7 @@ services: arguments: - '%env(BACKOFFICE_ELASTICSEARCH_HOST)%' - '%env(BACKOFFICE_ELASTICSEARCH_INDEX_PREFIX)%' - - '%kernel.project_dir%/../../../databases/backoffice' + - '%kernel.project_dir%/../../../etc/databases/backoffice' - '%env(APP_ENV)%' public: true diff --git a/apps/backoffice/frontend/config/services.yaml b/apps/backoffice/frontend/config/services.yaml index 7f0e8d50e..b1ef9c69f 100644 --- a/apps/backoffice/frontend/config/services.yaml +++ b/apps/backoffice/frontend/config/services.yaml @@ -84,7 +84,7 @@ services: arguments: - '%env(BACKOFFICE_ELASTICSEARCH_HOST)%' - '%env(BACKOFFICE_ELASTICSEARCH_INDEX_PREFIX)%' - - '%kernel.project_dir%/../../../databases/backoffice' + - '%kernel.project_dir%/../../../etc/databases/backoffice' - '%env(APP_ENV)%' public: true diff --git a/databases/backoffice/courses.json b/etc/databases/backoffice/courses.json similarity index 100% rename from databases/backoffice/courses.json rename to etc/databases/backoffice/courses.json diff --git a/databases/mooc.sql b/etc/databases/mooc.sql similarity index 100% rename from databases/mooc.sql rename to etc/databases/mooc.sql diff --git a/src/Mooc/Shared/Infrastructure/Doctrine/MoocEntityManagerFactory.php b/src/Mooc/Shared/Infrastructure/Doctrine/MoocEntityManagerFactory.php index 3933444a6..4153955e0 100644 --- a/src/Mooc/Shared/Infrastructure/Doctrine/MoocEntityManagerFactory.php +++ b/src/Mooc/Shared/Infrastructure/Doctrine/MoocEntityManagerFactory.php @@ -9,7 +9,7 @@ final class MoocEntityManagerFactory { - private const SCHEMA_PATH = __DIR__ . '/../../../../../databases/mooc.sql'; + private const SCHEMA_PATH = __DIR__ . '/../../../../../etc/databases/mooc.sql'; public static function create(array $parameters, string $environment): EntityManagerInterface { diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php index c2712db17..9f1a365ff 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php @@ -11,8 +11,8 @@ final class RabbitMqConnection { - private static AMQPConnection $connection; - private static AMQPChannel $channel; + private static ?AMQPConnection $connection = null; + private static ?AMQPChannel $channel = null; /** @var AMQPExchange[] */ private static array $exchanges = []; /** @var AMQPQueue[] */ From e6ee652a7f4ecfef0fa13fdd909d832f5ca4a45d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Wed, 3 Jun 2020 16:10:33 +0200 Subject: [PATCH 021/106] Add minimum stability --- composer.json | 3 ++- composer.lock | 48 ++++++++---------------------------------------- 2 files changed, 10 insertions(+), 41 deletions(-) diff --git a/composer.json b/composer.json index dd641ef64..14b7f778c 100644 --- a/composer.json +++ b/composer.json @@ -62,5 +62,6 @@ "psr-4": { "CodelyTv\\Tests\\": ["tests"] } - } + }, + "minimum-stability": "stable" } diff --git a/composer.lock b/composer.lock index 1e62ef733..6092ea10a 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": "90c4207255091c7e41a5190c1c90635a", + "content-hash": "8ce04d11e438732accdb0699c3a50866", "packages": [ { "name": "doctrine/annotations", @@ -5033,22 +5033,21 @@ "packages-dev": [ { "name": "behat/behat", - "version": "v3.6.1", + "version": "v3.7.0", "source": { "type": "git", "url": "https://github.com/Behat/Behat.git", - "reference": "9bfe195b4745c32e068af03fa4df9558b4916d30" + "reference": "08052f739619a9e9f62f457a67302f0715e6dd13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Behat/zipball/9bfe195b4745c32e068af03fa4df9558b4916d30", - "reference": "9bfe195b4745c32e068af03fa4df9558b4916d30", + "url": "https://api.github.com/repos/Behat/Behat/zipball/08052f739619a9e9f62f457a67302f0715e6dd13", + "reference": "08052f739619a9e9f62f457a67302f0715e6dd13", "shasum": "" }, "require": { "behat/gherkin": "^4.6.0", "behat/transliterator": "^1.2", - "container-interop/container-interop": "^1.2", "ext-mbstring": "*", "php": ">=5.3.3", "psr/container": "^1.0", @@ -5060,8 +5059,9 @@ "symfony/yaml": "^2.7.51 || ^3.0 || ^4.0 || ^5.0" }, "require-dev": { + "container-interop/container-interop": "^1.2", "herrera-io/box": "~1.6.1", - "phpunit/phpunit": "^4.8.36 || ^6.3", + "phpunit/phpunit": "^4.8.36 || ^6.5.14 || ^7.5.20", "symfony/process": "~2.5 || ^3.0 || ^4.0 || ^5.0" }, "suggest": { @@ -5109,7 +5109,7 @@ "symfony", "testing" ], - "time": "2020-02-06T09:54:48+00:00" + "time": "2020-06-03T13:08:44+00:00" }, { "name": "behat/gherkin", @@ -5333,38 +5333,6 @@ ], "time": "2020-01-14T16:39:13+00:00" }, - { - "name": "container-interop/container-interop", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/container-interop/container-interop.git", - "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", - "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", - "shasum": "" - }, - "require": { - "psr/container": "^1.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Interop\\Container\\": "src/Interop/Container/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", - "homepage": "https://github.com/container-interop/container-interop", - "abandoned": "psr/container", - "time": "2017-02-14T19:40:03+00:00" - }, { "name": "friends-of-behat/mink-extension", "version": "v2.4.0", From 907793aad82877be6ab3286df608eb4382b050e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Wed, 3 Jun 2020 16:14:00 +0200 Subject: [PATCH 022/106] Use phpunit 9 --- composer.json | 2 +- composer.lock | 527 ++++++++++++++++++++++++++++++++------------------ 2 files changed, 345 insertions(+), 184 deletions(-) diff --git a/composer.json b/composer.json index 14b7f778c..48ef5b128 100644 --- a/composer.json +++ b/composer.json @@ -40,7 +40,7 @@ "behat/mink-browserkit-driver": "^1.3", "friends-of-behat/symfony-extension": "2.1.0-BETA.1", - "phpunit/phpunit": "^8.5", + "phpunit/phpunit": "^9.1", "mockery/mockery": "^1.2", "fzaninotto/faker": "^1.8", diff --git a/composer.lock b/composer.lock index 6092ea10a..bda815f9a 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": "8ce04d11e438732accdb0699c3a50866", + "content-hash": "36d016d3964f43eaae650522e3866b52", "packages": [ { "name": "doctrine/annotations", @@ -5991,40 +5991,41 @@ }, { "name": "phpunit/php-code-coverage", - "version": "7.0.10", + "version": "8.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf" + "reference": "ca6647ffddd2add025ab3f21644a441d7c146cdc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f1884187926fbb755a9aaf0b3836ad3165b478bf", - "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca6647ffddd2add025ab3f21644a441d7c146cdc", + "reference": "ca6647ffddd2add025ab3f21644a441d7c146cdc", "shasum": "" }, "require": { "ext-dom": "*", "ext-xmlwriter": "*", - "php": "^7.2", - "phpunit/php-file-iterator": "^2.0.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.1.1", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^4.2.2", - "sebastian/version": "^2.0.1", + "php": "^7.3", + "phpunit/php-file-iterator": "^3.0", + "phpunit/php-text-template": "^2.0", + "phpunit/php-token-stream": "^4.0", + "sebastian/code-unit-reverse-lookup": "^2.0", + "sebastian/environment": "^5.0", + "sebastian/version": "^3.0", "theseer/tokenizer": "^1.1.3" }, "require-dev": { - "phpunit/phpunit": "^8.2.2" + "phpunit/phpunit": "^9.0" }, "suggest": { - "ext-xdebug": "^2.7.2" + "ext-pcov": "*", + "ext-xdebug": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "7.0-dev" + "dev-master": "8.0-dev" } }, "autoload": { @@ -6050,32 +6051,38 @@ "testing", "xunit" ], - "time": "2019-11-20T13:55:58+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-05-23T08:02:54+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "2.0.2", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "050bedf145a257b1ff02746c31894800e5122946" + "reference": "4ac5b3e13df14829daa60a2eb4fdd2f2b7d33cf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", - "reference": "050bedf145a257b1ff02746c31894800e5122946", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/4ac5b3e13df14829daa60a2eb4fdd2f2b7d33cf4", + "reference": "4ac5b3e13df14829daa60a2eb4fdd2f2b7d33cf4", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.3" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -6100,26 +6107,90 @@ "filesystem", "iterator" ], - "time": "2018-09-13T20:33:42+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-04-18T05:02:12+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "7579d5a1ba7f3ac11c80004d205877911315ae7a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/7579d5a1ba7f3ac11c80004d205877911315ae7a", + "reference": "7579d5a1ba7f3ac11c80004d205877911315ae7a", + "shasum": "" + }, + "require": { + "php": "^7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "time": "2020-02-07T06:06:11+00:00" }, { "name": "phpunit/php-text-template", - "version": "1.2.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "reference": "526dc996cc0ebdfa428cd2dfccd79b7b53fee346" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/526dc996cc0ebdfa428cd2dfccd79b7b53fee346", + "reference": "526dc996cc0ebdfa428cd2dfccd79b7b53fee346", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -6141,32 +6212,32 @@ "keywords": [ "template" ], - "time": "2015-06-21T13:50:34+00:00" + "time": "2020-02-01T07:43:44+00:00" }, { "name": "phpunit/php-timer", - "version": "2.1.2", + "version": "3.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" + "reference": "dc9368fae6ef2ffa57eba80a7410bcef81df6258" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/dc9368fae6ef2ffa57eba80a7410bcef81df6258", + "reference": "dc9368fae6ef2ffa57eba80a7410bcef81df6258", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.3" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -6190,33 +6261,39 @@ "keywords": [ "timer" ], - "time": "2019-06-07T04:22:29+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-04-20T06:00:37+00:00" }, { "name": "phpunit/php-token-stream", - "version": "3.1.1", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" + "reference": "cdc0db5aed8fbfaf475fbd95bfd7bab83c7a779c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", - "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/cdc0db5aed8fbfaf475fbd95bfd7bab83c7a779c", + "reference": "cdc0db5aed8fbfaf475fbd95bfd7bab83c7a779c", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": "^7.1" + "php": "^7.3" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -6239,20 +6316,26 @@ "keywords": [ "tokenizer" ], - "time": "2019-09-17T06:23:10+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-05-06T09:56:31+00:00" }, { "name": "phpunit/phpunit", - "version": "8.5.5", + "version": "9.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "63dda3b212a0025d380a745f91bdb4d8c985adb7" + "reference": "1b570cd7edbe136055bf5f651857dc8af6b829d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/63dda3b212a0025d380a745f91bdb4d8c985adb7", - "reference": "63dda3b212a0025d380a745f91bdb4d8c985adb7", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1b570cd7edbe136055bf5f651857dc8af6b829d2", + "reference": "1b570cd7edbe136055bf5f651857dc8af6b829d2", "shasum": "" }, "require": { @@ -6266,29 +6349,31 @@ "myclabs/deep-copy": "^1.9.1", "phar-io/manifest": "^1.0.3", "phar-io/version": "^2.0.1", - "php": "^7.2", + "php": "^7.3", "phpspec/prophecy": "^1.8.1", - "phpunit/php-code-coverage": "^7.0.7", - "phpunit/php-file-iterator": "^2.0.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1.2", - "sebastian/comparator": "^3.0.2", - "sebastian/diff": "^3.0.2", - "sebastian/environment": "^4.2.2", - "sebastian/exporter": "^3.1.1", - "sebastian/global-state": "^3.0.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0.1", - "sebastian/type": "^1.1.3", - "sebastian/version": "^2.0.1" + "phpunit/php-code-coverage": "^8.0.1", + "phpunit/php-file-iterator": "^3.0", + "phpunit/php-invoker": "^3.0", + "phpunit/php-text-template": "^2.0", + "phpunit/php-timer": "^3.1.4", + "sebastian/code-unit": "^1.0.2", + "sebastian/comparator": "^4.0", + "sebastian/diff": "^4.0", + "sebastian/environment": "^5.0.1", + "sebastian/exporter": "^4.0", + "sebastian/global-state": "^4.0", + "sebastian/object-enumerator": "^4.0", + "sebastian/resource-operations": "^3.0", + "sebastian/type": "^2.0", + "sebastian/version": "^3.0" }, "require-dev": { - "ext-pdo": "*" + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0" }, "suggest": { "ext-soap": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0.0" + "ext-xdebug": "*" }, "bin": [ "phpunit" @@ -6296,12 +6381,15 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "8.5-dev" + "dev-master": "9.1-dev" } }, "autoload": { "classmap": [ "src/" + ], + "files": [ + "src/Framework/Assert/Functions.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -6332,7 +6420,7 @@ "type": "github" } ], - "time": "2020-05-22T13:51:52+00:00" + "time": "2020-05-22T13:54:05+00:00" }, { "name": "roave/security-advisories", @@ -6614,30 +6702,82 @@ ], "time": "2020-05-28T00:01:39+00:00" }, + { + "name": "sebastian/code-unit", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "ac958085bc19fcd1d36425c781ef4cbb5b06e2a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/ac958085bc19fcd1d36425c781ef4cbb5b06e2a5", + "reference": "ac958085bc19fcd1d36425c781ef4cbb5b06e2a5", + "shasum": "" + }, + "require": { + "php": "^7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-04-30T05:58:10+00:00" + }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + "reference": "5b5dbe0044085ac41df47e79d34911a15b96d82e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5b5dbe0044085ac41df47e79d34911a15b96d82e", + "reference": "5b5dbe0044085ac41df47e79d34911a15b96d82e", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.3" }, "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -6657,34 +6797,34 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2017-03-04T06:30:41+00:00" + "time": "2020-02-07T06:20:13+00:00" }, { "name": "sebastian/comparator", - "version": "3.0.2", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" + "reference": "85b3435da967696ed618ff745f32be3ff4a2b8e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85b3435da967696ed618ff745f32be3ff4a2b8e8", + "reference": "85b3435da967696ed618ff745f32be3ff4a2b8e8", "shasum": "" }, "require": { - "php": "^7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" + "php": "^7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -6697,6 +6837,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -6708,10 +6852,6 @@ { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" } ], "description": "Provides the functionality to compare PHP values for equality", @@ -6721,33 +6861,33 @@ "compare", "equality" ], - "time": "2018-07-12T15:12:46+00:00" + "time": "2020-02-07T06:08:51+00:00" }, { "name": "sebastian/diff", - "version": "3.0.2", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" + "reference": "3e523c576f29dacecff309f35e4cc5a5c168e78a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3e523c576f29dacecff309f35e4cc5a5c168e78a", + "reference": "3e523c576f29dacecff309f35e4cc5a5c168e78a", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.3" }, "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" + "phpunit/phpunit": "^9.0", + "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -6760,13 +6900,13 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], "description": "Diff implementation", @@ -6777,27 +6917,33 @@ "unidiff", "unified diff" ], - "time": "2019-02-04T06:01:07+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-05-08T05:01:12+00:00" }, { "name": "sebastian/environment", - "version": "4.2.3", + "version": "5.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" + "reference": "c753f04d68cd489b6973cf9b4e505e191af3b05c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", - "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/c753f04d68cd489b6973cf9b4e505e191af3b05c", + "reference": "c753f04d68cd489b6973cf9b4e505e191af3b05c", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.3" }, "require-dev": { - "phpunit/phpunit": "^7.5" + "phpunit/phpunit": "^9.0" }, "suggest": { "ext-posix": "*" @@ -6805,7 +6951,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -6830,34 +6976,40 @@ "environment", "hhvm" ], - "time": "2019-11-20T08:46:58+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-04-14T13:36:52+00:00" }, { "name": "sebastian/exporter", - "version": "3.1.2", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" + "reference": "80c26562e964016538f832f305b2286e1ec29566" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/80c26562e964016538f832f305b2286e1ec29566", + "reference": "80c26562e964016538f832f305b2286e1ec29566", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/recursion-context": "^3.0" + "php": "^7.3", + "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -6897,30 +7049,30 @@ "export", "exporter" ], - "time": "2019-09-14T09:02:43+00:00" + "time": "2020-02-07T06:10:52+00:00" }, { "name": "sebastian/global-state", - "version": "3.0.0", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4" + "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", - "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bdb1e7c79e592b8c82cb1699be3c8743119b8a72", + "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72", "shasum": "" }, "require": { - "php": "^7.2", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": "^7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^8.0" + "phpunit/phpunit": "^9.0" }, "suggest": { "ext-uopz": "*" @@ -6928,7 +7080,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -6951,34 +7103,34 @@ "keywords": [ "global state" ], - "time": "2019-02-01T05:30:01+00:00" + "time": "2020-02-07T06:11:37+00:00" }, { "name": "sebastian/object-enumerator", - "version": "3.0.3", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + "reference": "e67516b175550abad905dc952f43285957ef4363" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67516b175550abad905dc952f43285957ef4363", + "reference": "e67516b175550abad905dc952f43285957ef4363", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": "^7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -6998,32 +7150,32 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-08-03T12:35:26+00:00" + "time": "2020-02-07T06:12:23+00:00" }, { "name": "sebastian/object-reflector", - "version": "1.1.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "773f97c67f28de00d397be301821b06708fca0be" + "reference": "f4fd0835cabb0d4a6546d9fe291e5740037aa1e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", - "reference": "773f97c67f28de00d397be301821b06708fca0be", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/f4fd0835cabb0d4a6546d9fe291e5740037aa1e7", + "reference": "f4fd0835cabb0d4a6546d9fe291e5740037aa1e7", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -7043,32 +7195,32 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2017-03-29T09:07:27+00:00" + "time": "2020-02-07T06:19:40+00:00" }, { "name": "sebastian/recursion-context", - "version": "3.0.0", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + "reference": "cdd86616411fc3062368b720b0425de10bd3d579" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cdd86616411fc3062368b720b0425de10bd3d579", + "reference": "cdd86616411fc3062368b720b0425de10bd3d579", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -7081,14 +7233,14 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, { "name": "Adam Harvey", "email": "aharvey@php.net" @@ -7096,29 +7248,32 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03T06:23:57+00:00" + "time": "2020-02-07T06:18:20+00:00" }, { "name": "sebastian/resource-operations", - "version": "2.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" + "reference": "8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98", + "reference": "8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -7138,32 +7293,32 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2018-10-04T04:07:39+00:00" + "time": "2020-02-07T06:13:02+00:00" }, { "name": "sebastian/type", - "version": "1.1.3", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3" + "reference": "bad49207c6f854e7a25cef0ea948ac8ebe3ef9d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3", - "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/bad49207c6f854e7a25cef0ea948ac8ebe3ef9d8", + "reference": "bad49207c6f854e7a25cef0ea948ac8ebe3ef9d8", "shasum": "" }, "require": { - "php": "^7.2" + "php": "^7.3" }, "require-dev": { - "phpunit/phpunit": "^8.2" + "phpunit/phpunit": "^9.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -7184,29 +7339,35 @@ ], "description": "Collection of value objects that represent the types of the PHP type system", "homepage": "https://github.com/sebastianbergmann/type", - "time": "2019-07-02T08:10:15+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-01T12:21:09+00:00" }, { "name": "sebastian/version", - "version": "2.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + "reference": "0411bde656dce64202b39c2f4473993a9081d39e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/0411bde656dce64202b39c2f4473993a9081d39e", + "reference": "0411bde656dce64202b39c2f4473993a9081d39e", "shasum": "" }, "require": { - "php": ">=5.6" + "php": "^7.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -7227,7 +7388,7 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03T07:35:21+00:00" + "time": "2020-01-21T06:36:37+00:00" }, { "name": "symfony/browser-kit", From 2cedef8755b87df3800baa1939088bf26132766d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Tue, 30 Jun 2020 09:22:01 +0200 Subject: [PATCH 023/106] Add video examples --- .../Application/Create/CourseCreator.php | 2 +- .../Create/CreateCourseCommandHandler.php | 2 +- .../Courses/Application/Find/CourseFinder.php | 2 +- .../Application/Update/CourseRenamer.php | 2 +- src/Mooc/Courses/Domain/Course.php | 2 +- src/Mooc/Courses/Domain/CourseNotExist.php | 2 +- src/Mooc/Courses/Domain/CourseRepository.php | 2 +- .../Persistence/Doctrine/CourseIdType.php | 2 +- .../Persistence/DoctrineCourseRepository.php | 2 +- .../Persistence/FileCourseRepository.php | 2 +- .../Increment/CoursesCounterIncrementer.php | 2 +- ...IncrementCoursesCounterOnCourseCreated.php | 2 +- .../CoursesCounter/Domain/CoursesCounter.php | 2 +- .../Persistence/Doctrine/CourseIdsType.php | 2 +- .../Domain/{Course => Courses}/CourseId.php | 2 +- src/Mooc/Shared/Domain/Videos/VideoUrl.php | 25 +++++++ src/Mooc/Videos/Application/.gitkeep | 0 .../Application/Create/CreateVideoCommand.php | 50 +++++++++++++ .../Create/CreateVideoCommandHandler.php | 33 ++++++++ .../Application/Create/VideoCreator.php | 35 +++++++++ .../Application/Find/FindVideoQuery.php | 22 ++++++ .../Find/FindVideoQueryHandler.php | 27 +++++++ .../Videos/Application/Find/VideoFinder.php | 24 ++++++ .../Videos/Application/Find/VideoResponse.php | 50 +++++++++++++ .../Find/VideoResponseConverter.php | 21 ++++++ .../Application/Trim/TrimVideoCommand.php | 36 +++++++++ .../Trim/TrimVideoCommandHandler.php | 26 +++++++ .../Videos/Application/Trim/VideoTrimmer.php | 15 ++++ .../Application/Update/VideoTitleUpdater.php | 31 ++++++++ src/Mooc/Videos/Domain/.gitkeep | 0 src/Mooc/Videos/Domain/Video.php | 75 +++++++++++++++++++ .../Videos/Domain/VideoCreatedDomainEvent.php | 64 ++++++++++++++++ src/Mooc/Videos/Domain/VideoFinder.php | 31 ++++++++ src/Mooc/Videos/Domain/VideoId.php | 11 +++ src/Mooc/Videos/Domain/VideoNotFound.php | 29 +++++++ src/Mooc/Videos/Domain/VideoRepository.php | 16 ++++ src/Mooc/Videos/Domain/VideoTitle.php | 11 +++ src/Mooc/Videos/Domain/VideoType.php | 23 ++++++ src/Mooc/Videos/Domain/Videos.php | 15 ++++ src/Mooc/Videos/Infrastructure/.gitkeep | 0 .../Persistence/Doctrine/Video.orm.yml | 25 +++++++ .../Persistence/Doctrine/VideoIdType.php | 17 +++++ .../Persistence/Doctrine/VideoTitle.orm.yml | 7 ++ .../Persistence/Doctrine/VideoType.orm.yml | 7 ++ .../Persistence/VideoRepositoryMySql.php | 42 +++++++++++ src/Shared/Domain/Second.php | 11 +++ src/Shared/Domain/SecondsInterval.php | 43 +++++++++++ .../Domain/ValueObject/IntValueObject.php | 5 ++ .../Create/CreateCourseCommandMother.php | 2 +- .../Courses/CoursesModuleUnitTestCase.php | 2 +- .../Domain/CourseCreatedDomainEventMother.php | 2 +- tests/Mooc/Courses/Domain/CourseIdMother.php | 2 +- tests/Mooc/Courses/Domain/CourseMother.php | 2 +- .../Domain/CoursesCounterMother.php | 2 +- 54 files changed, 848 insertions(+), 21 deletions(-) rename src/Mooc/Shared/Domain/{Course => Courses}/CourseId.php (71%) create mode 100644 src/Mooc/Shared/Domain/Videos/VideoUrl.php delete mode 100644 src/Mooc/Videos/Application/.gitkeep create mode 100644 src/Mooc/Videos/Application/Create/CreateVideoCommand.php create mode 100644 src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php create mode 100644 src/Mooc/Videos/Application/Create/VideoCreator.php create mode 100644 src/Mooc/Videos/Application/Find/FindVideoQuery.php create mode 100644 src/Mooc/Videos/Application/Find/FindVideoQueryHandler.php create mode 100644 src/Mooc/Videos/Application/Find/VideoFinder.php create mode 100644 src/Mooc/Videos/Application/Find/VideoResponse.php create mode 100644 src/Mooc/Videos/Application/Find/VideoResponseConverter.php create mode 100644 src/Mooc/Videos/Application/Trim/TrimVideoCommand.php create mode 100644 src/Mooc/Videos/Application/Trim/TrimVideoCommandHandler.php create mode 100644 src/Mooc/Videos/Application/Trim/VideoTrimmer.php create mode 100644 src/Mooc/Videos/Application/Update/VideoTitleUpdater.php delete mode 100644 src/Mooc/Videos/Domain/.gitkeep create mode 100644 src/Mooc/Videos/Domain/Video.php create mode 100644 src/Mooc/Videos/Domain/VideoCreatedDomainEvent.php create mode 100644 src/Mooc/Videos/Domain/VideoFinder.php create mode 100644 src/Mooc/Videos/Domain/VideoId.php create mode 100644 src/Mooc/Videos/Domain/VideoNotFound.php create mode 100644 src/Mooc/Videos/Domain/VideoRepository.php create mode 100644 src/Mooc/Videos/Domain/VideoTitle.php create mode 100644 src/Mooc/Videos/Domain/VideoType.php create mode 100644 src/Mooc/Videos/Domain/Videos.php delete mode 100644 src/Mooc/Videos/Infrastructure/.gitkeep create mode 100644 src/Mooc/Videos/Infrastructure/Persistence/Doctrine/Video.orm.yml create mode 100644 src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoIdType.php create mode 100644 src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoTitle.orm.yml create mode 100644 src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoType.orm.yml create mode 100644 src/Mooc/Videos/Infrastructure/Persistence/VideoRepositoryMySql.php create mode 100644 src/Shared/Domain/Second.php create mode 100644 src/Shared/Domain/SecondsInterval.php diff --git a/src/Mooc/Courses/Application/Create/CourseCreator.php b/src/Mooc/Courses/Application/Create/CourseCreator.php index c901cbf57..3c4227395 100644 --- a/src/Mooc/Courses/Application/Create/CourseCreator.php +++ b/src/Mooc/Courses/Application/Create/CourseCreator.php @@ -8,7 +8,7 @@ use CodelyTv\Mooc\Courses\Domain\CourseDuration; use CodelyTv\Mooc\Courses\Domain\CourseName; use CodelyTv\Mooc\Courses\Domain\CourseRepository; -use CodelyTv\Mooc\Shared\Domain\Course\CourseId; +use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; use CodelyTv\Shared\Domain\Bus\Event\EventBus; final class CourseCreator diff --git a/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php b/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php index 6b0355a24..7365093e9 100644 --- a/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php +++ b/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php @@ -6,7 +6,7 @@ use CodelyTv\Mooc\Courses\Domain\CourseDuration; use CodelyTv\Mooc\Courses\Domain\CourseName; -use CodelyTv\Mooc\Shared\Domain\Course\CourseId; +use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; use CodelyTv\Shared\Domain\Bus\Command\CommandHandler; final class CreateCourseCommandHandler implements CommandHandler diff --git a/src/Mooc/Courses/Application/Find/CourseFinder.php b/src/Mooc/Courses/Application/Find/CourseFinder.php index 4e16e44c9..7c5ec7c4f 100644 --- a/src/Mooc/Courses/Application/Find/CourseFinder.php +++ b/src/Mooc/Courses/Application/Find/CourseFinder.php @@ -7,7 +7,7 @@ use CodelyTv\Mooc\Courses\Domain\Course; use CodelyTv\Mooc\Courses\Domain\CourseNotExist; use CodelyTv\Mooc\Courses\Domain\CourseRepository; -use CodelyTv\Mooc\Shared\Domain\Course\CourseId; +use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; final class CourseFinder { diff --git a/src/Mooc/Courses/Application/Update/CourseRenamer.php b/src/Mooc/Courses/Application/Update/CourseRenamer.php index 356ccef0e..c3f6b1c3e 100644 --- a/src/Mooc/Courses/Application/Update/CourseRenamer.php +++ b/src/Mooc/Courses/Application/Update/CourseRenamer.php @@ -7,7 +7,7 @@ use CodelyTv\Mooc\Courses\Application\Find\CourseFinder; use CodelyTv\Mooc\Courses\Domain\CourseName; use CodelyTv\Mooc\Courses\Domain\CourseRepository; -use CodelyTv\Mooc\Shared\Domain\Course\CourseId; +use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; use CodelyTv\Shared\Domain\Bus\Event\EventBus; final class CourseRenamer diff --git a/src/Mooc/Courses/Domain/Course.php b/src/Mooc/Courses/Domain/Course.php index 81f575ef2..01320f5db 100644 --- a/src/Mooc/Courses/Domain/Course.php +++ b/src/Mooc/Courses/Domain/Course.php @@ -4,7 +4,7 @@ namespace CodelyTv\Mooc\Courses\Domain; -use CodelyTv\Mooc\Shared\Domain\Course\CourseId; +use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; use CodelyTv\Shared\Domain\Aggregate\AggregateRoot; final class Course extends AggregateRoot diff --git a/src/Mooc/Courses/Domain/CourseNotExist.php b/src/Mooc/Courses/Domain/CourseNotExist.php index 8f20d6202..fe001bf40 100644 --- a/src/Mooc/Courses/Domain/CourseNotExist.php +++ b/src/Mooc/Courses/Domain/CourseNotExist.php @@ -4,7 +4,7 @@ namespace CodelyTv\Mooc\Courses\Domain; -use CodelyTv\Mooc\Shared\Domain\Course\CourseId; +use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; use CodelyTv\Shared\Domain\DomainError; final class CourseNotExist extends DomainError diff --git a/src/Mooc/Courses/Domain/CourseRepository.php b/src/Mooc/Courses/Domain/CourseRepository.php index b00bf3555..bf12fad1b 100644 --- a/src/Mooc/Courses/Domain/CourseRepository.php +++ b/src/Mooc/Courses/Domain/CourseRepository.php @@ -4,7 +4,7 @@ namespace CodelyTv\Mooc\Courses\Domain; -use CodelyTv\Mooc\Shared\Domain\Course\CourseId; +use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; interface CourseRepository { diff --git a/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/CourseIdType.php b/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/CourseIdType.php index ed6c5790a..6cbc8d60c 100644 --- a/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/CourseIdType.php +++ b/src/Mooc/Courses/Infrastructure/Persistence/Doctrine/CourseIdType.php @@ -4,7 +4,7 @@ namespace CodelyTv\Mooc\Courses\Infrastructure\Persistence\Doctrine; -use CodelyTv\Mooc\Shared\Domain\Course\CourseId; +use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; use CodelyTv\Shared\Infrastructure\Persistence\Doctrine\UuidType; final class CourseIdType extends UuidType diff --git a/src/Mooc/Courses/Infrastructure/Persistence/DoctrineCourseRepository.php b/src/Mooc/Courses/Infrastructure/Persistence/DoctrineCourseRepository.php index 0e59568d2..b17007d92 100644 --- a/src/Mooc/Courses/Infrastructure/Persistence/DoctrineCourseRepository.php +++ b/src/Mooc/Courses/Infrastructure/Persistence/DoctrineCourseRepository.php @@ -6,7 +6,7 @@ use CodelyTv\Mooc\Courses\Domain\Course; use CodelyTv\Mooc\Courses\Domain\CourseRepository; -use CodelyTv\Mooc\Shared\Domain\Course\CourseId; +use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; use CodelyTv\Shared\Infrastructure\Persistence\Doctrine\DoctrineRepository; final class DoctrineCourseRepository extends DoctrineRepository implements CourseRepository diff --git a/src/Mooc/Courses/Infrastructure/Persistence/FileCourseRepository.php b/src/Mooc/Courses/Infrastructure/Persistence/FileCourseRepository.php index 1a5083215..05124081d 100644 --- a/src/Mooc/Courses/Infrastructure/Persistence/FileCourseRepository.php +++ b/src/Mooc/Courses/Infrastructure/Persistence/FileCourseRepository.php @@ -6,7 +6,7 @@ use CodelyTv\Mooc\Courses\Domain\Course; use CodelyTv\Mooc\Courses\Domain\CourseRepository; -use CodelyTv\Mooc\Shared\Domain\Course\CourseId; +use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; final class FileCourseRepository implements CourseRepository { diff --git a/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php b/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php index 836b7d3e0..a3d63de32 100644 --- a/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php +++ b/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php @@ -7,7 +7,7 @@ use CodelyTv\Mooc\CoursesCounter\Domain\CoursesCounter; use CodelyTv\Mooc\CoursesCounter\Domain\CoursesCounterId; use CodelyTv\Mooc\CoursesCounter\Domain\CoursesCounterRepository; -use CodelyTv\Mooc\Shared\Domain\Course\CourseId; +use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; use CodelyTv\Shared\Domain\Bus\Event\EventBus; use CodelyTv\Shared\Domain\UuidGenerator; diff --git a/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php b/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php index 67c7f4640..9a97be30f 100644 --- a/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php +++ b/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php @@ -5,7 +5,7 @@ namespace CodelyTv\Mooc\CoursesCounter\Application\Increment; use CodelyTv\Mooc\Courses\Domain\CourseCreatedDomainEvent; -use CodelyTv\Mooc\Shared\Domain\Course\CourseId; +use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; use CodelyTv\Shared\Domain\Bus\Event\DomainEventSubscriber; use function Lambdish\Phunctional\apply; diff --git a/src/Mooc/CoursesCounter/Domain/CoursesCounter.php b/src/Mooc/CoursesCounter/Domain/CoursesCounter.php index 69dc22947..6a6d62d59 100644 --- a/src/Mooc/CoursesCounter/Domain/CoursesCounter.php +++ b/src/Mooc/CoursesCounter/Domain/CoursesCounter.php @@ -4,7 +4,7 @@ namespace CodelyTv\Mooc\CoursesCounter\Domain; -use CodelyTv\Mooc\Shared\Domain\Course\CourseId; +use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; use CodelyTv\Shared\Domain\Aggregate\AggregateRoot; use function Lambdish\Phunctional\search; diff --git a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php index b5da7711a..d3646755f 100644 --- a/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php +++ b/src/Mooc/CoursesCounter/Infrastructure/Persistence/Doctrine/CourseIdsType.php @@ -4,7 +4,7 @@ namespace CodelyTv\Mooc\CoursesCounter\Infrastructure\Persistence\Doctrine; -use CodelyTv\Mooc\Shared\Domain\Course\CourseId; +use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; use CodelyTv\Shared\Infrastructure\Doctrine\Dbal\DoctrineCustomType; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\JsonType; diff --git a/src/Mooc/Shared/Domain/Course/CourseId.php b/src/Mooc/Shared/Domain/Courses/CourseId.php similarity index 71% rename from src/Mooc/Shared/Domain/Course/CourseId.php rename to src/Mooc/Shared/Domain/Courses/CourseId.php index 85c2367e3..ed2c5a753 100644 --- a/src/Mooc/Shared/Domain/Course/CourseId.php +++ b/src/Mooc/Shared/Domain/Courses/CourseId.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace CodelyTv\Mooc\Shared\Domain\Course; +namespace CodelyTv\Mooc\Shared\Domain\Courses; use CodelyTv\Shared\Domain\ValueObject\Uuid; diff --git a/src/Mooc/Shared/Domain/Videos/VideoUrl.php b/src/Mooc/Shared/Domain/Videos/VideoUrl.php new file mode 100644 index 000000000..3bc0448ea --- /dev/null +++ b/src/Mooc/Shared/Domain/Videos/VideoUrl.php @@ -0,0 +1,25 @@ +ensureIsValidUrl($value); + + parent::__construct($value); + } + + private function ensureIsValidUrl(string $url): void + { + if (false === filter_var($url, FILTER_VALIDATE_URL)) { + throw new InvalidArgumentException(sprintf('The url <%s> is not well formatted', $url)); + } + } +} diff --git a/src/Mooc/Videos/Application/.gitkeep b/src/Mooc/Videos/Application/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/Mooc/Videos/Application/Create/CreateVideoCommand.php b/src/Mooc/Videos/Application/Create/CreateVideoCommand.php new file mode 100644 index 000000000..a25e1dae5 --- /dev/null +++ b/src/Mooc/Videos/Application/Create/CreateVideoCommand.php @@ -0,0 +1,50 @@ +id = $id; + $this->type = $type; + $this->title = $title; + $this->url = $url; + $this->courseId = $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 new file mode 100644 index 000000000..9b0da1f71 --- /dev/null +++ b/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php @@ -0,0 +1,33 @@ +creator = $creator; + } + + public function __invoke(CreateVideoCommand $command) + { + $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 new file mode 100644 index 000000000..297d6e688 --- /dev/null +++ b/src/Mooc/Videos/Application/Create/VideoCreator.php @@ -0,0 +1,35 @@ +repository = $repository; + $this->bus = $bus; + } + + 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->bus->publish(...$video->pullDomainEvents()); + } +} diff --git a/src/Mooc/Videos/Application/Find/FindVideoQuery.php b/src/Mooc/Videos/Application/Find/FindVideoQuery.php new file mode 100644 index 000000000..3a9238a2a --- /dev/null +++ b/src/Mooc/Videos/Application/Find/FindVideoQuery.php @@ -0,0 +1,22 @@ +id = $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 new file mode 100644 index 000000000..4491614e5 --- /dev/null +++ b/src/Mooc/Videos/Application/Find/FindVideoQueryHandler.php @@ -0,0 +1,27 @@ +finder = pipe($finder, new VideoResponseConverter()); + } + + public function __invoke(FindVideoQuery $query): VideoResponse + { + $id = new VideoId($query->id()); + + return apply($this->finder, [$id]); + } +} diff --git a/src/Mooc/Videos/Application/Find/VideoFinder.php b/src/Mooc/Videos/Application/Find/VideoFinder.php new file mode 100644 index 000000000..f74f297e8 --- /dev/null +++ b/src/Mooc/Videos/Application/Find/VideoFinder.php @@ -0,0 +1,24 @@ +finder = new DomainVideoFinder($repository); + } + + public function __invoke(VideoId $id) + { + return $this->finder->__invoke($id); + } +} diff --git a/src/Mooc/Videos/Application/Find/VideoResponse.php b/src/Mooc/Videos/Application/Find/VideoResponse.php new file mode 100644 index 000000000..1f9f2e739 --- /dev/null +++ b/src/Mooc/Videos/Application/Find/VideoResponse.php @@ -0,0 +1,50 @@ +id = $id; + $this->type = $type; + $this->title = $title; + $this->url = $url; + $this->courseId = $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/Find/VideoResponseConverter.php b/src/Mooc/Videos/Application/Find/VideoResponseConverter.php new file mode 100644 index 000000000..6ee2b7b5f --- /dev/null +++ b/src/Mooc/Videos/Application/Find/VideoResponseConverter.php @@ -0,0 +1,21 @@ +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 new file mode 100644 index 000000000..e50bbc59a --- /dev/null +++ b/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php @@ -0,0 +1,36 @@ +videoId = $videoId; + $this->keepFromSecond = $keepFromSecond; + $this->keepToSecond = $keepToSecond; + } + + public function videoId(): string + { + return $this->videoId; + } + + public function keepFromSecond(): int + { + return $this->keepFromSecond; + } + + 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 new file mode 100644 index 000000000..9300617ff --- /dev/null +++ b/src/Mooc/Videos/Application/Trim/TrimVideoCommandHandler.php @@ -0,0 +1,26 @@ +trimmer = $trimmer; + } + + public function __invoke(TrimVideoCommand $command) + { + $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 new file mode 100644 index 000000000..2a496b848 --- /dev/null +++ b/src/Mooc/Videos/Application/Trim/VideoTrimmer.php @@ -0,0 +1,15 @@ +finder = new VideoFinder($repository); + $this->repository = $repository; + } + + public function __invoke(VideoId $id, VideoTitle $newTitle): void + { + $video = $this->finder->__invoke($id); + + $video->updateTitle($newTitle); + + $this->repository->save($video); + } +} diff --git a/src/Mooc/Videos/Domain/.gitkeep b/src/Mooc/Videos/Domain/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/Mooc/Videos/Domain/Video.php b/src/Mooc/Videos/Domain/Video.php new file mode 100644 index 000000000..6ac261b40 --- /dev/null +++ b/src/Mooc/Videos/Domain/Video.php @@ -0,0 +1,75 @@ +id = $id; + $this->type = $type; + $this->title = $title; + $this->url = $url; + $this->courseId = $courseId; + } + + public static function create( + VideoId $id, + VideoType $type, + VideoTitle $title, + VideoUrl $url, + CourseId $courseId + ): Video { + $video = new self($id, $type, $title, $url, $courseId); + + $video->record( + new VideoCreatedDomainEvent( + $id->value(), $type->value(), $title->value(), $url->value(), $courseId->value() + ) + ); + + return $video; + } + + public function updateTitle(VideoTitle $newTitle): void + { + $this->title = $newTitle; + } + + public function id(): VideoId + { + return $this->id; + } + + public function type(): VideoType + { + return $this->type; + } + + public function title(): VideoTitle + { + return $this->title; + } + + public function url(): VideoUrl + { + return $this->url; + } + + public function courseId(): CourseId + { + return $this->courseId; + } +} diff --git a/src/Mooc/Videos/Domain/VideoCreatedDomainEvent.php b/src/Mooc/Videos/Domain/VideoCreatedDomainEvent.php new file mode 100644 index 000000000..e131e5747 --- /dev/null +++ b/src/Mooc/Videos/Domain/VideoCreatedDomainEvent.php @@ -0,0 +1,64 @@ +type = $type; + $this->title = $title; + $this->url = $url; + $this->courseId = $courseId; + } + + public static function eventName(): string + { + return 'video.created'; + } + + public static function fromPrimitives( + string $aggregateId, + array $body, + string $eventId, + string $occurredOn + ): VideoCreatedDomainEvent { + 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, + ]; + } +} diff --git a/src/Mooc/Videos/Domain/VideoFinder.php b/src/Mooc/Videos/Domain/VideoFinder.php new file mode 100644 index 000000000..92d6f772f --- /dev/null +++ b/src/Mooc/Videos/Domain/VideoFinder.php @@ -0,0 +1,31 @@ +repository = $repository; + } + + public function __invoke(VideoId $id): Video + { + $video = $this->repository->search($id); + + $this->ensureVideoExists($id, $video); + + return $video; + } + + private function ensureVideoExists(VideoId $id, Video $video = null): void + { + if (null === $video) { + throw new VideoNotFound($id); + } + } +} diff --git a/src/Mooc/Videos/Domain/VideoId.php b/src/Mooc/Videos/Domain/VideoId.php new file mode 100644 index 000000000..2c8a3d177 --- /dev/null +++ b/src/Mooc/Videos/Domain/VideoId.php @@ -0,0 +1,11 @@ +id = $id; + + parent::__construct(); + } + + public function errorCode(): string + { + return 'video_not_found'; + } + + 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 new file mode 100644 index 000000000..7e68907a8 --- /dev/null +++ b/src/Mooc/Videos/Domain/VideoRepository.php @@ -0,0 +1,16 @@ + value is not a valid video type', $value)); + } +} diff --git a/src/Mooc/Videos/Domain/Videos.php b/src/Mooc/Videos/Domain/Videos.php new file mode 100644 index 000000000..e749b0726 --- /dev/null +++ b/src/Mooc/Videos/Domain/Videos.php @@ -0,0 +1,15 @@ + '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/Second.php b/src/Shared/Domain/Second.php new file mode 100644 index 000000000..30ec59f8d --- /dev/null +++ b/src/Shared/Domain/Second.php @@ -0,0 +1,11 @@ +ensureIntervalEndsAfterStart($from, $to); + + $this->from = $from; + $this->to = $to; + } + + public function from(): Second + { + return $this->from; + } + + public function to(): Second + { + return $this->to; + } + + public static function fromValues(int $from, int $to): SecondsInterval + { + 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'); + } + } +} diff --git a/src/Shared/Domain/ValueObject/IntValueObject.php b/src/Shared/Domain/ValueObject/IntValueObject.php index f34a11ac9..d7c15ac72 100644 --- a/src/Shared/Domain/ValueObject/IntValueObject.php +++ b/src/Shared/Domain/ValueObject/IntValueObject.php @@ -18,6 +18,11 @@ public function value(): int return $this->value; } + public function isBiggerThan(IntValueObject $other): bool + { + return $this->value() > $other->value(); + } + public function __toString(): string { return (string) $this->value(); diff --git a/tests/Mooc/Courses/Application/Create/CreateCourseCommandMother.php b/tests/Mooc/Courses/Application/Create/CreateCourseCommandMother.php index dba54ff00..ed22076ae 100644 --- a/tests/Mooc/Courses/Application/Create/CreateCourseCommandMother.php +++ b/tests/Mooc/Courses/Application/Create/CreateCourseCommandMother.php @@ -7,7 +7,7 @@ use CodelyTv\Mooc\Courses\Application\Create\CreateCourseCommand; use CodelyTv\Mooc\Courses\Domain\CourseDuration; use CodelyTv\Mooc\Courses\Domain\CourseName; -use CodelyTv\Mooc\Shared\Domain\Course\CourseId; +use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; use CodelyTv\Tests\Mooc\Courses\Domain\CourseDurationMother; use CodelyTv\Tests\Mooc\Courses\Domain\CourseIdMother; use CodelyTv\Tests\Mooc\Courses\Domain\CourseNameMother; diff --git a/tests/Mooc/Courses/CoursesModuleUnitTestCase.php b/tests/Mooc/Courses/CoursesModuleUnitTestCase.php index 174662f33..d66c7fdc6 100644 --- a/tests/Mooc/Courses/CoursesModuleUnitTestCase.php +++ b/tests/Mooc/Courses/CoursesModuleUnitTestCase.php @@ -6,7 +6,7 @@ use CodelyTv\Mooc\Courses\Domain\Course; use CodelyTv\Mooc\Courses\Domain\CourseRepository; -use CodelyTv\Mooc\Shared\Domain\Course\CourseId; +use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; use CodelyTv\Tests\Shared\Infrastructure\PhpUnit\UnitTestCase; use Mockery\MockInterface; diff --git a/tests/Mooc/Courses/Domain/CourseCreatedDomainEventMother.php b/tests/Mooc/Courses/Domain/CourseCreatedDomainEventMother.php index 1081244d3..33776136f 100644 --- a/tests/Mooc/Courses/Domain/CourseCreatedDomainEventMother.php +++ b/tests/Mooc/Courses/Domain/CourseCreatedDomainEventMother.php @@ -8,7 +8,7 @@ use CodelyTv\Mooc\Courses\Domain\CourseCreatedDomainEvent; use CodelyTv\Mooc\Courses\Domain\CourseDuration; use CodelyTv\Mooc\Courses\Domain\CourseName; -use CodelyTv\Mooc\Shared\Domain\Course\CourseId; +use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; final class CourseCreatedDomainEventMother { diff --git a/tests/Mooc/Courses/Domain/CourseIdMother.php b/tests/Mooc/Courses/Domain/CourseIdMother.php index e942d0179..a84fee05a 100644 --- a/tests/Mooc/Courses/Domain/CourseIdMother.php +++ b/tests/Mooc/Courses/Domain/CourseIdMother.php @@ -4,7 +4,7 @@ namespace CodelyTv\Tests\Mooc\Courses\Domain; -use CodelyTv\Mooc\Shared\Domain\Course\CourseId; +use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; use CodelyTv\Tests\Shared\Domain\UuidMother; final class CourseIdMother diff --git a/tests/Mooc/Courses/Domain/CourseMother.php b/tests/Mooc/Courses/Domain/CourseMother.php index 707344c23..f56953dfa 100644 --- a/tests/Mooc/Courses/Domain/CourseMother.php +++ b/tests/Mooc/Courses/Domain/CourseMother.php @@ -8,7 +8,7 @@ use CodelyTv\Mooc\Courses\Domain\Course; use CodelyTv\Mooc\Courses\Domain\CourseDuration; use CodelyTv\Mooc\Courses\Domain\CourseName; -use CodelyTv\Mooc\Shared\Domain\Course\CourseId; +use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; final class CourseMother { diff --git a/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php b/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php index cf044c3b7..b042dcb96 100644 --- a/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php +++ b/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php @@ -7,7 +7,7 @@ use CodelyTv\Mooc\CoursesCounter\Domain\CoursesCounter; use CodelyTv\Mooc\CoursesCounter\Domain\CoursesCounterId; use CodelyTv\Mooc\CoursesCounter\Domain\CoursesCounterTotal; -use CodelyTv\Mooc\Shared\Domain\Course\CourseId; +use CodelyTv\Mooc\Shared\Domain\Courses\CourseId; use CodelyTv\Tests\Mooc\Courses\Domain\CourseIdMother; use CodelyTv\Tests\Shared\Domain\Repeater; From cfff426bce23895d0c0af487a926553cc5b9abb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josu=C3=A9=20Pi=C3=B1a?= Date: Fri, 10 Jul 2020 09:02:29 +0200 Subject: [PATCH 024/106] Update README (#186) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reference the correct git repository Co-authored-by: Josué Piña --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7abbf2698..dc49f5941 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@

Take a look, play and have fun with this. - Stars are welcomed 😊 + Stars are welcomed 😊

Explore the docs » @@ -29,9 +29,9 @@
View Demo · - Report Bug + Report Bug · - Request Feature + Request Feature

@@ -58,8 +58,8 @@ ### 🐳 Needed tools 1. [Install Docker](https://www.docker.com/get-started) -2. Clone this project: `git clone https://github.com/CodelyTV/cqrs-ddd-php-example cqrs-ddd-php-example` -3. Move to the project folder: `cd cqrs-ddd-php-example` +2. Clone this project: `git clone https://github.com/CodelyTV/php-ddd-example php-ddd-example` +3. Move to the project folder: `cd php-ddd-example` ### 🛠️ Environment configuration From 5ae30d043d226b9b541381fdb425448da6c2df88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Sat, 18 Jul 2020 17:04:19 +0200 Subject: [PATCH 025/106] Add elasticsearch tests and split context tests (#184) --- .env | 2 +- Makefile | 9 ++- docker-compose.yml | 16 +++-- phpunit.xml | 11 ++- .../backoffice_services.yaml | 16 +++++ .../DependencyInjection/mooc_services.yaml | 1 - .../Doctrine/DatabaseConnections.php | 4 +- ...iceCoursesModuleInfrastructureTestCase.php | 12 +++- ...icsearchBackofficeCourseRepositoryTest.php | 69 +++++++++++++++++++ .../MySqlBackofficeCourseRepositoryTest.php | 22 +++--- ...ackofficeContextInfrastructureTestCase.php | 30 ++++++++ .../PhpUnit/BackofficeEnvironmentArranger.php | 34 +++++++++ .../MoocContextInfrastructureTestCase.php | 5 +- .../PhpUnit/MoocEnvironmentArranger.php | 4 +- .../Event/MySql/MySqlDoctrineEventBusTest.php | 6 ++ .../Event/RabbitMq/RabbitMqEventBusTest.php | 6 ++ ...seCleaner.php => MySqlDatabaseCleaner.php} | 2 +- .../Elastic/ElasticDatabaseCleaner.php | 26 +++++++ .../PhpUnit/InfrastructureTestCase.php | 31 +++++++-- 19 files changed, 268 insertions(+), 38 deletions(-) create mode 100644 tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php create mode 100644 tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeContextInfrastructureTestCase.php create mode 100644 tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeEnvironmentArranger.php rename tests/Shared/Infrastructure/Doctrine/{DatabaseCleaner.php => MySqlDatabaseCleaner.php} (97%) create mode 100644 tests/Shared/Infrastructure/Elastic/ElasticDatabaseCleaner.php diff --git a/.env b/.env index 49dd99d04..0645dd4fa 100644 --- a/.env +++ b/.env @@ -25,7 +25,7 @@ BACKOFFICE_DATABASE_USER=root BACKOFFICE_DATABASE_PASSWORD= # Elasticsearch -BACKOFFICE_ELASTICSEARCH_HOST=127.0.0.1 +BACKOFFICE_ELASTICSEARCH_HOST=codelytv-php_ddd_skeleton-mooc-elastic BACKOFFICE_ELASTICSEARCH_INDEX_PREFIX=backoffice # COMMON # diff --git a/Makefile b/Makefile index f4ece3da8..93f612403 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,9 @@ test: composer-env-file 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 tests + ./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 @@ -61,7 +63,10 @@ stop-local: symfony server:stop --dir=apps/mooc/backend/public symfony server:stop --dir=apps/backoffice/frontend/public symfony server:stop --dir=apps/backoffice/backend/public - + ping-mysql: @docker exec codelytv-php_ddd_skeleton-mooc-mysql mysqladmin --user=root --password= --host "127.0.0.1" ping --silent +clean-cache: + @rm -rf apps/*/*/var + diff --git a/docker-compose.yml b/docker-compose.yml index b9e494657..8e0cce200 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,12 +5,23 @@ services: container_name: codelytv-php_ddd_skeleton-mooc-mysql image: mysql:8 ports: - - "3360:3306" + - 3360:3306 environment: - MYSQL_ROOT_PASSWORD= - MYSQL_ALLOW_EMPTY_PASSWORD=yes command: ["--default-authentication-plugin=mysql_native_password"] + elasticsearch: + container_name: codelytv-php_ddd_skeleton-mooc-elastic + image: docker.elastic.co/elasticsearch/elasticsearch:6.8.10 + ports: + - 9200:9200 + - 9300:9300 + environment: + - discovery.type=single-node + - xpack.security.enabled=false + - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + rabbitmq: container_name: codelytv-php_ddd_skeleton-rabbitmq image: 'rabbitmq:3.7-management' @@ -44,9 +55,6 @@ services: - "9090:9001" volumes: - .:/app:delegated - env_file: - - .env - - .env.local depends_on: - mysql - rabbitmq diff --git a/phpunit.xml b/phpunit.xml index 232119235..06fda8b8b 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -24,14 +24,19 @@ - - - ./tests + + ./tests/Backoffice + + + ./tests/Mooc + + + ./tests/Shared diff --git a/src/Backoffice/Shared/Infrastructure/Symfony/DependencyInjection/backoffice_services.yaml b/src/Backoffice/Shared/Infrastructure/Symfony/DependencyInjection/backoffice_services.yaml index e69de29bb..77b0c6a55 100644 --- a/src/Backoffice/Shared/Infrastructure/Symfony/DependencyInjection/backoffice_services.yaml +++ b/src/Backoffice/Shared/Infrastructure/Symfony/DependencyInjection/backoffice_services.yaml @@ -0,0 +1,16 @@ +services: + # Databases + # @todo this should be from backoffice, no mooc + Doctrine\ORM\EntityManager: + factory: [CodelyTv\Mooc\Shared\Infrastructure\Doctrine\MoocEntityManagerFactory, create] + arguments: + - driver: '%env(MOOC_DATABASE_DRIVER)%' + host: '%env(MOOC_DATABASE_HOST)%' + port: '%env(MOOC_DATABASE_PORT)%' + dbname: '%env(MOOC_DATABASE_NAME)%' + user: '%env(MOOC_DATABASE_USER)%' + password: '%env(MOOC_DATABASE_PASSWORD)%' + - '%env(APP_ENV)%' + tags: + - { name: codely.database_connection } + public: true diff --git a/src/Mooc/Shared/Infrastructure/Symfony/DependencyInjection/mooc_services.yaml b/src/Mooc/Shared/Infrastructure/Symfony/DependencyInjection/mooc_services.yaml index 199b41015..014bbdf3c 100644 --- a/src/Mooc/Shared/Infrastructure/Symfony/DependencyInjection/mooc_services.yaml +++ b/src/Mooc/Shared/Infrastructure/Symfony/DependencyInjection/mooc_services.yaml @@ -17,4 +17,3 @@ services: # Courses CodelyTv\Mooc\Courses\Domain\CourseRepository: '@CodelyTv\Mooc\Courses\Infrastructure\Persistence\DoctrineCourseRepository' - diff --git a/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php b/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php index d1a37b4c6..4b9ca7b90 100644 --- a/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php +++ b/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php @@ -4,7 +4,7 @@ namespace CodelyTv\Shared\Infrastructure\Doctrine; -use CodelyTv\Tests\Shared\Infrastructure\Doctrine\DatabaseCleaner; +use CodelyTv\Tests\Shared\Infrastructure\Doctrine\MySqlDatabaseCleaner; use Doctrine\ORM\EntityManager; use function Lambdish\Phunctional\apply; use function Lambdish\Phunctional\each; @@ -25,6 +25,6 @@ public function clear(): void public function truncate(): void { - apply(new DatabaseCleaner(), array_values($this->connections)); + apply(new MySqlDatabaseCleaner(), array_values($this->connections)); } } diff --git a/tests/Backoffice/Courses/BackofficeCoursesModuleInfrastructureTestCase.php b/tests/Backoffice/Courses/BackofficeCoursesModuleInfrastructureTestCase.php index 5898968d8..b39b1b249 100644 --- a/tests/Backoffice/Courses/BackofficeCoursesModuleInfrastructureTestCase.php +++ b/tests/Backoffice/Courses/BackofficeCoursesModuleInfrastructureTestCase.php @@ -4,14 +4,20 @@ namespace CodelyTv\Tests\Backoffice\Courses; +use CodelyTv\Backoffice\Courses\Infrastructure\Persistence\ElasticsearchBackofficeCourseRepository; use CodelyTv\Backoffice\Courses\Infrastructure\Persistence\MySqlBackofficeCourseRepository; -use CodelyTv\Tests\Mooc\Shared\Infrastructure\PhpUnit\MoocContextInfrastructureTestCase; +use CodelyTv\Tests\Backoffice\Shared\Infraestructure\PhpUnit\BackofficeContextInfrastructureTestCase; use Doctrine\ORM\EntityManager; -abstract class BackofficeCoursesModuleInfrastructureTestCase extends MoocContextInfrastructureTestCase +abstract class BackofficeCoursesModuleInfrastructureTestCase extends BackofficeContextInfrastructureTestCase { - protected function repository(): MySqlBackofficeCourseRepository + protected function mySqlRepository(): MySqlBackofficeCourseRepository { return new MySqlBackofficeCourseRepository($this->service(EntityManager::class)); } + + protected function elasticRepository(): ElasticsearchBackofficeCourseRepository + { + return $this->service(ElasticsearchBackofficeCourseRepository::class); + } } diff --git a/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php b/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php new file mode 100644 index 000000000..ad792b5ff --- /dev/null +++ b/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php @@ -0,0 +1,69 @@ +elasticRepository()->save(BackofficeCourseMother::random()); + } + + /** @test */ + public function it_should_search_all_existing_courses(): void + { + $existingCourse = BackofficeCourseMother::random(); + $anotherExistingCourse = BackofficeCourseMother::random(); + $existingCourses = [$existingCourse, $anotherExistingCourse]; + + $this->elasticRepository()->save($existingCourse); + $this->elasticRepository()->save($anotherExistingCourse); + + $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::random(); + $anotherExistingCourse = BackofficeCourseMother::random(); + $existingCourses = [$existingCourse, $anotherExistingCourse]; + + $this->elasticRepository()->save($existingCourse); + $this->elasticRepository()->save($anotherExistingCourse); + + $this->eventually( + fn() => $this->assertSimilar( + $existingCourses, + $this->elasticRepository()->matching(CriteriaMother::empty()) + ) + ); + } + + /** @test */ + public function it_should_filter_by_criteria(): void + { + $dddInPhpCourse = BackofficeCourseMother::withName('DDD en PHP'); + $dddInJavaCourse = BackofficeCourseMother::withName('DDD en Java'); + $intellijCourse = BackofficeCourseMother::withName('Exprimiendo Intellij'); + $dddCourses = [$dddInPhpCourse, $dddInJavaCourse]; + + $nameContainsDddCriteria = BackofficeCourseCriteriaMother::nameContains('DDD'); + + $this->elasticRepository()->save($dddInJavaCourse); + $this->elasticRepository()->save($dddInPhpCourse); + $this->elasticRepository()->save($intellijCourse); + + $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 4d9d7b568..fbd6c2625 100644 --- a/tests/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php +++ b/tests/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php @@ -14,7 +14,7 @@ final class MySqlBackofficeCourseRepositoryTest extends BackofficeCoursesModuleI /** @test */ public function it_should_save_a_valid_course(): void { - $this->repository()->save(BackofficeCourseMother::random()); + $this->mySqlRepository()->save(BackofficeCourseMother::random()); } /** @test */ @@ -24,10 +24,10 @@ public function it_should_search_all_existing_courses(): void $anotherExistingCourse = BackofficeCourseMother::random(); $existingCourses = [$existingCourse, $anotherExistingCourse]; - $this->repository()->save($existingCourse); - $this->repository()->save($anotherExistingCourse); + $this->mySqlRepository()->save($existingCourse); + $this->mySqlRepository()->save($anotherExistingCourse); - $this->assertSimilar($existingCourses, $this->repository()->searchAll()); + $this->assertSimilar($existingCourses, $this->mySqlRepository()->searchAll()); } /** @test */ @@ -37,11 +37,11 @@ public function it_should_search_all_existing_courses_with_an_empty_criteria(): $anotherExistingCourse = BackofficeCourseMother::random(); $existingCourses = [$existingCourse, $anotherExistingCourse]; - $this->repository()->save($existingCourse); - $this->repository()->save($anotherExistingCourse); + $this->mySqlRepository()->save($existingCourse); + $this->mySqlRepository()->save($anotherExistingCourse); $this->clearUnitOfWork(); - $this->assertSimilar($existingCourses, $this->repository()->matching(CriteriaMother::empty())); + $this->assertSimilar($existingCourses, $this->mySqlRepository()->matching(CriteriaMother::empty())); } /** @test */ @@ -54,11 +54,11 @@ public function it_should_filter_by_criteria(): void $nameContainsDddCriteria = BackofficeCourseCriteriaMother::nameContains('DDD'); - $this->repository()->save($dddInJavaCourse); - $this->repository()->save($dddInPhpCourse); - $this->repository()->save($intellijCourse); + $this->mySqlRepository()->save($dddInJavaCourse); + $this->mySqlRepository()->save($dddInPhpCourse); + $this->mySqlRepository()->save($intellijCourse); $this->clearUnitOfWork(); - $this->assertSimilar($dddCourses, $this->repository()->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 new file mode 100644 index 000000000..a64387798 --- /dev/null +++ b/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeContextInfrastructureTestCase.php @@ -0,0 +1,30 @@ +service(ElasticsearchClient::class), + $this->service(EntityManager::class) + ); + + $arranger->arrange(); + } + + 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 new file mode 100644 index 000000000..f439dba8d --- /dev/null +++ b/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeEnvironmentArranger.php @@ -0,0 +1,34 @@ +elasticsearchClient = $elasticsearchClient; + $this->entityManager = $entityManager; + } + + public function arrange(): void + { + apply(new ElasticDatabaseCleaner(), [$this->elasticsearchClient]); + apply(new MySqlDatabaseCleaner(), [$this->entityManager]); + } + + public function close(): void + { + } +} diff --git a/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocContextInfrastructureTestCase.php b/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocContextInfrastructureTestCase.php index 031e21057..a793d0d7b 100644 --- a/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocContextInfrastructureTestCase.php +++ b/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocContextInfrastructureTestCase.php @@ -4,6 +4,7 @@ namespace CodelyTv\Tests\Mooc\Shared\Infrastructure\PhpUnit; +use CodelyTv\Apps\Mooc\Backend\MoocBackendKernel; use CodelyTv\Tests\Shared\Infrastructure\PhpUnit\InfrastructureTestCase; use Doctrine\ORM\EntityManager; @@ -27,8 +28,8 @@ protected function tearDown(): void parent::tearDown(); } - protected function clearUnitOfWork(): void + protected function kernelClass(): string { - $this->service(EntityManager::class)->clear(); + return MoocBackendKernel::class; } } diff --git a/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php b/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php index 5a8eb7032..0d3325ede 100644 --- a/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php +++ b/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php @@ -5,7 +5,7 @@ namespace CodelyTv\Tests\Mooc\Shared\Infrastructure\PhpUnit; use CodelyTv\Tests\Shared\Infrastructure\Arranger\EnvironmentArranger; -use CodelyTv\Tests\Shared\Infrastructure\Doctrine\DatabaseCleaner; +use CodelyTv\Tests\Shared\Infrastructure\Doctrine\MySqlDatabaseCleaner; use Doctrine\ORM\EntityManager; use function Lambdish\Phunctional\apply; @@ -20,7 +20,7 @@ public function __construct(EntityManager $entityManager) public function arrange(): void { - apply(new DatabaseCleaner(), [$this->entityManager]); + apply(new MySqlDatabaseCleaner(), [$this->entityManager]); } public function close(): void diff --git a/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php b/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php index fbaf5e2dd..e15f13cf1 100644 --- a/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php @@ -4,6 +4,7 @@ namespace CodelyTv\Tests\Shared\Infrastructure\Bus\Event\MySql; +use CodelyTv\Apps\Mooc\Backend\MoocBackendKernel; use CodelyTv\Shared\Domain\Bus\Event\DomainEvent; use CodelyTv\Shared\Infrastructure\Bus\Event\DomainEventMapping; use CodelyTv\Shared\Infrastructure\Bus\Event\MySql\MySqlDoctrineDomainEventsConsumer; @@ -42,4 +43,9 @@ public function it_should_publish_and_consume_domain_events_from_msql(): void $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 daa247034..bd5f79401 100644 --- a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php @@ -4,6 +4,7 @@ namespace CodelyTv\Tests\Shared\Infrastructure\Bus\Event\RabbitMq; +use CodelyTv\Apps\Mooc\Backend\MoocBackendKernel; use CodelyTv\Shared\Domain\Bus\Event\DomainEvent; use CodelyTv\Shared\Infrastructure\Bus\Event\DomainEventJsonDeserializer; use CodelyTv\Shared\Infrastructure\Bus\Event\MySql\MySqlDoctrineEventBus; @@ -175,4 +176,9 @@ private function assertDeadLetterContainsEvent(int $expectedNumberOfEvents): voi $this->assertSame($expectedNumberOfEvents, $totalEventsInDeadLetter); } + + protected function kernelClass(): string + { + return MoocBackendKernel::class; + } } diff --git a/tests/Shared/Infrastructure/Doctrine/DatabaseCleaner.php b/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php similarity index 97% rename from tests/Shared/Infrastructure/Doctrine/DatabaseCleaner.php rename to tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php index 47144db81..fdf2b70f5 100644 --- a/tests/Shared/Infrastructure/Doctrine/DatabaseCleaner.php +++ b/tests/Shared/Infrastructure/Doctrine/MySqlDatabaseCleaner.php @@ -9,7 +9,7 @@ use function Lambdish\Phunctional\first; use function Lambdish\Phunctional\map; -final class DatabaseCleaner +final class MySqlDatabaseCleaner { public function __invoke(EntityManagerInterface $entityManager): void { diff --git a/tests/Shared/Infrastructure/Elastic/ElasticDatabaseCleaner.php b/tests/Shared/Infrastructure/Elastic/ElasticDatabaseCleaner.php new file mode 100644 index 000000000..0f318cc6d --- /dev/null +++ b/tests/Shared/Infrastructure/Elastic/ElasticDatabaseCleaner.php @@ -0,0 +1,26 @@ +client()->cat()->indices(); + + each( + static function (array $index) use ($client) { + $indexName = $index['index']; + + $client->client()->indices()->delete(['index' => $indexName]); + $client->client()->indices()->create(['index' => $indexName]); + }, + $indices + ); + } +} diff --git a/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php b/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php index f459771f5..bb2b969fe 100644 --- a/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php +++ b/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php @@ -4,23 +4,22 @@ namespace CodelyTv\Tests\Shared\Infrastructure\PhpUnit; -use CodelyTv\Tests\Mooc\Shared\Infrastructure\PhpUnit\MoocEnvironmentArranger; use CodelyTv\Tests\Shared\Domain\TestUtils; use Doctrine\ORM\EntityManager; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; +use Throwable; abstract class InfrastructureTestCase extends KernelTestCase { + abstract protected function kernelClass(): string; + protected function setUp(): void { + $_SERVER['KERNEL_CLASS'] = $this->kernelClass(); + self::bootKernel(['environment' => 'test']); parent::setUp(); - - // @todo This should be for the "Shared Infrastructure" connection - $arranger = new MoocEnvironmentArranger($this->service(EntityManager::class)); - - $arranger->arrange(); } protected function assertSimilar($expected, $actual): void @@ -39,4 +38,24 @@ protected function parameter($parameter) { return self::$container->getParameter($parameter); } + + protected function clearUnitOfWork(): void + { + $this->service(EntityManager::class)->clear(); + } + + protected function eventually(callable $fn, $totalRetries = 3, $timeToWaitOnErrorInSeconds = 1, $attempt = 0): void + { + try { + $fn(); + } catch (Throwable $error) { + if ($totalRetries === $attempt) { + throw $error; + } + + sleep($timeToWaitOnErrorInSeconds); + + $this->eventually($fn, $totalRetries, $timeToWaitOnErrorInSeconds, $attempt + 1); + } + } } From 11774aced582b54bf8ec9767010afdd1930eb41a Mon Sep 17 00:00:00 2001 From: Jose Maria Date: Sat, 18 Jul 2020 17:49:31 +0200 Subject: [PATCH 026/106] Correct return type in DomainEventSubscriberLocator (#188) --- .../Infrastructure/Bus/Event/DomainEventSubscriberLocator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php b/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php index c35ac9523..192ab8650 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php @@ -20,7 +20,7 @@ public function __construct(Traversable $mapping) $this->mapping = iterator_to_array($mapping); } - public function allSubscribedTo(string $eventClass): callable + public function allSubscribedTo(string $eventClass): array { $formatted = CallableFirstParameterExtractor::forPipedCallables($this->mapping); From f5d8a859f71367bd80d73040e2cb07afb23c0d93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Sat, 18 Jul 2020 17:28:52 +0200 Subject: [PATCH 027/106] Add all apps in docker-compose --- .env | 2 +- .../frontend/config/routes/courses.yaml | 4 +- .../frontend/config/routes/home.yaml | 2 +- docker-compose.yml | 61 +++++++++++++------ etc/databases/mooc.sql | 2 + .../nginx/backoffice_backend.conf | 30 +++++++++ .../nginx/backoffice_frontend.conf | 30 +++++++++ .../nginx/{default.conf => mooc_backend.conf} | 4 +- 8 files changed, 111 insertions(+), 24 deletions(-) create mode 100755 etc/infrastructure/nginx/backoffice_backend.conf create mode 100755 etc/infrastructure/nginx/backoffice_frontend.conf rename etc/infrastructure/nginx/{default.conf => mooc_backend.conf} (88%) diff --git a/.env b/.env index 0645dd4fa..b0800653e 100644 --- a/.env +++ b/.env @@ -25,7 +25,7 @@ BACKOFFICE_DATABASE_USER=root BACKOFFICE_DATABASE_PASSWORD= # Elasticsearch -BACKOFFICE_ELASTICSEARCH_HOST=codelytv-php_ddd_skeleton-mooc-elastic +BACKOFFICE_ELASTICSEARCH_HOST=codelytv-php_ddd_skeleton-backoffice-elastic BACKOFFICE_ELASTICSEARCH_INDEX_PREFIX=backoffice # COMMON # diff --git a/apps/backoffice/frontend/config/routes/courses.yaml b/apps/backoffice/frontend/config/routes/courses.yaml index 46d5ab683..bb3b30cde 100644 --- a/apps/backoffice/frontend/config/routes/courses.yaml +++ b/apps/backoffice/frontend/config/routes/courses.yaml @@ -1,9 +1,9 @@ courses_get: path: /courses - controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\CoursesGetController + controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\CoursesGetWebController methods: [GET] courses_post: path: /courses - controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\CoursesPostController + controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Courses\CoursesPostWebController methods: [POST] diff --git a/apps/backoffice/frontend/config/routes/home.yaml b/apps/backoffice/frontend/config/routes/home.yaml index cbf8e1f5b..687b22467 100644 --- a/apps/backoffice/frontend/config/routes/home.yaml +++ b/apps/backoffice/frontend/config/routes/home.yaml @@ -1,4 +1,4 @@ home_get: path: / - controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Home\HomeGetController + controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Home\HomeGetWebController methods: [GET] diff --git a/docker-compose.yml b/docker-compose.yml index 8e0cce200..14697bc38 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ version: '3' services: - mysql: + mooc_mysql: container_name: codelytv-php_ddd_skeleton-mooc-mysql image: mysql:8 ports: @@ -11,8 +11,8 @@ services: - MYSQL_ALLOW_EMPTY_PASSWORD=yes command: ["--default-authentication-plugin=mysql_native_password"] - elasticsearch: - container_name: codelytv-php_ddd_skeleton-mooc-elastic + backoffice_elasticsearch: + container_name: codelytv-php_ddd_skeleton-backoffice-elastic image: docker.elastic.co/elasticsearch/elasticsearch:6.8.10 ports: - 9200:9200 @@ -22,7 +22,7 @@ services: - xpack.security.enabled=false - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - rabbitmq: + shared_rabbitmq: container_name: codelytv-php_ddd_skeleton-rabbitmq image: 'rabbitmq:3.7-management' restart: unless-stopped @@ -33,28 +33,53 @@ services: - RABBITMQ_DEFAULT_USER=codelytv - RABBITMQ_DEFAULT_PASS=c0d3ly - nginx: - container_name: codelytv-ddd-skeleton-nginx - image: nginx:1.15-alpine + shared_php: + container_name: codelytv-php_ddd_skeleton-php + build: + context: . + dockerfile: Dockerfile restart: unless-stopped ports: - - "8030:80" + - "9090:9001" volumes: - .:/app:delegated - - ./etc/infrastructure/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro depends_on: - - php + - shared_rabbitmq - php: - container_name: codelytv-php_ddd_skeleton-php - build: - context: . - dockerfile: Dockerfile + backoffice_backend_nginx: + container_name: codelytv-php_ddd_skeleton-backoffice_backend-nginx + image: nginx:1.19-alpine restart: unless-stopped ports: - - "9090:9001" + - "8040:80" + volumes: + - .:/app:delegated + - ./etc/infrastructure/nginx/backoffice_backend.conf:/etc/nginx/conf.d/default.conf:ro + depends_on: + - shared_php + - backoffice_elasticsearch + + backoffice_frontend_nginx: + container_name: codelytv-php_ddd_skeleton-backoffice_frontend-nginx + image: nginx:1.19-alpine + restart: unless-stopped + ports: + - "8041:80" + volumes: + - .:/app:delegated + - ./etc/infrastructure/nginx/backoffice_frontend.conf:/etc/nginx/conf.d/default.conf:ro + depends_on: + - shared_php + + mooc_backend_nginx: + container_name: codelytv-php_ddd_skeleton-mooc_backend-nginx + image: nginx:1.19-alpine + restart: unless-stopped + ports: + - "8030:80" volumes: - .:/app:delegated + - ./etc/infrastructure/nginx/mooc_backend.conf:/etc/nginx/conf.d/default.conf:ro depends_on: - - mysql - - rabbitmq + - shared_php + - mooc_mysql diff --git a/etc/databases/mooc.sql b/etc/databases/mooc.sql index 6162ace70..e236cbc46 100644 --- a/etc/databases/mooc.sql +++ b/etc/databases/mooc.sql @@ -12,6 +12,8 @@ CREATE TABLE `courses_counter` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +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, diff --git a/etc/infrastructure/nginx/backoffice_backend.conf b/etc/infrastructure/nginx/backoffice_backend.conf new file mode 100755 index 000000000..c0d69fda5 --- /dev/null +++ b/etc/infrastructure/nginx/backoffice_backend.conf @@ -0,0 +1,30 @@ +server { + listen 80; + server_name localhost; + root /app/apps/backoffice/backend/public; + + error_log stderr; + access_log stdout; + + rewrite ^/index\.php/?(.*)$ /$1 permanent; + + try_files $uri @rewriteapp; + + location @rewriteapp { + rewrite ^(.*)$ /index.php/$1 last; + } + + location ~ /\. { + deny all; + } + + location ~ ^/(index)\.php(/|$) { + fastcgi_split_path_info ^(.+\.php)(/.*)$; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_index index.php; + send_timeout 1800; + fastcgi_read_timeout 1800; + fastcgi_pass shared_php:9000; + } +} diff --git a/etc/infrastructure/nginx/backoffice_frontend.conf b/etc/infrastructure/nginx/backoffice_frontend.conf new file mode 100755 index 000000000..3732d1d4f --- /dev/null +++ b/etc/infrastructure/nginx/backoffice_frontend.conf @@ -0,0 +1,30 @@ +server { + listen 80; + server_name localhost; + root /app/apps/backoffice/frontend/public; + + error_log stderr; + access_log stdout; + + rewrite ^/index\.php/?(.*)$ /$1 permanent; + + try_files $uri @rewriteapp; + + location @rewriteapp { + rewrite ^(.*)$ /index.php/$1 last; + } + + location ~ /\. { + deny all; + } + + location ~ ^/(index)\.php(/|$) { + fastcgi_split_path_info ^(.+\.php)(/.*)$; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_index index.php; + send_timeout 1800; + fastcgi_read_timeout 1800; + fastcgi_pass shared_php:9000; + } +} diff --git a/etc/infrastructure/nginx/default.conf b/etc/infrastructure/nginx/mooc_backend.conf similarity index 88% rename from etc/infrastructure/nginx/default.conf rename to etc/infrastructure/nginx/mooc_backend.conf index e08bcb5c6..f122a5a21 100755 --- a/etc/infrastructure/nginx/default.conf +++ b/etc/infrastructure/nginx/mooc_backend.conf @@ -1,6 +1,6 @@ server { listen 80; - server_name localhost api.codelytv.localhost; + server_name localhost; root /app/apps/mooc/backend/public; error_log stderr; @@ -25,6 +25,6 @@ server { fastcgi_index index.php; send_timeout 1800; fastcgi_read_timeout 1800; - fastcgi_pass php:9000; + fastcgi_pass shared_php:9000; } } From 2dfb0bb127c2f027f51017b5fc7caf7ee6fbcb78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Sat, 18 Jul 2020 17:28:57 +0200 Subject: [PATCH 028/106] Improve readme --- README.md | 59 ++++++++++++++++++------------------------------------- 1 file changed, 19 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index dc49f5941..a67c0f1fa 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@

- 🐘🎯 Hexagonal Architecture, DDD & CQRS in PHP Symfony + 🐘🎯 Hexagonal Architecture, DDD & CQRS in PHP

@@ -16,44 +16,22 @@

- Example of a PHP application following Domain-Driven Design (DDD) and - Command Query Responsibility Segregation (CQRS) principles keeping the code as simple as possible. + Example of a PHP application using Domain-Driven Design (DDD) and Command Query Responsibility Segregation + (CQRS) principles keeping the code as simple as possible.

Take a look, play and have fun with this. Stars are welcomed 😊

- Explore the docs » -
-
View Demo · - Report Bug + Report a bug · - Request Feature + Request a feature

- - -## Table of Contents - -* [🚀 Environment setup](#-environment-setup) - * [🐳 Needed tools](#-needed-tools) - * [🛠️ Environment configuration](#-environment-configuration) - * [🌍 Application execution](#-application-execution) - * [✅ Tests execution](#-tests-execution) -* [🤔 Project explanation](#-project-explanation) - * [Bounded Contexts](#-bounded-contexts) - * [Hexagonal Architecture](#-hexagonal-architecture) - * [Aggregates](#aggregates) - * [Command Bus](#command-bus) - * [Query Bus](#query-bus) - * [Event Bus](#event-bus) -* [🤝 Contributing](#-contributing) -* [🤩 Extra](#-extra) - -## 🚀 Environment setup +## 🚀 Environment Setup ### 🐳 Needed tools @@ -63,24 +41,25 @@ ### 🛠️ Environment configuration -1. Create a local environment file if needed: `cp .env .env.local` -3. Add `api.codelytv.localhost` domain to your local hosts: `echo "127.0.0.1 api.codelytv.localhost"| sudo tee -a /etc/hosts > /dev/null` +1. Create a local environment file (`cp .env .env.local`) if you want to modify any parameter -### 🌍 Application execution +### 🔥 Application execution -1. Install PHP dependencies and bring up the project Docker containers with Docker Compose: `make build` -2. Go to [the API health check page](http://api.codelytv.localhost:8030/health-check) +1. Install all the dependencies and bring up the project with Docker executing: `make build` +2. Then you'll have 3 apps available (2 APIs and 1 Frontend): + 1. [Mooc Backend](apps/mooc/backend): http://localhost:8030/health-check + 2. [Backoffice Backend](apps/backoffice/backend): http://localhost:8040/health-check + 3. [Backoffice Frontend](apps/backoffice/frontend): http://localhost:8041/health-check ### ✅ Tests execution -1. Install PHP dependencies if you haven't done so: `make deps` -2. Execute Behat and PHP Unit tests: `make test` +1. Install the dependencies if you haven't done it previously: `make deps` +2. Execute PHPUnit and Behat tests: `make test` -## 🤔 Project explanation +## 👩‍💻 Project explanation -This project tries to be a MOOC (Massive Open Online Course) platform. -It has a [Web](apps/backoffice/frontend/src/Controller), an [API](apps/mooc/backend/src/Controller) and -some [Consumers](apps/mooc/backend/src/Command). +This project tries to be a MOOC (Massive Open Online Course) platform. It's decoupled from any framework, but it has +some Symfony and Laravel implementations. ### ⛱️ Bounded Contexts @@ -89,7 +68,7 @@ some [Consumers](apps/mooc/backend/src/Command). ### 🎯 Hexagonal Architecture -This repository follow the Hexagonal Architecture pattern. Also is structured using `modules`. +This repository follow the Hexagonal Architecture pattern. Also, it's structured using `modules`. With this, we can see that the current structure of a Bounded Context is: ```scala From 288bfce4ace691dc314dbaa14ce068fa51d55e9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josu=C3=A9=20Pi=C3=B1a?= Date: Sat, 18 Jul 2020 17:58:07 +0200 Subject: [PATCH 029/106] Fix composer install for php ^7.4 (#185) --- composer.json | 2 +- composer.lock | 27 +++++++++++++++++---------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/composer.json b/composer.json index 48ef5b128..6538b283a 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": "7.4", + "php": "^7.4", "ext-amqp": "*", "ext-apcu": "*", diff --git a/composer.lock b/composer.lock index bda815f9a..b7da50413 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": "36d016d3964f43eaae650522e3866b52", + "content-hash": "91786eed4d003fe7e7230e560282ea02", "packages": [ { "name": "doctrine/annotations", @@ -6428,12 +6428,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "55922f51129488c246a776ff944463605d447da0" + "reference": "239e50ae0e1906d32b32ed58bc7d15c81bfc06f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/55922f51129488c246a776ff944463605d447da0", - "reference": "55922f51129488c246a776ff944463605d447da0", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/239e50ae0e1906d32b32ed58bc7d15c81bfc06f0", + "reference": "239e50ae0e1906d32b32ed58bc7d15c81bfc06f0", "shasum": "" }, "conflict": { @@ -6442,13 +6442,14 @@ "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amphp/artax": "<1.0.6|>=2,<2.0.6", "amphp/http": "<1.0.1", + "amphp/http-client": ">=4,<4.4", "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6", "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", - "bolt/bolt": "<3.6.10", + "bolt/bolt": "<3.7.1", "brightlocal/phpwhois": "<=4.2.5", "buddypress/buddypress": "<5.1.2", "bugsnag/bugsnag-laravel": ">=2,<2.0.2", @@ -6476,8 +6477,8 @@ "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1", "dolibarr/dolibarr": "<11.0.4", "dompdf/dompdf": ">=0.6,<0.6.2", - "drupal/core": ">=7,<7.70|>=8,<8.7.14|>=8.8,<8.8.6", - "drupal/drupal": ">=7,<7.70|>=8,<8.7.14|>=8.8,<8.8.6", + "drupal/core": ">=7,<7.72|>=8,<8.8.8|>=8.9,<8.9.1|>=9,<9.0.1", + "drupal/drupal": ">=7,<7.72|>=8,<8.8.8|>=8.9,<8.9.1|>=9,<9.0.1", "endroid/qr-code-bundle": "<3.4.2", "enshrined/svg-sanitize": "<0.13.1", "erusev/parsedown": "<1.7.2", @@ -6487,8 +6488,9 @@ "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-admin-ui-assets": ">=4,<4.2", + "ezsystems/ezplatform-kernel": ">=1,<1.0.2.1", "ezsystems/ezplatform-user": ">=1,<1.0.1", - "ezsystems/ezpublish-kernel": ">=5.3,<5.3.12.1|>=5.4,<5.4.14.1|>=6,<6.7.9.1|>=6.8,<6.13.6.2|>=7,<7.2.4.1|>=7.3,<7.3.2.1|>=7.5,<7.5.6.2", + "ezsystems/ezpublish-kernel": ">=5.3,<5.3.12.1|>=5.4,<5.4.14.2|>=6,<6.7.9.1|>=6.8,<6.13.6.3|>=7,<7.2.4.1|>=7.3,<7.3.2.1|>=7.5,<7.5.7.1", "ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.6|>=5.4,<5.4.14.1|>=2011,<2017.12.7.2|>=2018.6,<2018.6.1.4|>=2018.9,<2018.9.1.3|>=2019.3,<2019.3.4.2", "ezsystems/repository-forms": ">=2.3,<2.3.2.1", "ezyang/htmlpurifier": "<4.1.1", @@ -6500,6 +6502,7 @@ "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", "fuel/core": "<1.8.1", "getgrav/grav": "<1.7-beta.8", + "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", "gree/jose": "<=2.2", "gregwar/rst": "<1.0.3", "guzzlehttp/guzzle": ">=4-rc.2,<4.2.4|>=5,<5.3.1|>=6,<6.2.1", @@ -6525,7 +6528,9 @@ "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2-p.2", "monolog/monolog": ">=1.8,<1.12", "namshi/jose": "<2.2", + "nystudio107/craft-seomatic": "<3.3", "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", + "october/october": ">=1.0.319,<1.0.467", "onelogin/php-saml": "<2.10.4", "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", "openid/php-openid": "<2.3", @@ -6538,6 +6543,7 @@ "pear/archive_tar": "<1.4.4", "phpfastcache/phpfastcache": ">=5,<5.0.13", "phpmailer/phpmailer": "<6.1.6", + "phpmussel/phpmussel": ">=1,<1.6", "phpmyadmin/phpmyadmin": "<4.9.2", "phpoffice/phpexcel": "<1.8.2", "phpoffice/phpspreadsheet": "<1.8", @@ -6552,6 +6558,7 @@ "propel/propel": ">=2-alpha.1,<=2-alpha.7", "propel/propel1": ">=1,<=1.7.1", "pusher/pusher-php-server": "<2.2.1", + "rainlab/debugbar-plugin": "<3.1", "robrichards/xmlseclibs": "<3.0.4", "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", @@ -6700,7 +6707,7 @@ "type": "tidelift" } ], - "time": "2020-05-28T00:01:39+00:00" + "time": "2020-07-06T15:00:46+00:00" }, { "name": "sebastian/code-unit", @@ -7937,7 +7944,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "7.4", + "php": "^7.4", "ext-amqp": "*", "ext-apcu": "*", "ext-json": "*", From 844cf78a8f71b69792f306e0896be5cb77ca4b86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Sat, 18 Jul 2020 18:36:41 +0200 Subject: [PATCH 030/106] Use composer 2 instead of prestissimo (#190) * Update dependencies * Use composer 2 instead of prestissimo --- Makefile | 2 +- composer.json | 30 +- composer.lock | 981 ++++++++++++++++++++++++++++---------------------- 3 files changed, 574 insertions(+), 439 deletions(-) diff --git a/Makefile b/Makefile index 93f612403..3c71c6192 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,7 @@ composer-require-module: CMD=require $(module) composer-require-module: INTERACTIVE=-ti --interactive 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) \ - clevyr/prestissimo $(CMD) \ + composer:2 $(CMD) \ --ignore-platform-reqs \ --no-ansi diff --git a/composer.json b/composer.json index 6538b283a..876ae5f60 100644 --- a/composer.json +++ b/composer.json @@ -12,23 +12,23 @@ "ext-zend-opcache": "*", "ext-pdo": "*", - "symfony/framework-bundle": "^5.0", - "symfony/messenger": "^5.0", - "symfony/dotenv": "^5.0", - "symfony/yaml": "^5.0", - "symfony/twig-bundle": "^5.0", - "symfony/validator": "^5.0", + "symfony/framework-bundle": "^5.1", + "symfony/messenger": "^5.1", + "symfony/dotenv": "^5.1", + "symfony/yaml": "^5.1", + "symfony/twig-bundle": "^5.1", + "symfony/validator": "^5.1", "lambdish/phunctional": "^2.0", - "ramsey/uuid": "^3.8", + "ramsey/uuid": "^3.9", - "doctrine/dbal": "^2.9", - "doctrine/orm": "^2.6", - "ocramius/proxy-manager": "^2.6", + "doctrine/dbal": "^2.10", + "doctrine/orm": "^2.7", + "ocramius/proxy-manager": "^2.9", "elasticsearch/elasticsearch": "^7.3", - "monolog/monolog": "^2.0" + "monolog/monolog": "^2.1" }, "require-dev": { "ext-xdebug": "*", @@ -38,12 +38,12 @@ "behat/behat": "^3.6", "friends-of-behat/mink-extension": "^2.4", "behat/mink-browserkit-driver": "^1.3", - "friends-of-behat/symfony-extension": "2.1.0-BETA.1", + "friends-of-behat/symfony-extension": "^2.1", - "phpunit/phpunit": "^9.1", - "mockery/mockery": "^1.2", + "phpunit/phpunit": "^9.2", + "mockery/mockery": "^1.4", - "fzaninotto/faker": "^1.8", + "fzaninotto/faker": "^1.9", "symfony/debug": "^4.4" }, diff --git a/composer.lock b/composer.lock index b7da50413..aec178d26 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": "91786eed4d003fe7e7230e560282ea02", + "content-hash": "6544f3a33a58bdb4cfba6f658e22a8cb", "packages": [ { "name": "doctrine/annotations", @@ -77,16 +77,16 @@ }, { "name": "doctrine/cache", - "version": "1.10.1", + "version": "1.10.2", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3" + "reference": "13e3381b25847283a91948d04640543941309727" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3", - "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3", + "url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727", + "reference": "13e3381b25847283a91948d04640543941309727", "shasum": "" }, "require": { @@ -169,20 +169,20 @@ "type": "tidelift" } ], - "time": "2020-05-27T16:24:54+00:00" + "time": "2020-07-07T18:54:01+00:00" }, { "name": "doctrine/collections", - "version": "1.6.5", + "version": "1.6.6", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "fc0206348e17e530d09463fef07ba8968406cd6d" + "reference": "5f0470363ff042d0057006ae7acabc5d7b5252d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/fc0206348e17e530d09463fef07ba8968406cd6d", - "reference": "fc0206348e17e530d09463fef07ba8968406cd6d", + "url": "https://api.github.com/repos/doctrine/collections/zipball/5f0470363ff042d0057006ae7acabc5d7b5252d5", + "reference": "5f0470363ff042d0057006ae7acabc5d7b5252d5", "shasum": "" }, "require": { @@ -248,20 +248,20 @@ "type": "tidelift" } ], - "time": "2020-05-25T19:24:35+00:00" + "time": "2020-06-22T19:14:02+00:00" }, { "name": "doctrine/common", - "version": "3.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "402a424f1e7dc39ce8fa7901e56d25835978387c" + "reference": "a3c6479858989e242a2465972b4f7a8642baf0d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/402a424f1e7dc39ce8fa7901e56d25835978387c", - "reference": "402a424f1e7dc39ce8fa7901e56d25835978387c", + "url": "https://api.github.com/repos/doctrine/common/zipball/a3c6479858989e242a2465972b4f7a8642baf0d4", + "reference": "a3c6479858989e242a2465972b4f7a8642baf0d4", "shasum": "" }, "require": { @@ -338,7 +338,7 @@ "type": "tidelift" } ], - "time": "2020-05-30T15:08:34+00:00" + "time": "2020-06-05T16:59:53+00:00" }, { "name": "doctrine/dbal", @@ -1042,16 +1042,16 @@ }, { "name": "elasticsearch/elasticsearch", - "version": "v7.7.0", + "version": "v7.8.0", "source": { "type": "git", "url": "https://github.com/elastic/elasticsearch-php.git", - "reference": "1d90a7ff4fb1936dc4376f09d723af75714f6f05" + "reference": "5c2d039ae7bdaa1e28f1e66971c5b3314fc36383" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/1d90a7ff4fb1936dc4376f09d723af75714f6f05", - "reference": "1d90a7ff4fb1936dc4376f09d723af75714f6f05", + "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/5c2d039ae7bdaa1e28f1e66971c5b3314fc36383", + "reference": "5c2d039ae7bdaa1e28f1e66971c5b3314fc36383", "shasum": "" }, "require": { @@ -1101,7 +1101,7 @@ "elasticsearch", "search" ], - "time": "2020-05-13T15:19:26+00:00" + "time": "2020-06-18T19:23:29+00:00" }, { "name": "ezimuel/guzzlestreams", @@ -1206,16 +1206,16 @@ }, { "name": "lambdish/phunctional", - "version": "v2.0.0", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/Lambdish/phunctional.git", - "reference": "d21bf670ef4e1bd5ba7fc94b6cd2ae30053d21b4" + "reference": "2e41ff9956b79c8764b74dfd25529c0601f8d9d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Lambdish/phunctional/zipball/d21bf670ef4e1bd5ba7fc94b6cd2ae30053d21b4", - "reference": "d21bf670ef4e1bd5ba7fc94b6cd2ae30053d21b4", + "url": "https://api.github.com/repos/Lambdish/phunctional/zipball/2e41ff9956b79c8764b74dfd25529c0601f8d9d1", + "reference": "2e41ff9956b79c8764b74dfd25529c0601f8d9d1", "shasum": "" }, "require": { @@ -1237,16 +1237,13 @@ ], "authors": [ { - "name": "Eloi Poch", - "email": "eloi.poch@gmail.com" + "name": "Eloi Poch" }, { - "name": "Jorge Ávila", - "email": "avilacardenosa@gmail.com" + "name": "Jorge Ávila" }, { - "name": "Rafa Gómez", - "email": "rgomezcasas@gmail.com" + "name": "Rafa Gómez" } ], "description": "λ PHP functional library", @@ -1257,7 +1254,7 @@ "library", "php" ], - "time": "2019-12-08T23:46:38+00:00" + "time": "2020-06-30T16:59:45+00:00" }, { "name": "laminas/laminas-code", @@ -1529,29 +1526,30 @@ }, { "name": "ocramius/package-versions", - "version": "1.8.0", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/Ocramius/PackageVersions.git", - "reference": "421679846270a5772534828013a93be709fb13df" + "reference": "80f88b35ff45a0fdccf852d4788bb79bb67c3817" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/421679846270a5772534828013a93be709fb13df", - "reference": "421679846270a5772534828013a93be709fb13df", + "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/80f88b35ff45a0fdccf852d4788bb79bb67c3817", + "reference": "80f88b35ff45a0fdccf852d4788bb79bb67c3817", "shasum": "" }, "require": { - "composer-plugin-api": "^1.1.0 || ^2.0", - "php": "^7.4.0" + "composer-plugin-api": "^2.0.0", + "composer-runtime-api": "^2.0.0", + "php": "^7.4.7" }, "require-dev": { - "composer/composer": "^1.9.3 || ^2.0@dev", - "doctrine/coding-standard": "^7.0.2", + "composer/composer": "^2.0.0@dev", + "doctrine/coding-standard": "^8.1.0", "ext-zip": "^1.15.0", - "infection/infection": "^0.15.3", - "phpunit/phpunit": "^9.0.1", - "vimeo/psalm": "^3.9.3" + "infection/infection": "^0.16.4", + "phpunit/phpunit": "^9.1.5", + "vimeo/psalm": "^3.12.2" }, "type": "composer-plugin", "extra": { @@ -1586,25 +1584,25 @@ "type": "tidelift" } ], - "time": "2020-04-06T17:43:35+00:00" + "time": "2020-07-11T19:45:58+00:00" }, { "name": "ocramius/proxy-manager", - "version": "2.8.0", + "version": "2.9.0", "source": { "type": "git", "url": "https://github.com/Ocramius/ProxyManager.git", - "reference": "ac1dd414fd114cfc0da9930e0ab46063c2f5e62a" + "reference": "9475248b6521f3029b973c4cd9aad31022bfd793" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/ac1dd414fd114cfc0da9930e0ab46063c2f5e62a", - "reference": "ac1dd414fd114cfc0da9930e0ab46063c2f5e62a", + "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/9475248b6521f3029b973c4cd9aad31022bfd793", + "reference": "9475248b6521f3029b973c4cd9aad31022bfd793", "shasum": "" }, "require": { + "composer-runtime-api": "^2.0.0", "laminas/laminas-code": "^3.4.1", - "ocramius/package-versions": "^1.8.0", "php": "~7.4.1", "webimpress/safe-writer": "^2.0.1" }, @@ -1614,15 +1612,16 @@ "zendframework/zend-stdlib": "<3.2.1" }, "require-dev": { - "doctrine/coding-standard": "^6.0.0", + "codelicia/xulieta": "^0.1.2", + "doctrine/coding-standard": "^8.1.0", "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.16.4", + "nikic/php-parser": "^4.6.0", + "phpbench/phpbench": "^0.17.1", + "phpunit/phpunit": "^9.2.5", + "slevomat/coding-standard": "^6.3.10", + "squizlabs/php_codesniffer": "^3.5.5", + "vimeo/psalm": "^3.12.2" }, "suggest": { "laminas/laminas-json": "To have the JsonRpc adapter (Remote Object feature)", @@ -1671,7 +1670,7 @@ "type": "tidelift" } ], - "time": "2020-04-13T14:42:16+00:00" + "time": "2020-07-13T20:10:37+00:00" }, { "name": "paragonie/random_compat", @@ -2041,7 +2040,7 @@ }, { "name": "symfony/amqp-messenger", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/amqp-messenger.git", @@ -2111,16 +2110,16 @@ }, { "name": "symfony/cache", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "653b1d1cefffedb67ed1932db59c0bb344adf088" + "reference": "787eb05e137ad74fa5e51857b9884719760c7b2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/653b1d1cefffedb67ed1932db59c0bb344adf088", - "reference": "653b1d1cefffedb67ed1932db59c0bb344adf088", + "url": "https://api.github.com/repos/symfony/cache/zipball/787eb05e137ad74fa5e51857b9884719760c7b2f", + "reference": "787eb05e137ad74fa5e51857b9884719760c7b2f", "shasum": "" }, "require": { @@ -2201,20 +2200,20 @@ "type": "tidelift" } ], - "time": "2020-05-28T09:10:22+00:00" + "time": "2020-06-09T14:15:34+00:00" }, { "name": "symfony/cache-contracts", - "version": "v2.1.2", + "version": "v2.1.3", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "87c92f62c494626598e9148208aaa6d1716b8e3c" + "reference": "9771a09d2e6b84ecb8c9f0a7dbc72ee92aeba009" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/87c92f62c494626598e9148208aaa6d1716b8e3c", - "reference": "87c92f62c494626598e9148208aaa6d1716b8e3c", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/9771a09d2e6b84ecb8c9f0a7dbc72ee92aeba009", + "reference": "9771a09d2e6b84ecb8c9f0a7dbc72ee92aeba009", "shasum": "" }, "require": { @@ -2228,6 +2227,10 @@ "extra": { "branch-alias": { "dev-master": "2.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -2273,11 +2276,11 @@ "type": "tidelift" } ], - "time": "2020-05-20T17:43:50+00:00" + "time": "2020-07-06T13:23:11+00:00" }, { "name": "symfony/config", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/config.git", @@ -2357,16 +2360,16 @@ }, { "name": "symfony/console", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "00bed125812716d09b163f0727ef33bb49bf3448" + "reference": "34ac555a3627e324b660e318daa07572e1140123" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/00bed125812716d09b163f0727ef33bb49bf3448", - "reference": "00bed125812716d09b163f0727ef33bb49bf3448", + "url": "https://api.github.com/repos/symfony/console/zipball/34ac555a3627e324b660e318daa07572e1140123", + "reference": "34ac555a3627e324b660e318daa07572e1140123", "shasum": "" }, "require": { @@ -2446,20 +2449,20 @@ "type": "tidelift" } ], - "time": "2020-05-30T20:35:19+00:00" + "time": "2020-06-15T12:59:21+00:00" }, { "name": "symfony/dependency-injection", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "6a6791e9584273b32eeb01790da4c7446d87a621" + "reference": "6508423eded583fc07e88a0172803e1a62f0310c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/6a6791e9584273b32eeb01790da4c7446d87a621", - "reference": "6a6791e9584273b32eeb01790da4c7446d87a621", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/6508423eded583fc07e88a0172803e1a62f0310c", + "reference": "6508423eded583fc07e88a0172803e1a62f0310c", "shasum": "" }, "require": { @@ -2535,20 +2538,20 @@ "type": "tidelift" } ], - "time": "2020-05-30T20:35:19+00:00" + "time": "2020-06-12T08:11:32+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.1.2", + "version": "v2.1.3", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337" + "reference": "5e20b83385a77593259c9f8beb2c43cd03b2ac14" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337", - "reference": "dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5e20b83385a77593259c9f8beb2c43cd03b2ac14", + "reference": "5e20b83385a77593259c9f8beb2c43cd03b2ac14", "shasum": "" }, "require": { @@ -2558,6 +2561,10 @@ "extra": { "branch-alias": { "dev-master": "2.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -2595,20 +2602,20 @@ "type": "tidelift" } ], - "time": "2020-05-27T08:34:37+00:00" + "time": "2020-06-06T08:49:21+00:00" }, { "name": "symfony/doctrine-messenger", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-messenger.git", - "reference": "f0f0bae7249223973d768a4afdc9bd6388e7a055" + "reference": "a928616ec539355fdd57ad92216e4ebd95e05566" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/f0f0bae7249223973d768a4afdc9bd6388e7a055", - "reference": "f0f0bae7249223973d768a4afdc9bd6388e7a055", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/a928616ec539355fdd57ad92216e4ebd95e05566", + "reference": "a928616ec539355fdd57ad92216e4ebd95e05566", "shasum": "" }, "require": { @@ -2621,7 +2628,6 @@ }, "require-dev": { "doctrine/dbal": "^2.6|^3.0", - "doctrine/orm": "^2.6.3", "doctrine/persistence": "^1.3", "symfony/property-access": "^4.4|^5.0", "symfony/serializer": "^4.4|^5.0" @@ -2670,11 +2676,11 @@ "type": "tidelift" } ], - "time": "2020-05-29T03:19:22+00:00" + "time": "2020-06-09T14:24:29+00:00" }, { "name": "symfony/dotenv", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", @@ -2746,7 +2752,7 @@ }, { "name": "symfony/error-handler", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", @@ -2817,7 +2823,7 @@ }, { "name": "symfony/event-dispatcher", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", @@ -2903,16 +2909,16 @@ }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.1.2", + "version": "v2.1.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "405952c4e90941a17e52ef7489a2bd94870bb290" + "reference": "f6f613d74cfc5a623fc36294d3451eb7fa5a042b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/405952c4e90941a17e52ef7489a2bd94870bb290", - "reference": "405952c4e90941a17e52ef7489a2bd94870bb290", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f6f613d74cfc5a623fc36294d3451eb7fa5a042b", + "reference": "f6f613d74cfc5a623fc36294d3451eb7fa5a042b", "shasum": "" }, "require": { @@ -2926,6 +2932,10 @@ "extra": { "branch-alias": { "dev-master": "2.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -2971,11 +2981,11 @@ "type": "tidelift" } ], - "time": "2020-05-20T17:43:50+00:00" + "time": "2020-07-06T13:23:11+00:00" }, { "name": "symfony/filesystem", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", @@ -3039,7 +3049,7 @@ }, { "name": "symfony/finder", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", @@ -3102,16 +3112,16 @@ }, { "name": "symfony/framework-bundle", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "db39e29cf3a99692390e6d18fdc57d42e9e5a3c9" + "reference": "d9a85deaa9c7a10df087d86f6a689eb5d4db0abc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/db39e29cf3a99692390e6d18fdc57d42e9e5a3c9", - "reference": "db39e29cf3a99692390e6d18fdc57d42e9e5a3c9", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/d9a85deaa9c7a10df087d86f6a689eb5d4db0abc", + "reference": "d9a85deaa9c7a10df087d86f6a689eb5d4db0abc", "shasum": "" }, "require": { @@ -3245,20 +3255,20 @@ "type": "tidelift" } ], - "time": "2020-05-25T12:33:44+00:00" + "time": "2020-06-12T08:11:32+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "e0d853bddc2b2cfb0d67b0b4496c03fffe1d37fa" + "reference": "f93055171b847915225bd5b0a5792888419d8d75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e0d853bddc2b2cfb0d67b0b4496c03fffe1d37fa", - "reference": "e0d853bddc2b2cfb0d67b0b4496c03fffe1d37fa", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f93055171b847915225bd5b0a5792888419d8d75", + "reference": "f93055171b847915225bd5b0a5792888419d8d75", "shasum": "" }, "require": { @@ -3320,20 +3330,20 @@ "type": "tidelift" } ], - "time": "2020-05-24T12:18:07+00:00" + "time": "2020-06-15T06:52:54+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "75ff5327a7d6ede3ccc2fac3ebca9ed776b3e85c" + "reference": "a18c27ace1ef344ffcb129a5b089bad7643b387a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/75ff5327a7d6ede3ccc2fac3ebca9ed776b3e85c", - "reference": "75ff5327a7d6ede3ccc2fac3ebca9ed776b3e85c", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a18c27ace1ef344ffcb129a5b089bad7643b387a", + "reference": "a18c27ace1ef344ffcb129a5b089bad7643b387a", "shasum": "" }, "require": { @@ -3433,11 +3443,11 @@ "type": "tidelift" } ], - "time": "2020-05-31T06:14:18+00:00" + "time": "2020-06-15T13:51:38+00:00" }, { "name": "symfony/messenger", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/messenger.git", @@ -3527,16 +3537,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.17.0", + "version": "v1.18.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9" + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9", - "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454", + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454", "shasum": "" }, "require": { @@ -3548,7 +3558,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -3595,20 +3609,20 @@ "type": "tidelift" } ], - "time": "2020-05-12T16:14:59+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.17.0", + "version": "v1.18.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "e094b0770f7833fdf257e6ba4775be4e258230b2" + "reference": "b740103edbdcc39602239ee8860f0f45a8eb9aa5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e094b0770f7833fdf257e6ba4775be4e258230b2", - "reference": "e094b0770f7833fdf257e6ba4775be4e258230b2", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b740103edbdcc39602239ee8860f0f45a8eb9aa5", + "reference": "b740103edbdcc39602239ee8860f0f45a8eb9aa5", "shasum": "" }, "require": { @@ -3620,7 +3634,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -3669,20 +3687,20 @@ "type": "tidelift" } ], - "time": "2020-05-12T16:47:27+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.17.0", + "version": "v1.18.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "1357b1d168eb7f68ad6a134838e46b0b159444a9" + "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/1357b1d168eb7f68ad6a134838e46b0b159444a9", - "reference": "1357b1d168eb7f68ad6a134838e46b0b159444a9", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", + "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", "shasum": "" }, "require": { @@ -3694,7 +3712,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -3746,20 +3768,20 @@ "type": "tidelift" } ], - "time": "2020-05-12T16:14:59+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.17.0", + "version": "v1.18.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fa79b11539418b02fc5e1897267673ba2c19419c" + "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c", - "reference": "fa79b11539418b02fc5e1897267673ba2c19419c", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a", + "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a", "shasum": "" }, "require": { @@ -3771,7 +3793,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -3819,20 +3845,20 @@ "type": "tidelift" } ], - "time": "2020-05-12T16:47:27+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.17.0", + "version": "v1.18.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc" + "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a760d8964ff79ab9bf057613a5808284ec852ccc", - "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca", + "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca", "shasum": "" }, "require": { @@ -3841,7 +3867,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -3891,20 +3921,20 @@ "type": "tidelift" } ], - "time": "2020-05-12T16:47:27+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.17.0", + "version": "v1.18.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "5e30b2799bc1ad68f7feb62b60a73743589438dd" + "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/5e30b2799bc1ad68f7feb62b60a73743589438dd", - "reference": "5e30b2799bc1ad68f7feb62b60a73743589438dd", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981", + "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981", "shasum": "" }, "require": { @@ -3913,7 +3943,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -3967,11 +4001,11 @@ "type": "tidelift" } ], - "time": "2020-05-12T16:47:27+00:00" + "time": "2020-07-14T12:35:20+00:00" }, { "name": "symfony/redis-messenger", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/redis-messenger.git", @@ -4039,16 +4073,16 @@ }, { "name": "symfony/routing", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "95cf30145b26c758d6d832aa2d0de3128978d556" + "reference": "bbd0ba121d623f66d165a55a108008968911f3eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/95cf30145b26c758d6d832aa2d0de3128978d556", - "reference": "95cf30145b26c758d6d832aa2d0de3128978d556", + "url": "https://api.github.com/repos/symfony/routing/zipball/bbd0ba121d623f66d165a55a108008968911f3eb", + "reference": "bbd0ba121d623f66d165a55a108008968911f3eb", "shasum": "" }, "require": { @@ -4127,20 +4161,20 @@ "type": "tidelift" } ], - "time": "2020-05-30T20:35:19+00:00" + "time": "2020-06-10T11:49:58+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.1.2", + "version": "v2.1.3", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b" + "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/66a8f0957a3ca54e4f724e49028ab19d75a8918b", - "reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/58c7475e5457c5492c26cc740cc0ad7464be9442", + "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442", "shasum": "" }, "require": { @@ -4154,6 +4188,10 @@ "extra": { "branch-alias": { "dev-master": "2.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4199,20 +4237,20 @@ "type": "tidelift" } ], - "time": "2020-05-20T17:43:50+00:00" + "time": "2020-07-06T13:23:11+00:00" }, { "name": "symfony/string", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "90c2a5103f07feb19069379f3abdcdbacc7753a9" + "reference": "ac70459db781108db7c6d8981dd31ce0e29e3298" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/90c2a5103f07feb19069379f3abdcdbacc7753a9", - "reference": "90c2a5103f07feb19069379f3abdcdbacc7753a9", + "url": "https://api.github.com/repos/symfony/string/zipball/ac70459db781108db7c6d8981dd31ce0e29e3298", + "reference": "ac70459db781108db7c6d8981dd31ce0e29e3298", "shasum": "" }, "require": { @@ -4284,20 +4322,20 @@ "type": "tidelift" } ], - "time": "2020-05-20T17:43:50+00:00" + "time": "2020-06-11T12:16:36+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.1.2", + "version": "v2.1.3", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "e5ca07c8f817f865f618aa072c2fe8e0e637340e" + "reference": "616a9773c853097607cf9dd6577d5b143ffdcd63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e5ca07c8f817f865f618aa072c2fe8e0e637340e", - "reference": "e5ca07c8f817f865f618aa072c2fe8e0e637340e", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/616a9773c853097607cf9dd6577d5b143ffdcd63", + "reference": "616a9773c853097607cf9dd6577d5b143ffdcd63", "shasum": "" }, "require": { @@ -4310,6 +4348,10 @@ "extra": { "branch-alias": { "dev-master": "2.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4355,11 +4397,11 @@ "type": "tidelift" } ], - "time": "2020-05-20T17:43:50+00:00" + "time": "2020-07-06T13:23:11+00:00" }, { "name": "symfony/twig-bridge", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", @@ -4475,7 +4517,7 @@ }, { "name": "symfony/twig-bundle", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", @@ -4564,16 +4606,16 @@ }, { "name": "symfony/validator", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "7a012b935dffe51d37ce001f62fbc6cb307d96df" + "reference": "5e80f314a2faff6fb97942526e27c528b10acdb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/7a012b935dffe51d37ce001f62fbc6cb307d96df", - "reference": "7a012b935dffe51d37ce001f62fbc6cb307d96df", + "url": "https://api.github.com/repos/symfony/validator/zipball/5e80f314a2faff6fb97942526e27c528b10acdb8", + "reference": "5e80f314a2faff6fb97942526e27c528b10acdb8", "shasum": "" }, "require": { @@ -4669,11 +4711,11 @@ "type": "tidelift" } ], - "time": "2020-05-30T21:58:16+00:00" + "time": "2020-06-02T08:42:14+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", @@ -4763,16 +4805,16 @@ }, { "name": "symfony/var-exporter", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "76cf21551652b14d80abf13243159fbdf4bbef22" + "reference": "eabaabfe1485ca955c5b53307eade15ccda57a15" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/76cf21551652b14d80abf13243159fbdf4bbef22", - "reference": "76cf21551652b14d80abf13243159fbdf4bbef22", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/eabaabfe1485ca955c5b53307eade15ccda57a15", + "reference": "eabaabfe1485ca955c5b53307eade15ccda57a15", "shasum": "" }, "require": { @@ -4834,11 +4876,11 @@ "type": "tidelift" } ], - "time": "2020-05-20T17:43:50+00:00" + "time": "2020-06-07T15:42:22+00:00" }, { "name": "symfony/yaml", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", @@ -4915,26 +4957,26 @@ }, { "name": "twig/twig", - "version": "v3.0.3", + "version": "v3.0.4", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "3b88ccd180a6b61ebb517aea3b1a8906762a1dc2" + "reference": "582bdbdc173027ebfba3c93dc750a40b8f9ebc02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/3b88ccd180a6b61ebb517aea3b1a8906762a1dc2", - "reference": "3b88ccd180a6b61ebb517aea3b1a8906762a1dc2", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/582bdbdc173027ebfba3c93dc750a40b8f9ebc02", + "reference": "582bdbdc173027ebfba3c93dc750a40b8f9ebc02", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-mbstring": "^1.3" }, "require-dev": { "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.0" + "symfony/phpunit-bridge": "^4.4.9|^5.0.9" }, "type": "library", "extra": { @@ -4973,7 +5015,29 @@ "keywords": [ "templating" ], - "time": "2020-02-11T15:33:47+00:00" + "funding": [ + { + "url": "https://certification.symfony.com/", + "type": "custom" + }, + { + "url": "https://live.symfony.com/", + "type": "custom" + }, + { + "url": "https://symfony.com/cloud/", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2020-07-05T13:18:14+00:00" }, { "name": "webimpress/safe-writer", @@ -5397,28 +5461,24 @@ }, { "name": "friends-of-behat/symfony-extension", - "version": "v2.1.0-BETA.1", + "version": "v2.1.0", "source": { "type": "git", "url": "https://github.com/FriendsOfBehat/SymfonyExtension.git", - "reference": "c2afff0d15e4ad5fb2cc085baef17a051b9c3ad9" + "reference": "0f906e1156546095f4287be7cd5ceede2d3e22cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfBehat/SymfonyExtension/zipball/c2afff0d15e4ad5fb2cc085baef17a051b9c3ad9", - "reference": "c2afff0d15e4ad5fb2cc085baef17a051b9c3ad9", + "url": "https://api.github.com/repos/FriendsOfBehat/SymfonyExtension/zipball/0f906e1156546095f4287be7cd5ceede2d3e22cc", + "reference": "0f906e1156546095f4287be7cd5ceede2d3e22cc", "shasum": "" }, "require": { - "behat/behat": "^3.4", + "behat/behat": "^3.6.1", "php": "^7.1", - "symfony/dependency-injection": "^3.4|^4.4|^5.0", - "symfony/http-kernel": "^3.4|^4.4|^5.0", - "symfony/proxy-manager-bridge": "^3.4|^4.4|^5.0" - }, - "conflict": { - "symplify/package-builder": "^7.2", - "symplify/smart-file-system": "^7.2" + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/proxy-manager-bridge": "^4.4|^5.0" }, "require-dev": { "behat/mink-selenium2-driver": "^1.3", @@ -5427,15 +5487,17 @@ "friends-of-behat/mink-extension": "^2.2", "friends-of-behat/page-object-extension": "^0.3.1", "friends-of-behat/service-container-extension": "^1.0", - "phpstan/phpstan-shim": "^0.11", "sylius-labs/coding-standard": "^3.0", - "symfony/browser-kit": "^3.4|^4.4|^5.0", - "symfony/framework-bundle": "^3.4|^4.4|^5.0", - "symfony/process": "^3.4|^4.4|^5.0", - "symfony/yaml": "^3.4|^4.4|^5.0" + "symfony/browser-kit": "^4.4|^5.0", + "symfony/framework-bundle": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0", + "vimeo/psalm": "3.10.1" }, "suggest": { - "behat/mink-browserkit-driver": "^1.3" + "friends-of-behat/mink": "^1.7", + "friends-of-behat/mink-browserkit-driver": "^1.3", + "friends-of-behat/mink-extension": "^2.2" }, "type": "symfony-bundle", "extra": { @@ -5460,7 +5522,7 @@ } ], "description": "Integrates Behat with Symfony.", - "time": "2020-01-15T18:02:23+00:00" + "time": "2020-04-04T20:07:00+00:00" }, { "name": "fzaninotto/faker", @@ -5514,20 +5576,20 @@ }, { "name": "hamcrest/hamcrest-php", - "version": "v2.0.0", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad" + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/776503d3a8e85d4f9a1148614f95b7a608b046ad", - "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", "shasum": "" }, "require": { - "php": "^5.3|^7.0" + "php": "^5.3|^7.0|^8.0" }, "replace": { "cordoval/hamcrest-php": "*", @@ -5535,14 +5597,13 @@ "kodova/hamcrest-php": "*" }, "require-dev": { - "phpunit/php-file-iterator": "1.3.3", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "^1.0" + "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": "2.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -5552,38 +5613,38 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD" + "BSD-3-Clause" ], "description": "This is the PHP port of Hamcrest Matchers", "keywords": [ "test" ], - "time": "2016-01-20T08:20:44+00:00" + "time": "2020-07-09T08:09:16+00:00" }, { "name": "mockery/mockery", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "6c6a7c533469873deacf998237e7649fc6b36223" + "reference": "1404386ca3410b04fe58b9517e85d702ab33b2c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/6c6a7c533469873deacf998237e7649fc6b36223", - "reference": "6c6a7c533469873deacf998237e7649fc6b36223", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1404386ca3410b04fe58b9517e85d702ab33b2c6", + "reference": "1404386ca3410b04fe58b9517e85d702ab33b2c6", "shasum": "" }, "require": { - "hamcrest/hamcrest-php": "~2.0", + "hamcrest/hamcrest-php": "^2.0.1", "lib-pcre": ">=7.0", - "php": "^7.3.0" + "php": "^7.3 || ^8.0" }, "conflict": { "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^8.0.0 || ^9.0.0" + "phpunit/phpunit": "^8.5 || ^9.0" }, "type": "library", "extra": { @@ -5626,24 +5687,24 @@ "test double", "testing" ], - "time": "2020-05-19T14:25:16+00:00" + "time": "2020-07-09T08:31:54+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.9.5", + "version": "1.10.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef" + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef", - "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "replace": { "myclabs/deep-copy": "self.version" @@ -5674,7 +5735,13 @@ "object", "object graph" ], - "time": "2020-01-17T21:11:47+00:00" + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-06-29T13:22:24+00:00" }, { "name": "phar-io/manifest", @@ -5780,25 +5847,25 @@ }, { "name": "phpdocumentor/reflection-common", - "version": "2.1.0", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b" + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b", - "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -5825,7 +5892,7 @@ "reflection", "static analysis" ], - "time": "2020-04-27T09:25:28+00:00" + "time": "2020-06-27T09:03:43+00:00" }, { "name": "phpdocumentor/reflection-docblock", @@ -5882,30 +5949,29 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.1.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "7462d5f123dfc080dfdf26897032a6513644fc95" + "reference": "e878a14a65245fbe78f8080eba03b47c3b705651" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95", - "reference": "7462d5f123dfc080dfdf26897032a6513644fc95", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651", + "reference": "e878a14a65245fbe78f8080eba03b47c3b705651", "shasum": "" }, "require": { - "php": "^7.2", + "php": "^7.2 || ^8.0", "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "ext-tokenizer": "^7.2", - "mockery/mockery": "~1" + "ext-tokenizer": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-1.x": "1.x-dev" } }, "autoload": { @@ -5924,37 +5990,37 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2020-02-18T18:59:58+00:00" + "time": "2020-06-27T10:12:23+00:00" }, { "name": "phpspec/prophecy", - "version": "v1.10.3", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "451c3cd1418cf640de218914901e51b064abb093" + "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", - "reference": "451c3cd1418cf640de218914901e51b064abb093", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b20034be5efcdab4fb60ca3a29cba2949aead160", + "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", - "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" + "doctrine/instantiator": "^1.2", + "php": "^7.2", + "phpdocumentor/reflection-docblock": "^5.0", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "phpspec/phpspec": "^2.5 || ^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + "phpspec/phpspec": "^6.0", + "phpunit/phpunit": "^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.10.x-dev" + "dev-master": "1.11.x-dev" } }, "autoload": { @@ -5987,7 +6053,7 @@ "spy", "stub" ], - "time": "2020-03-05T15:02:03+00:00" + "time": "2020-07-08T12:44:21+00:00" }, { "name": "phpunit/php-code-coverage", @@ -6061,20 +6127,20 @@ }, { "name": "phpunit/php-file-iterator", - "version": "3.0.1", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "4ac5b3e13df14829daa60a2eb4fdd2f2b7d33cf4" + "reference": "25fefc5b19835ca653877fe081644a3f8c1d915e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/4ac5b3e13df14829daa60a2eb4fdd2f2b7d33cf4", - "reference": "4ac5b3e13df14829daa60a2eb4fdd2f2b7d33cf4", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/25fefc5b19835ca653877fe081644a3f8c1d915e", + "reference": "25fefc5b19835ca653877fe081644a3f8c1d915e", "shasum": "" }, "require": { - "php": "^7.3" + "php": "^7.3 || ^8.0" }, "require-dev": { "phpunit/phpunit": "^9.0" @@ -6113,24 +6179,24 @@ "type": "github" } ], - "time": "2020-04-18T05:02:12+00:00" + "time": "2020-07-11T05:18:21+00:00" }, { "name": "phpunit/php-invoker", - "version": "3.0.0", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "7579d5a1ba7f3ac11c80004d205877911315ae7a" + "reference": "f6eedfed1085dd1f4c599629459a0277d25f9a66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/7579d5a1ba7f3ac11c80004d205877911315ae7a", - "reference": "7579d5a1ba7f3ac11c80004d205877911315ae7a", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f6eedfed1085dd1f4c599629459a0277d25f9a66", + "reference": "f6eedfed1085dd1f4c599629459a0277d25f9a66", "shasum": "" }, "require": { - "php": "^7.3" + "php": "^7.3 || ^8.0" }, "require-dev": { "ext-pcntl": "*", @@ -6166,24 +6232,33 @@ "keywords": [ "process" ], - "time": "2020-02-07T06:06:11+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T11:53:53+00:00" }, { "name": "phpunit/php-text-template", - "version": "2.0.0", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "526dc996cc0ebdfa428cd2dfccd79b7b53fee346" + "reference": "6ff9c8ea4d3212b88fcf74e25e516e2c51c99324" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/526dc996cc0ebdfa428cd2dfccd79b7b53fee346", - "reference": "526dc996cc0ebdfa428cd2dfccd79b7b53fee346", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/6ff9c8ea4d3212b88fcf74e25e516e2c51c99324", + "reference": "6ff9c8ea4d3212b88fcf74e25e516e2c51c99324", "shasum": "" }, "require": { - "php": "^7.3" + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { @@ -6212,32 +6287,38 @@ "keywords": [ "template" ], - "time": "2020-02-01T07:43:44+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T11:55:37+00:00" }, { "name": "phpunit/php-timer", - "version": "3.1.4", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "dc9368fae6ef2ffa57eba80a7410bcef81df6258" + "reference": "cc49734779cbb302bf51a44297dab8c4bbf941e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/dc9368fae6ef2ffa57eba80a7410bcef81df6258", - "reference": "dc9368fae6ef2ffa57eba80a7410bcef81df6258", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/cc49734779cbb302bf51a44297dab8c4bbf941e7", + "reference": "cc49734779cbb302bf51a44297dab8c4bbf941e7", "shasum": "" }, "require": { - "php": "^7.3" + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -6267,25 +6348,25 @@ "type": "github" } ], - "time": "2020-04-20T06:00:37+00:00" + "time": "2020-06-26T11:58:13+00:00" }, { "name": "phpunit/php-token-stream", - "version": "4.0.1", + "version": "4.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "cdc0db5aed8fbfaf475fbd95bfd7bab83c7a779c" + "reference": "5672711b6b07b14d5ab694e700c62eeb82fcf374" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/cdc0db5aed8fbfaf475fbd95bfd7bab83c7a779c", - "reference": "cdc0db5aed8fbfaf475fbd95bfd7bab83c7a779c", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/5672711b6b07b14d5ab694e700c62eeb82fcf374", + "reference": "5672711b6b07b14d5ab694e700c62eeb82fcf374", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": "^7.3" + "php": "^7.3 || ^8.0" }, "require-dev": { "phpunit/phpunit": "^9.0" @@ -6322,50 +6403,50 @@ "type": "github" } ], - "time": "2020-05-06T09:56:31+00:00" + "time": "2020-06-27T06:36:25+00:00" }, { "name": "phpunit/phpunit", - "version": "9.1.5", + "version": "9.2.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "1b570cd7edbe136055bf5f651857dc8af6b829d2" + "reference": "1c6a9e4312e209e659f1fce3ce88dd197c2448f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1b570cd7edbe136055bf5f651857dc8af6b829d2", - "reference": "1b570cd7edbe136055bf5f651857dc8af6b829d2", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1c6a9e4312e209e659f1fce3ce88dd197c2448f6", + "reference": "1c6a9e4312e209e659f1fce3ce88dd197c2448f6", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2.0", + "doctrine/instantiator": "^1.3.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.9.1", + "myclabs/deep-copy": "^1.9.5", "phar-io/manifest": "^1.0.3", "phar-io/version": "^2.0.1", "php": "^7.3", - "phpspec/prophecy": "^1.8.1", - "phpunit/php-code-coverage": "^8.0.1", - "phpunit/php-file-iterator": "^3.0", - "phpunit/php-invoker": "^3.0", - "phpunit/php-text-template": "^2.0", - "phpunit/php-timer": "^3.1.4", - "sebastian/code-unit": "^1.0.2", - "sebastian/comparator": "^4.0", - "sebastian/diff": "^4.0", - "sebastian/environment": "^5.0.1", - "sebastian/exporter": "^4.0", + "phpspec/prophecy": "^1.10.3", + "phpunit/php-code-coverage": "^8.0.2", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-invoker": "^3.0.2", + "phpunit/php-text-template": "^2.0.2", + "phpunit/php-timer": "^5.0.1", + "sebastian/code-unit": "^1.0.5", + "sebastian/comparator": "^4.0.3", + "sebastian/diff": "^4.0.1", + "sebastian/environment": "^5.1.2", + "sebastian/exporter": "^4.0.2", "sebastian/global-state": "^4.0", - "sebastian/object-enumerator": "^4.0", - "sebastian/resource-operations": "^3.0", - "sebastian/type": "^2.0", - "sebastian/version": "^3.0" + "sebastian/object-enumerator": "^4.0.2", + "sebastian/resource-operations": "^3.0.2", + "sebastian/type": "^2.1.1", + "sebastian/version": "^3.0.1" }, "require-dev": { "ext-pdo": "*", @@ -6381,7 +6462,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.1-dev" + "dev-master": "9.2-dev" } }, "autoload": { @@ -6420,7 +6501,7 @@ "type": "github" } ], - "time": "2020-05-22T13:54:05+00:00" + "time": "2020-07-13T17:55:55+00:00" }, { "name": "roave/security-advisories", @@ -6428,12 +6509,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "239e50ae0e1906d32b32ed58bc7d15c81bfc06f0" + "reference": "9f386dba391018e90a5f1e51abeffc6bf27583db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/239e50ae0e1906d32b32ed58bc7d15c81bfc06f0", - "reference": "239e50ae0e1906d32b32ed58bc7d15c81bfc06f0", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/9f386dba391018e90a5f1e51abeffc6bf27583db", + "reference": "9f386dba391018e90a5f1e51abeffc6bf27583db", "shasum": "" }, "conflict": { @@ -6570,8 +6651,8 @@ "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.4.5|>=4.5,<4.5.2", - "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.1.2", + "silverstripe/framework": "<4.4.7|>=4.5,<4.5.4", + "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.1.2|>=3.2,<3.2.4", "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", @@ -6707,24 +6788,24 @@ "type": "tidelift" } ], - "time": "2020-07-06T15:00:46+00:00" + "time": "2020-07-16T05:17:29+00:00" }, { "name": "sebastian/code-unit", - "version": "1.0.2", + "version": "1.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "ac958085bc19fcd1d36425c781ef4cbb5b06e2a5" + "reference": "c1e2df332c905079980b119c4db103117e5e5c90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/ac958085bc19fcd1d36425c781ef4cbb5b06e2a5", - "reference": "ac958085bc19fcd1d36425c781ef4cbb5b06e2a5", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/c1e2df332c905079980b119c4db103117e5e5c90", + "reference": "c1e2df332c905079980b119c4db103117e5e5c90", "shasum": "" }, "require": { - "php": "^7.3" + "php": "^7.3 || ^8.0" }, "require-dev": { "phpunit/phpunit": "^9.0" @@ -6759,24 +6840,24 @@ "type": "github" } ], - "time": "2020-04-30T05:58:10+00:00" + "time": "2020-06-26T12:50:45+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.0", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "5b5dbe0044085ac41df47e79d34911a15b96d82e" + "reference": "ee51f9bb0c6d8a43337055db3120829fa14da819" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5b5dbe0044085ac41df47e79d34911a15b96d82e", - "reference": "5b5dbe0044085ac41df47e79d34911a15b96d82e", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ee51f9bb0c6d8a43337055db3120829fa14da819", + "reference": "ee51f9bb0c6d8a43337055db3120829fa14da819", "shasum": "" }, "require": { - "php": "^7.3" + "php": "^7.3 || ^8.0" }, "require-dev": { "phpunit/phpunit": "^9.0" @@ -6804,24 +6885,30 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2020-02-07T06:20:13+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:04:00+00:00" }, { "name": "sebastian/comparator", - "version": "4.0.0", + "version": "4.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "85b3435da967696ed618ff745f32be3ff4a2b8e8" + "reference": "dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85b3435da967696ed618ff745f32be3ff4a2b8e8", - "reference": "85b3435da967696ed618ff745f32be3ff4a2b8e8", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f", + "reference": "dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f", "shasum": "" }, "require": { - "php": "^7.3", + "php": "^7.3 || ^8.0", "sebastian/diff": "^4.0", "sebastian/exporter": "^4.0" }, @@ -6868,24 +6955,30 @@ "compare", "equality" ], - "time": "2020-02-07T06:08:51+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:05:46+00:00" }, { "name": "sebastian/diff", - "version": "4.0.1", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3e523c576f29dacecff309f35e4cc5a5c168e78a" + "reference": "1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3e523c576f29dacecff309f35e4cc5a5c168e78a", - "reference": "3e523c576f29dacecff309f35e4cc5a5c168e78a", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113", + "reference": "1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113", "shasum": "" }, "require": { - "php": "^7.3" + "php": "^7.3 || ^8.0" }, "require-dev": { "phpunit/phpunit": "^9.0", @@ -6930,24 +7023,24 @@ "type": "github" } ], - "time": "2020-05-08T05:01:12+00:00" + "time": "2020-06-30T04:46:02+00:00" }, { "name": "sebastian/environment", - "version": "5.1.0", + "version": "5.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "c753f04d68cd489b6973cf9b4e505e191af3b05c" + "reference": "0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/c753f04d68cd489b6973cf9b4e505e191af3b05c", - "reference": "c753f04d68cd489b6973cf9b4e505e191af3b05c", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2", + "reference": "0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2", "shasum": "" }, "require": { - "php": "^7.3" + "php": "^7.3 || ^8.0" }, "require-dev": { "phpunit/phpunit": "^9.0" @@ -6989,29 +7082,29 @@ "type": "github" } ], - "time": "2020-04-14T13:36:52+00:00" + "time": "2020-06-26T12:07:24+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.0", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "80c26562e964016538f832f305b2286e1ec29566" + "reference": "571d721db4aec847a0e59690b954af33ebf9f023" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/80c26562e964016538f832f305b2286e1ec29566", - "reference": "80c26562e964016538f832f305b2286e1ec29566", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/571d721db4aec847a0e59690b954af33ebf9f023", + "reference": "571d721db4aec847a0e59690b954af33ebf9f023", "shasum": "" }, "require": { - "php": "^7.3", + "php": "^7.3 || ^8.0", "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.2" }, "type": "library", "extra": { @@ -7056,7 +7149,13 @@ "export", "exporter" ], - "time": "2020-02-07T06:10:52+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:08:55+00:00" }, { "name": "sebastian/global-state", @@ -7114,20 +7213,20 @@ }, { "name": "sebastian/object-enumerator", - "version": "4.0.0", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "e67516b175550abad905dc952f43285957ef4363" + "reference": "074fed2d0a6d08e1677dd8ce9d32aecb384917b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67516b175550abad905dc952f43285957ef4363", - "reference": "e67516b175550abad905dc952f43285957ef4363", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/074fed2d0a6d08e1677dd8ce9d32aecb384917b8", + "reference": "074fed2d0a6d08e1677dd8ce9d32aecb384917b8", "shasum": "" }, "require": { - "php": "^7.3", + "php": "^7.3 || ^8.0", "sebastian/object-reflector": "^2.0", "sebastian/recursion-context": "^4.0" }, @@ -7157,24 +7256,30 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2020-02-07T06:12:23+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:11:32+00:00" }, { "name": "sebastian/object-reflector", - "version": "2.0.0", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "f4fd0835cabb0d4a6546d9fe291e5740037aa1e7" + "reference": "127a46f6b057441b201253526f81d5406d6c7840" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/f4fd0835cabb0d4a6546d9fe291e5740037aa1e7", - "reference": "f4fd0835cabb0d4a6546d9fe291e5740037aa1e7", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/127a46f6b057441b201253526f81d5406d6c7840", + "reference": "127a46f6b057441b201253526f81d5406d6c7840", "shasum": "" }, "require": { - "php": "^7.3" + "php": "^7.3 || ^8.0" }, "require-dev": { "phpunit/phpunit": "^9.0" @@ -7202,24 +7307,30 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2020-02-07T06:19:40+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:12:55+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.0", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cdd86616411fc3062368b720b0425de10bd3d579" + "reference": "062231bf61d2b9448c4fa5a7643b5e1829c11d63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cdd86616411fc3062368b720b0425de10bd3d579", - "reference": "cdd86616411fc3062368b720b0425de10bd3d579", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/062231bf61d2b9448c4fa5a7643b5e1829c11d63", + "reference": "062231bf61d2b9448c4fa5a7643b5e1829c11d63", "shasum": "" }, "require": { - "php": "^7.3" + "php": "^7.3 || ^8.0" }, "require-dev": { "phpunit/phpunit": "^9.0" @@ -7255,24 +7366,30 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2020-02-07T06:18:20+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:14:17+00:00" }, { "name": "sebastian/resource-operations", - "version": "3.0.0", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98" + "reference": "0653718a5a629b065e91f774595267f8dc32e213" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98", - "reference": "8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0653718a5a629b065e91f774595267f8dc32e213", + "reference": "0653718a5a629b065e91f774595267f8dc32e213", "shasum": "" }, "require": { - "php": "^7.3" + "php": "^7.3 || ^8.0" }, "require-dev": { "phpunit/phpunit": "^9.0" @@ -7300,24 +7417,30 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2020-02-07T06:13:02+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:16:22+00:00" }, { "name": "sebastian/type", - "version": "2.1.0", + "version": "2.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "bad49207c6f854e7a25cef0ea948ac8ebe3ef9d8" + "reference": "86991e2b33446cd96e648c18bcdb1e95afb2c05a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/bad49207c6f854e7a25cef0ea948ac8ebe3ef9d8", - "reference": "bad49207c6f854e7a25cef0ea948ac8ebe3ef9d8", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/86991e2b33446cd96e648c18bcdb1e95afb2c05a", + "reference": "86991e2b33446cd96e648c18bcdb1e95afb2c05a", "shasum": "" }, "require": { - "php": "^7.3" + "php": "^7.3 || ^8.0" }, "require-dev": { "phpunit/phpunit": "^9.2" @@ -7325,7 +7448,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.2-dev" } }, "autoload": { @@ -7352,24 +7475,24 @@ "type": "github" } ], - "time": "2020-06-01T12:21:09+00:00" + "time": "2020-07-05T08:31:53+00:00" }, { "name": "sebastian/version", - "version": "3.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "0411bde656dce64202b39c2f4473993a9081d39e" + "reference": "626586115d0ed31cb71483be55beb759b5af5a3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/0411bde656dce64202b39c2f4473993a9081d39e", - "reference": "0411bde656dce64202b39c2f4473993a9081d39e", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/626586115d0ed31cb71483be55beb759b5af5a3c", + "reference": "626586115d0ed31cb71483be55beb759b5af5a3c", "shasum": "" }, "require": { - "php": "^7.3" + "php": "^7.3 || ^8.0" }, "type": "library", "extra": { @@ -7395,11 +7518,17 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2020-01-21T06:36:37+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:18:43+00:00" }, { "name": "symfony/browser-kit", - "version": "v4.4.9", + "version": "v4.4.10", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", @@ -7472,7 +7601,7 @@ }, { "name": "symfony/css-selector", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", @@ -7539,7 +7668,7 @@ }, { "name": "symfony/debug", - "version": "v4.4.9", + "version": "v4.4.10", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", @@ -7610,7 +7739,7 @@ }, { "name": "symfony/dom-crawler", - "version": "v4.4.9", + "version": "v4.4.10", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", @@ -7685,7 +7814,7 @@ }, { "name": "symfony/proxy-manager-bridge", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/proxy-manager-bridge.git", @@ -7756,7 +7885,7 @@ }, { "name": "symfony/translation", - "version": "v5.1.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", @@ -7848,23 +7977,23 @@ }, { "name": "theseer/tokenizer", - "version": "1.1.3", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" + "reference": "75a63c33a8577608444246075ea0af0d052e452a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", + "reference": "75a63c33a8577608444246075ea0af0d052e452a", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": "^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -7884,27 +8013,34 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2019-06-13T22:48:21+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2020-07-12T23:59:07+00:00" }, { "name": "webmozart/assert", - "version": "1.8.0", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6" + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6", - "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6", + "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0", + "php": "^5.3.3 || ^7.0 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { + "phpstan/phpstan": "<0.12.20", "vimeo/psalm": "<3.9.1" }, "require-dev": { @@ -7932,14 +8068,13 @@ "check", "validate" ], - "time": "2020-04-18T12:12:48+00:00" + "time": "2020-07-08T17:02:28+00:00" } ], "aliases": [], "minimum-stability": "stable", "stability-flags": { - "roave/security-advisories": 20, - "friends-of-behat/symfony-extension": 10 + "roave/security-advisories": 20 }, "prefer-stable": false, "prefer-lowest": false, From 9b34597d130e0975e4a101be984ca5cf6574cb0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Sat, 18 Jul 2020 18:45:31 +0200 Subject: [PATCH 031/106] Add prometheus dependency --- docker-compose.yml | 60 +++++++++++++++++++++-------------- etc/prometheus/prometheus.yml | 21 ++++++++++++ 2 files changed, 57 insertions(+), 24 deletions(-) create mode 100644 etc/prometheus/prometheus.yml diff --git a/docker-compose.yml b/docker-compose.yml index 14697bc38..352d46cc2 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,42 @@ version: '3' services: + shared_php: + container_name: codelytv-php_ddd_skeleton-php + build: + context: . + dockerfile: Dockerfile + restart: unless-stopped + ports: + - "9090:9001" + volumes: + - .:/app:delegated + depends_on: + - shared_rabbitmq + + shared_rabbitmq: + container_name: codelytv-php_ddd_skeleton-rabbitmq + image: 'rabbitmq:3.7-management' + restart: unless-stopped + ports: + - 5630:5672 + - 8090:15672 + environment: + - RABBITMQ_DEFAULT_USER=codelytv + - RABBITMQ_DEFAULT_PASS=c0d3ly + + shared_prometheus: + image: prom/prometheus:v2.1.0 + volumes: + - ./etc/prometheus/:/etc/prometheus/ + command: + - '--config.file=/etc/prometheus/prometheus.yml' + - '--storage.tsdb.path=/prometheus' + - '--web.console.libraries=/usr/share/prometheus/console_libraries' + - '--web.console.templates=/usr/share/prometheus/consoles' + ports: + - 9999:9090 + mooc_mysql: container_name: codelytv-php_ddd_skeleton-mooc-mysql image: mysql:8 @@ -22,30 +58,6 @@ services: - xpack.security.enabled=false - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - shared_rabbitmq: - container_name: codelytv-php_ddd_skeleton-rabbitmq - image: 'rabbitmq:3.7-management' - restart: unless-stopped - ports: - - 5630:5672 - - 8090:15672 - environment: - - RABBITMQ_DEFAULT_USER=codelytv - - RABBITMQ_DEFAULT_PASS=c0d3ly - - shared_php: - container_name: codelytv-php_ddd_skeleton-php - build: - context: . - dockerfile: Dockerfile - restart: unless-stopped - ports: - - "9090:9001" - volumes: - - .:/app:delegated - depends_on: - - shared_rabbitmq - backoffice_backend_nginx: container_name: codelytv-php_ddd_skeleton-backoffice_backend-nginx image: nginx:1.19-alpine diff --git a/etc/prometheus/prometheus.yml b/etc/prometheus/prometheus.yml new file mode 100644 index 000000000..47442dea6 --- /dev/null +++ b/etc/prometheus/prometheus.yml @@ -0,0 +1,21 @@ +scrape_configs: + + - job_name: 'prometheus' + scrape_interval: 5s + static_configs: + - targets: ['localhost:9090'] + + - job_name: 'backoffice_backend' + scrape_interval: 5s + static_configs: + - targets: ['codelytv-php_ddd_skeleton-backoffice_backend-nginx:80'] + + - job_name: 'backoffice_frontend' + scrape_interval: 5s + static_configs: + - targets: ['codelytv-php_ddd_skeleton-backoffice_frontend-nginx:80'] + + - job_name: 'mooc_backend' + scrape_interval: 5s + static_configs: + - targets: ['codelytv-php_ddd_skeleton-mooc_backend-nginx:80'] From 7fe73761611dfd66c3773af08c1d13644133a866 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Sat, 18 Jul 2020 19:43:49 +0200 Subject: [PATCH 032/106] Export prometheus metrics --- Makefile | 9 +- README.md | 3 + .../backend/config/routes/metrics.yaml | 4 + .../Controller/Metrics/MetricsController.php | 28 + .../frontend/config/routes/metrics.yaml | 4 + .../Controller/Metrics/MetricsController.php | 28 + apps/mooc/backend/config/routes/metrics.yaml | 4 + .../Controller/Metrics/MetricsController.php | 28 + composer.json | 6 +- composer.lock | 689 +++++++++++++++++- docker-compose.yml | 65 +- etc/endpoints/mooc_backend.http | 10 + .../nginx/backoffice_backend.conf | 2 +- .../nginx/backoffice_frontend.conf | 2 +- etc/infrastructure/nginx/mooc_backend.conf | 2 +- .../Monitoring/PrometheusMonitor.php | 23 + 16 files changed, 853 insertions(+), 54 deletions(-) create mode 100644 apps/backoffice/backend/config/routes/metrics.yaml create mode 100644 apps/backoffice/backend/src/Controller/Metrics/MetricsController.php create mode 100644 apps/backoffice/frontend/config/routes/metrics.yaml create mode 100644 apps/backoffice/frontend/src/Controller/Metrics/MetricsController.php create mode 100644 apps/mooc/backend/config/routes/metrics.yaml create mode 100644 apps/mooc/backend/src/Controller/Metrics/MetricsController.php create mode 100644 etc/endpoints/mooc_backend.http create mode 100644 src/Shared/Infrastructure/Monitoring/PrometheusMonitor.php diff --git a/Makefile b/Makefile index 3c71c6192..dde5eeca2 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,10 @@ reload: composer-env-file @docker-compose exec nginx nginx -s reload test: composer-env-file - @docker exec codelytv-php_ddd_skeleton-php make run-tests + 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 run-tests: composer-env-file mkdir -p build/test_results/phpunit @@ -69,4 +72,6 @@ ping-mysql: 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 diff --git a/README.md b/README.md index a67c0f1fa..0ce3b7e9b 100644 --- a/README.md +++ b/README.md @@ -129,6 +129,9 @@ The [Event Bus](src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEven 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 :) diff --git a/apps/backoffice/backend/config/routes/metrics.yaml b/apps/backoffice/backend/config/routes/metrics.yaml new file mode 100644 index 000000000..af36aa15d --- /dev/null +++ b/apps/backoffice/backend/config/routes/metrics.yaml @@ -0,0 +1,4 @@ +metrics_get: + path: /metrics + controller: CodelyTv\Apps\Backoffice\Backend\Controller\Metrics\MetricsController + methods: [GET] diff --git a/apps/backoffice/backend/src/Controller/Metrics/MetricsController.php b/apps/backoffice/backend/src/Controller/Metrics/MetricsController.php new file mode 100644 index 000000000..6ceba048e --- /dev/null +++ b/apps/backoffice/backend/src/Controller/Metrics/MetricsController.php @@ -0,0 +1,28 @@ +monitor = $monitor; + } + + 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]); + } +} diff --git a/apps/backoffice/frontend/config/routes/metrics.yaml b/apps/backoffice/frontend/config/routes/metrics.yaml new file mode 100644 index 000000000..65ad0004d --- /dev/null +++ b/apps/backoffice/frontend/config/routes/metrics.yaml @@ -0,0 +1,4 @@ +metrics_get: + path: /metrics + controller: CodelyTv\Apps\Backoffice\Frontend\Controller\Metrics\MetricsController + methods: [GET] diff --git a/apps/backoffice/frontend/src/Controller/Metrics/MetricsController.php b/apps/backoffice/frontend/src/Controller/Metrics/MetricsController.php new file mode 100644 index 000000000..01d2d94b1 --- /dev/null +++ b/apps/backoffice/frontend/src/Controller/Metrics/MetricsController.php @@ -0,0 +1,28 @@ +monitor = $monitor; + } + + 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]); + } +} diff --git a/apps/mooc/backend/config/routes/metrics.yaml b/apps/mooc/backend/config/routes/metrics.yaml new file mode 100644 index 000000000..d680b5046 --- /dev/null +++ b/apps/mooc/backend/config/routes/metrics.yaml @@ -0,0 +1,4 @@ +metrics_get: + path: /metrics + controller: CodelyTv\Apps\Mooc\Backend\Controller\Metrics\MetricsController + methods: [GET] diff --git a/apps/mooc/backend/src/Controller/Metrics/MetricsController.php b/apps/mooc/backend/src/Controller/Metrics/MetricsController.php new file mode 100644 index 000000000..5aba807e3 --- /dev/null +++ b/apps/mooc/backend/src/Controller/Metrics/MetricsController.php @@ -0,0 +1,28 @@ +monitor = $monitor; + } + + 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]); + } +} diff --git a/composer.json b/composer.json index 876ae5f60..53d2240ff 100644 --- a/composer.json +++ b/composer.json @@ -25,10 +25,12 @@ "doctrine/dbal": "^2.10", "doctrine/orm": "^2.7", - "ocramius/proxy-manager": "^2.9", + "ocramius/proxy-manager": "2.8.1", "elasticsearch/elasticsearch": "^7.3", - "monolog/monolog": "^2.1" + "monolog/monolog": "^2.1", + + "endclothing/prometheus_client_php": "^1.0" }, "require-dev": { "ext-xdebug": "*", diff --git a/composer.lock b/composer.lock index aec178d26..4ad8f5750 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": "6544f3a33a58bdb4cfba6f658e22a8cb", + "content-hash": "5b369cd8eccc1e25b6b019e1737d311b", "packages": [ { "name": "doctrine/annotations", @@ -1103,6 +1103,51 @@ ], "time": "2020-06-18T19:23:29+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" + } + ], + "time": "2019-10-04T10:46:29+00:00" + }, { "name": "ezimuel/guzzlestreams", "version": "3.0.1", @@ -1204,6 +1249,195 @@ "description": "Fork of guzzle/RingPHP (abandoned) to be used with elasticsearch-php", "time": "2020-02-14T23:51:21+00:00" }, + { + "name": "guzzlehttp/guzzle", + "version": "6.5.5", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.6.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.17.0" + }, + "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": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2020-06-16T21:01:06+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a", + "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.8" + }, + "suggest": { + "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "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" + ], + "time": "2019-07-01T23:21:34+00:00" + }, { "name": "lambdish/phunctional", "version": "v2.0.1", @@ -1526,30 +1760,29 @@ }, { "name": "ocramius/package-versions", - "version": "1.10.0", + "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/Ocramius/PackageVersions.git", - "reference": "80f88b35ff45a0fdccf852d4788bb79bb67c3817" + "reference": "94c9d42a466c57f91390cdd49c81313264f49d85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/80f88b35ff45a0fdccf852d4788bb79bb67c3817", - "reference": "80f88b35ff45a0fdccf852d4788bb79bb67c3817", + "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/94c9d42a466c57f91390cdd49c81313264f49d85", + "reference": "94c9d42a466c57f91390cdd49c81313264f49d85", "shasum": "" }, "require": { - "composer-plugin-api": "^2.0.0", - "composer-runtime-api": "^2.0.0", - "php": "^7.4.7" + "composer-plugin-api": "^1.1.0 || ^2.0", + "php": "^7.4.0" }, "require-dev": { - "composer/composer": "^2.0.0@dev", - "doctrine/coding-standard": "^8.1.0", + "composer/composer": "^1.9.3 || ^2.0@dev", + "doctrine/coding-standard": "^7.0.2", "ext-zip": "^1.15.0", - "infection/infection": "^0.16.4", - "phpunit/phpunit": "^9.1.5", - "vimeo/psalm": "^3.12.2" + "infection/infection": "^0.15.3", + "phpunit/phpunit": "^9.1.1", + "vimeo/psalm": "^3.9.3" }, "type": "composer-plugin", "extra": { @@ -1584,25 +1817,25 @@ "type": "tidelift" } ], - "time": "2020-07-11T19:45:58+00:00" + "time": "2020-06-22T14:15:44+00:00" }, { "name": "ocramius/proxy-manager", - "version": "2.9.0", + "version": "2.8.1", "source": { "type": "git", "url": "https://github.com/Ocramius/ProxyManager.git", - "reference": "9475248b6521f3029b973c4cd9aad31022bfd793" + "reference": "371c8f2d9d1e888ce1f8f2137d9187252b07ee94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/9475248b6521f3029b973c4cd9aad31022bfd793", - "reference": "9475248b6521f3029b973c4cd9aad31022bfd793", + "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/371c8f2d9d1e888ce1f8f2137d9187252b07ee94", + "reference": "371c8f2d9d1e888ce1f8f2137d9187252b07ee94", "shasum": "" }, "require": { - "composer-runtime-api": "^2.0.0", "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" }, @@ -1612,16 +1845,15 @@ "zendframework/zend-stdlib": "<3.2.1" }, "require-dev": { - "codelicia/xulieta": "^0.1.2", - "doctrine/coding-standard": "^8.1.0", + "doctrine/coding-standard": "^6.0.0", "ext-phar": "*", - "infection/infection": "^0.16.4", - "nikic/php-parser": "^4.6.0", - "phpbench/phpbench": "^0.17.1", - "phpunit/phpunit": "^9.2.5", - "slevomat/coding-standard": "^6.3.10", - "squizlabs/php_codesniffer": "^3.5.5", - "vimeo/psalm": "^3.12.2" + "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" }, "suggest": { "laminas/laminas-json": "To have the JsonRpc adapter (Remote Object feature)", @@ -1670,7 +1902,7 @@ "type": "tidelift" } ], - "time": "2020-07-13T20:10:37+00:00" + "time": "2020-07-13T19:23:57+00:00" }, { "name": "paragonie/random_compat", @@ -1858,6 +2090,56 @@ ], "time": "2019-01-08T18:20:26+00:00" }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "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" + ], + "time": "2016-08-06T14:39:51+00:00" + }, { "name": "psr/log", "version": "1.1.3", @@ -1905,6 +2187,46 @@ ], "time": "2020-03-23T09:12:05+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.", + "time": "2019-03-08T08:55:37+00:00" + }, { "name": "ramsey/uuid", "version": "3.9.3", @@ -3535,6 +3857,80 @@ ], "time": "2020-05-24T08:49:09+00:00" }, + { + "name": "symfony/polyfill-apcu", + "version": "v1.18.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-apcu.git", + "reference": "f1d94a98e364f4b84252331a40cb7987b847e241" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/f1d94a98e364f4b84252331a40cb7987b847e241", + "reference": "f1d94a98e364f4b84252331a40cb7987b847e241", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Apcu\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting apcu_* functions to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "apcu", + "compatibility", + "polyfill", + "portable", + "shim" + ], + "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": "2020-07-14T12:35:20+00:00" + }, { "name": "symfony/polyfill-ctype", "version": "v1.18.0", @@ -3689,6 +4085,91 @@ ], "time": "2020-07-14T12:35:20+00:00" }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.18.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "bc6549d068d0160e0f10f7a5a23c7d1406b95ebe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/bc6549d068d0160e0f10f7a5a23c7d1406b95ebe", + "reference": "bc6549d068d0160e0f10f7a5a23c7d1406b95ebe", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php70": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "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" + ], + "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": "2020-07-14T12:35:20+00:00" + }, { "name": "symfony/polyfill-intl-normalizer", "version": "v1.18.0", @@ -3847,6 +4328,156 @@ ], "time": "2020-07-14T12:35:20+00:00" }, + { + "name": "symfony/polyfill-php70", + "version": "v1.18.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", + "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0|~9.99", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" + ], + "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.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "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": "2020-07-14T12:35:20+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.18.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "639447d008615574653fb3bc60d1986d7172eaae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/639447d008615574653fb3bc60d1986d7172eaae", + "reference": "639447d008615574653fb3bc60d1986d7172eaae", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "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": "2020-07-14T12:35:20+00:00" + }, { "name": "symfony/polyfill-php73", "version": "v1.18.0", diff --git a/docker-compose.yml b/docker-compose.yml index 352d46cc2..4d2103084 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,19 +1,6 @@ version: '3' services: - shared_php: - container_name: codelytv-php_ddd_skeleton-php - build: - context: . - dockerfile: Dockerfile - restart: unless-stopped - ports: - - "9090:9001" - volumes: - - .:/app:delegated - depends_on: - - shared_rabbitmq - shared_rabbitmq: container_name: codelytv-php_ddd_skeleton-rabbitmq image: 'rabbitmq:3.7-management' @@ -58,6 +45,21 @@ services: - xpack.security.enabled=false - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + backoffice_backend_php: + container_name: codelytv-php_ddd_skeleton-backoffice_backend-php + build: + context: . + dockerfile: Dockerfile + restart: unless-stopped + ports: + - "9040:9001" + volumes: + - .:/app:delegated + depends_on: + - shared_rabbitmq + - shared_prometheus + - backoffice_elasticsearch + backoffice_backend_nginx: container_name: codelytv-php_ddd_skeleton-backoffice_backend-nginx image: nginx:1.19-alpine @@ -68,8 +70,21 @@ services: - .:/app:delegated - ./etc/infrastructure/nginx/backoffice_backend.conf:/etc/nginx/conf.d/default.conf:ro depends_on: - - shared_php - - backoffice_elasticsearch + - backoffice_backend_php + + backoffice_frontend_php: + container_name: codelytv-php_ddd_skeleton-backoffice_frontend-php + build: + context: . + dockerfile: Dockerfile + restart: unless-stopped + ports: + - "9041:9001" + volumes: + - .:/app:delegated + depends_on: + - shared_rabbitmq + - shared_prometheus backoffice_frontend_nginx: container_name: codelytv-php_ddd_skeleton-backoffice_frontend-nginx @@ -81,7 +96,22 @@ services: - .:/app:delegated - ./etc/infrastructure/nginx/backoffice_frontend.conf:/etc/nginx/conf.d/default.conf:ro depends_on: - - shared_php + - backoffice_frontend_php + + mooc_backend_php: + container_name: codelytv-php_ddd_skeleton-mooc_backend-php + build: + context: . + dockerfile: Dockerfile + restart: unless-stopped + ports: + - "9030:9001" + volumes: + - .:/app:delegated + depends_on: + - shared_rabbitmq + - shared_prometheus + - mooc_mysql mooc_backend_nginx: container_name: codelytv-php_ddd_skeleton-mooc_backend-nginx @@ -93,5 +123,4 @@ services: - .:/app:delegated - ./etc/infrastructure/nginx/mooc_backend.conf:/etc/nginx/conf.d/default.conf:ro depends_on: - - shared_php - - mooc_mysql + - mooc_backend_php diff --git a/etc/endpoints/mooc_backend.http b/etc/endpoints/mooc_backend.http new file mode 100644 index 000000000..070955a99 --- /dev/null +++ b/etc/endpoints/mooc_backend.http @@ -0,0 +1,10 @@ +# Create a course +PUT localhost:8030/courses/{{$uuid}} +Content-Type: application/json + +{ + "name": "The best course", + "duration": "5 hours" +} + +### diff --git a/etc/infrastructure/nginx/backoffice_backend.conf b/etc/infrastructure/nginx/backoffice_backend.conf index c0d69fda5..4dacaf8ff 100755 --- a/etc/infrastructure/nginx/backoffice_backend.conf +++ b/etc/infrastructure/nginx/backoffice_backend.conf @@ -25,6 +25,6 @@ server { fastcgi_index index.php; send_timeout 1800; fastcgi_read_timeout 1800; - fastcgi_pass shared_php:9000; + fastcgi_pass backoffice_backend_php:9000; } } diff --git a/etc/infrastructure/nginx/backoffice_frontend.conf b/etc/infrastructure/nginx/backoffice_frontend.conf index 3732d1d4f..e695c1929 100755 --- a/etc/infrastructure/nginx/backoffice_frontend.conf +++ b/etc/infrastructure/nginx/backoffice_frontend.conf @@ -25,6 +25,6 @@ server { fastcgi_index index.php; send_timeout 1800; fastcgi_read_timeout 1800; - fastcgi_pass shared_php:9000; + fastcgi_pass backoffice_frontend_php:9000; } } diff --git a/etc/infrastructure/nginx/mooc_backend.conf b/etc/infrastructure/nginx/mooc_backend.conf index f122a5a21..bc8187c8f 100755 --- a/etc/infrastructure/nginx/mooc_backend.conf +++ b/etc/infrastructure/nginx/mooc_backend.conf @@ -25,6 +25,6 @@ server { fastcgi_index index.php; send_timeout 1800; fastcgi_read_timeout 1800; - fastcgi_pass shared_php:9000; + fastcgi_pass mooc_backend_php:9000; } } diff --git a/src/Shared/Infrastructure/Monitoring/PrometheusMonitor.php b/src/Shared/Infrastructure/Monitoring/PrometheusMonitor.php new file mode 100644 index 000000000..562087724 --- /dev/null +++ b/src/Shared/Infrastructure/Monitoring/PrometheusMonitor.php @@ -0,0 +1,23 @@ +registry = new CollectorRegistry(new APC()); + } + + public function registry(): CollectorRegistry + { + return $this->registry; + } +} From 5cf872ba1685d44a276ac410c862c59f4b73fc5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Sat, 18 Jul 2020 19:44:26 +0200 Subject: [PATCH 033/106] Increase counter when a domain event is published --- apps/backoffice/backend/config/services.yaml | 7 +++- apps/backoffice/frontend/config/services.yaml | 5 ++- apps/mooc/backend/config/services.yaml | 4 +- .../WithPrometheusMonitoringEventBus.php | 38 +++++++++++++++++++ 4 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php diff --git a/apps/backoffice/backend/config/services.yaml b/apps/backoffice/backend/config/services.yaml index 7f02db2be..d0e25db62 100644 --- a/apps/backoffice/backend/config/services.yaml +++ b/apps/backoffice/backend/config/services.yaml @@ -88,6 +88,11 @@ services: - '%env(APP_ENV)%' public: true + CodelyTv\Shared\Infrastructure\Bus\Event\WithMonitoring\WithPrometheusMonitoringEventBus: + arguments: ['@CodelyTv\Shared\Infrastructure\Monitoring\PrometheusMonitor', 'backoffice_backend', '@CodelyTv\Shared\Infrastructure\Bus\Event\RabbitMq\RabbitMqEventBus'] + + # -- IMPLEMENTATIONS SELECTOR -- + # -- IMPLEMENTATIONS SELECTOR -- - CodelyTv\Shared\Domain\Bus\Event\EventBus: '@CodelyTv\Shared\Infrastructure\Bus\Event\RabbitMq\RabbitMqEventBus' + CodelyTv\Shared\Domain\Bus\Event\EventBus: '@CodelyTv\Shared\Infrastructure\Bus\Event\WithMonitoring\WithPrometheusMonitoringEventBus' CodelyTv\Backoffice\Courses\Domain\BackofficeCourseRepository: '@CodelyTv\Backoffice\Courses\Infrastructure\Persistence\ElasticsearchBackofficeCourseRepository' diff --git a/apps/backoffice/frontend/config/services.yaml b/apps/backoffice/frontend/config/services.yaml index b1ef9c69f..99bad2baa 100644 --- a/apps/backoffice/frontend/config/services.yaml +++ b/apps/backoffice/frontend/config/services.yaml @@ -88,8 +88,11 @@ services: - '%env(APP_ENV)%' public: true + CodelyTv\Shared\Infrastructure\Bus\Event\WithMonitoring\WithPrometheusMonitoringEventBus: + arguments: ['@CodelyTv\Shared\Infrastructure\Monitoring\PrometheusMonitor', 'backoffice_frontend', '@CodelyTv\Shared\Infrastructure\Bus\Event\RabbitMq\RabbitMqEventBus'] + # -- IMPLEMENTATIONS SELECTOR -- - CodelyTv\Shared\Domain\Bus\Event\EventBus: '@CodelyTv\Shared\Infrastructure\Bus\Event\RabbitMq\RabbitMqEventBus' + CodelyTv\Shared\Domain\Bus\Event\EventBus: '@CodelyTv\Shared\Infrastructure\Bus\Event\WithMonitoring\WithPrometheusMonitoringEventBus' CodelyTv\Backoffice\Courses\Domain\BackofficeCourseRepository: '@CodelyTv\Backoffice\Courses\Infrastructure\Persistence\ElasticsearchBackofficeCourseRepository' twig: diff --git a/apps/mooc/backend/config/services.yaml b/apps/mooc/backend/config/services.yaml index a3a782c63..7d81f0953 100644 --- a/apps/mooc/backend/config/services.yaml +++ b/apps/mooc/backend/config/services.yaml @@ -91,6 +91,8 @@ services: - '%env(RABBITMQ_EXCHANGE)%' - !tagged codely.domain_event_subscriber + CodelyTv\Shared\Infrastructure\Bus\Event\WithMonitoring\WithPrometheusMonitoringEventBus: + arguments: ['@CodelyTv\Shared\Infrastructure\Monitoring\PrometheusMonitor', 'mooc_backend', '@CodelyTv\Shared\Infrastructure\Bus\Event\RabbitMq\RabbitMqEventBus'] # -- IMPLEMENTATIONS SELECTOR -- - CodelyTv\Shared\Domain\Bus\Event\EventBus: '@CodelyTv\Shared\Infrastructure\Bus\Event\RabbitMq\RabbitMqEventBus' + CodelyTv\Shared\Domain\Bus\Event\EventBus: '@CodelyTv\Shared\Infrastructure\Bus\Event\WithMonitoring\WithPrometheusMonitoringEventBus' diff --git a/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php b/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php new file mode 100644 index 000000000..206a9126b --- /dev/null +++ b/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php @@ -0,0 +1,38 @@ +monitor = $monitor; + $this->appName = $appName; + $this->bus = $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); + } +} From b3da54483d1c2c4ae7becf980d936070b5c60ec3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Sun, 19 Jul 2020 01:31:33 +0200 Subject: [PATCH 034/106] Stop using nginx and use native php server (#193) --- Dockerfile | 4 +- Makefile | 13 ----- .../backend/config/routes/courses.yaml | 2 +- .../courses/partials/list_courses.html.twig | 4 +- docker-compose.yml | 52 ++++++------------- .../nginx/backoffice_backend.conf | 30 ----------- .../nginx/backoffice_frontend.conf | 30 ----------- etc/infrastructure/nginx/mooc_backend.conf | 30 ----------- 8 files changed, 21 insertions(+), 144 deletions(-) delete mode 100755 etc/infrastructure/nginx/backoffice_backend.conf delete mode 100755 etc/infrastructure/nginx/backoffice_frontend.conf delete mode 100755 etc/infrastructure/nginx/mooc_backend.conf diff --git a/Dockerfile b/Dockerfile index 0f82fbe05..1e33b4533 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM php:7.4.2-fpm-alpine WORKDIR /app RUN apk --update upgrade \ - && apk add --no-cache autoconf automake make gcc g++ icu-dev rabbitmq-c rabbitmq-c-dev \ + && apk add --no-cache autoconf automake make gcc g++ bash icu-dev rabbitmq-c rabbitmq-c-dev \ && pecl install amqp-1.9.4 \ && pecl install apcu-5.1.18 \ && pecl install xdebug-2.9.1 \ @@ -16,4 +16,6 @@ RUN apk --update upgrade \ apcu \ opcache +RUN curl -sS https://get.symfony.com/cli/installer | bash && mv /root/.symfony/bin/symfony /usr/local/bin/symfony + COPY etc/infrastructure/php/ /usr/local/etc/php/ diff --git a/Makefile b/Makefile index dde5eeca2..52a8b8720 100644 --- a/Makefile +++ b/Makefile @@ -54,19 +54,6 @@ rebuild: composer-env-file make deps make start -prepare-local: - curl -sS https://get.symfony.com/cli/installer | bash - -start-local: - symfony serve --dir=apps/mooc/backend/public --port=8030 -d --no-tls --force-php-discovery - symfony serve --dir=apps/backoffice/frontend/public --port=8032 -d --no-tls --force-php-discovery - symfony serve --dir=apps/backoffice/backend/public --port=8034 -d --no-tls --force-php-discovery - -stop-local: - symfony server:stop --dir=apps/mooc/backend/public - symfony server:stop --dir=apps/backoffice/frontend/public - symfony server:stop --dir=apps/backoffice/backend/public - ping-mysql: @docker exec codelytv-php_ddd_skeleton-mooc-mysql mysqladmin --user=root --password= --host "127.0.0.1" ping --silent diff --git a/apps/backoffice/backend/config/routes/courses.yaml b/apps/backoffice/backend/config/routes/courses.yaml index 3778b0e0d..06ae46ee8 100644 --- a/apps/backoffice/backend/config/routes/courses.yaml +++ b/apps/backoffice/backend/config/routes/courses.yaml @@ -1,5 +1,5 @@ courses_get: path: /courses controller: CodelyTv\Apps\Backoffice\Backend\Controller\Courses\CoursesGetController - defaults: { auth: true } + defaults: { auth: false } methods: [GET] diff --git a/apps/backoffice/frontend/templates/pages/courses/partials/list_courses.html.twig b/apps/backoffice/frontend/templates/pages/courses/partials/list_courses.html.twig index 43b1d1afa..51b18eea1 100644 --- a/apps/backoffice/frontend/templates/pages/courses/partials/list_courses.html.twig +++ b/apps/backoffice/frontend/templates/pages/courses/partials/list_courses.html.twig @@ -142,12 +142,12 @@ const urlParts = inputs.map(input => input.name + "=" + input.value); - const url = "http://localhost:8034/courses?" + urlParts.join("&"); + const url = "http://localhost:8040/courses?" + urlParts.join("&"); addCoursesList(url); } diff --git a/docker-compose.yml b/docker-compose.yml index 4d2103084..2af2539f2 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,6 +13,7 @@ services: - RABBITMQ_DEFAULT_PASS=c0d3ly shared_prometheus: + container_name: codelytv-php_ddd_skeleton-prometheus image: prom/prometheus:v2.1.0 volumes: - ./etc/prometheus/:/etc/prometheus/ @@ -26,12 +27,17 @@ services: mooc_mysql: container_name: codelytv-php_ddd_skeleton-mooc-mysql - image: mysql:8 + image: mysql:8.0 ports: - 3360:3306 environment: - MYSQL_ROOT_PASSWORD= - MYSQL_ALLOW_EMPTY_PASSWORD=yes + healthcheck: + test: ["CMD", "mysqladmin", "--user=root", "--password=", "--host=127.0.0.1", "ping", "--silent"] + interval: 2s + timeout: 10s + retries: 10 command: ["--default-authentication-plugin=mysql_native_password"] backoffice_elasticsearch: @@ -52,6 +58,7 @@ services: dockerfile: Dockerfile restart: unless-stopped ports: + - "8040:8040" - "9040:9001" volumes: - .:/app:delegated @@ -59,18 +66,7 @@ services: - shared_rabbitmq - shared_prometheus - backoffice_elasticsearch - - backoffice_backend_nginx: - container_name: codelytv-php_ddd_skeleton-backoffice_backend-nginx - image: nginx:1.19-alpine - restart: unless-stopped - ports: - - "8040:80" - volumes: - - .:/app:delegated - - ./etc/infrastructure/nginx/backoffice_backend.conf:/etc/nginx/conf.d/default.conf:ro - depends_on: - - backoffice_backend_php + 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 @@ -79,24 +75,16 @@ services: dockerfile: Dockerfile restart: unless-stopped ports: + - "8041:8041" - "9041:9001" volumes: - .:/app:delegated depends_on: - shared_rabbitmq - shared_prometheus - - backoffice_frontend_nginx: - container_name: codelytv-php_ddd_skeleton-backoffice_frontend-nginx - image: nginx:1.19-alpine - restart: unless-stopped - ports: - - "8041:80" - volumes: - - .:/app:delegated - - ./etc/infrastructure/nginx/backoffice_frontend.conf:/etc/nginx/conf.d/default.conf:ro - depends_on: - - backoffice_frontend_php + - backoffice_elasticsearch + - mooc_mysql + 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 @@ -105,6 +93,7 @@ services: dockerfile: Dockerfile restart: unless-stopped ports: + - "8030:8030" - "9030:9001" volumes: - .:/app:delegated @@ -112,15 +101,4 @@ services: - shared_rabbitmq - shared_prometheus - mooc_mysql - - mooc_backend_nginx: - container_name: codelytv-php_ddd_skeleton-mooc_backend-nginx - image: nginx:1.19-alpine - restart: unless-stopped - ports: - - "8030:80" - volumes: - - .:/app:delegated - - ./etc/infrastructure/nginx/mooc_backend.conf:/etc/nginx/conf.d/default.conf:ro - depends_on: - - mooc_backend_php + command: symfony serve --dir=apps/mooc/backend/public --port=8030 --force-php-discovery diff --git a/etc/infrastructure/nginx/backoffice_backend.conf b/etc/infrastructure/nginx/backoffice_backend.conf deleted file mode 100755 index 4dacaf8ff..000000000 --- a/etc/infrastructure/nginx/backoffice_backend.conf +++ /dev/null @@ -1,30 +0,0 @@ -server { - listen 80; - server_name localhost; - root /app/apps/backoffice/backend/public; - - error_log stderr; - access_log stdout; - - rewrite ^/index\.php/?(.*)$ /$1 permanent; - - try_files $uri @rewriteapp; - - location @rewriteapp { - rewrite ^(.*)$ /index.php/$1 last; - } - - location ~ /\. { - deny all; - } - - location ~ ^/(index)\.php(/|$) { - fastcgi_split_path_info ^(.+\.php)(/.*)$; - include fastcgi_params; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_index index.php; - send_timeout 1800; - fastcgi_read_timeout 1800; - fastcgi_pass backoffice_backend_php:9000; - } -} diff --git a/etc/infrastructure/nginx/backoffice_frontend.conf b/etc/infrastructure/nginx/backoffice_frontend.conf deleted file mode 100755 index e695c1929..000000000 --- a/etc/infrastructure/nginx/backoffice_frontend.conf +++ /dev/null @@ -1,30 +0,0 @@ -server { - listen 80; - server_name localhost; - root /app/apps/backoffice/frontend/public; - - error_log stderr; - access_log stdout; - - rewrite ^/index\.php/?(.*)$ /$1 permanent; - - try_files $uri @rewriteapp; - - location @rewriteapp { - rewrite ^(.*)$ /index.php/$1 last; - } - - location ~ /\. { - deny all; - } - - location ~ ^/(index)\.php(/|$) { - fastcgi_split_path_info ^(.+\.php)(/.*)$; - include fastcgi_params; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_index index.php; - send_timeout 1800; - fastcgi_read_timeout 1800; - fastcgi_pass backoffice_frontend_php:9000; - } -} diff --git a/etc/infrastructure/nginx/mooc_backend.conf b/etc/infrastructure/nginx/mooc_backend.conf deleted file mode 100755 index bc8187c8f..000000000 --- a/etc/infrastructure/nginx/mooc_backend.conf +++ /dev/null @@ -1,30 +0,0 @@ -server { - listen 80; - server_name localhost; - root /app/apps/mooc/backend/public; - - error_log stderr; - access_log stdout; - - rewrite ^/index\.php/?(.*)$ /$1 permanent; - - try_files $uri @rewriteapp; - - location @rewriteapp { - rewrite ^(.*)$ /index.php/$1 last; - } - - location ~ /\. { - deny all; - } - - location ~ ^/(index)\.php(/|$) { - fastcgi_split_path_info ^(.+\.php)(/.*)$; - include fastcgi_params; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_index index.php; - send_timeout 1800; - fastcgi_read_timeout 1800; - fastcgi_pass mooc_backend_php:9000; - } -} From f8bf31b98a23f5f9f9419c01eec4dd93d7a41e98 Mon Sep 17 00:00:00 2001 From: joucogi Date: Wed, 26 Aug 2020 18:28:20 +0200 Subject: [PATCH 035/106] Refactor Makefile file to standard PHONY usage. (#196) --- Makefile | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 52a8b8720..cee162bc9 100644 --- a/Makefile +++ b/Makefile @@ -1,37 +1,49 @@ -.PHONY: build deps composer-install composer-update composer reload test run-tests start stop destroy doco rebuild start-local ping-mysql composer-require composer-require-module - 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 @docker run --rm $(INTERACTIVE) --volume $(current-dir):/app --user $(id -u):$(id -g) \ composer:2 $(CMD) \ --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 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 +.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 @@ -40,20 +52,28 @@ run-tests: composer-env-file ./vendor/bin/behat -p mooc_backend --format=progress -v # 🐳 Docker Compose +.PHONY: start start: CMD=up -d + +.PHONY: stop stop: CMD=stop + +.PHONY: destroy destroy: CMD=down # 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 @docker-compose $(CMD) +.PHONY: rebuild rebuild: composer-env-file docker-compose build --pull --force-rm --no-cache make deps make start +.PHONY: ping-mysql ping-mysql: @docker exec codelytv-php_ddd_skeleton-mooc-mysql mysqladmin --user=root --password= --host "127.0.0.1" ping --silent From 71f128a11d3a7f822c1cdc4b2e31f854816cb1be Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Sep 2020 15:31:30 +0200 Subject: [PATCH 036/106] Bump symfony/http-kernel from 5.1.2 to 5.1.5 (#198) Bumps [symfony/http-kernel](https://github.com/symfony/http-kernel) from 5.1.2 to 5.1.5. - [Release notes](https://github.com/symfony/http-kernel/releases) - [Changelog](https://github.com/symfony/http-kernel/blob/master/CHANGELOG.md) - [Commits](https://github.com/symfony/http-kernel/compare/v5.1.2...v5.1.5) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.lock | 96 +++++++++++++++++++++++++++++---------------------- 1 file changed, 54 insertions(+), 42 deletions(-) diff --git a/composer.lock b/composer.lock index 4ad8f5750..0343bc742 100644 --- a/composer.lock +++ b/composer.lock @@ -3074,16 +3074,16 @@ }, { "name": "symfony/error-handler", - "version": "v5.1.2", + "version": "v5.1.5", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "7d0b927b9d3dc41d7d46cda38cbfcd20cdcbb896" + "reference": "525636d4b84e06c6ca72d96b6856b5b169416e6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/7d0b927b9d3dc41d7d46cda38cbfcd20cdcbb896", - "reference": "7d0b927b9d3dc41d7d46cda38cbfcd20cdcbb896", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/525636d4b84e06c6ca72d96b6856b5b169416e6a", + "reference": "525636d4b84e06c6ca72d96b6856b5b169416e6a", "shasum": "" }, "require": { @@ -3141,20 +3141,20 @@ "type": "tidelift" } ], - "time": "2020-05-30T20:35:19+00:00" + "time": "2020-08-17T10:01:29+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.1.2", + "version": "v5.1.5", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "cc0d059e2e997e79ca34125a52f3e33de4424ac7" + "reference": "94871fc0a69c3c5da57764187724cdce0755899c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/cc0d059e2e997e79ca34125a52f3e33de4424ac7", - "reference": "cc0d059e2e997e79ca34125a52f3e33de4424ac7", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/94871fc0a69c3c5da57764187724cdce0755899c", + "reference": "94871fc0a69c3c5da57764187724cdce0755899c", "shasum": "" }, "require": { @@ -3227,7 +3227,7 @@ "type": "tidelift" } ], - "time": "2020-05-20T17:43:50+00:00" + "time": "2020-08-13T14:19:42+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -3581,16 +3581,16 @@ }, { "name": "symfony/http-foundation", - "version": "v5.1.2", + "version": "v5.1.5", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "f93055171b847915225bd5b0a5792888419d8d75" + "reference": "41a4647f12870e9d41d9a7d72ff0614a27208558" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f93055171b847915225bd5b0a5792888419d8d75", - "reference": "f93055171b847915225bd5b0a5792888419d8d75", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/41a4647f12870e9d41d9a7d72ff0614a27208558", + "reference": "41a4647f12870e9d41d9a7d72ff0614a27208558", "shasum": "" }, "require": { @@ -3652,20 +3652,20 @@ "type": "tidelift" } ], - "time": "2020-06-15T06:52:54+00:00" + "time": "2020-08-17T07:48:54+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.1.2", + "version": "v5.1.5", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "a18c27ace1ef344ffcb129a5b089bad7643b387a" + "reference": "3e32676e6cb5d2081c91a56783471ff8a7f7110b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a18c27ace1ef344ffcb129a5b089bad7643b387a", - "reference": "a18c27ace1ef344ffcb129a5b089bad7643b387a", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3e32676e6cb5d2081c91a56783471ff8a7f7110b", + "reference": "3e32676e6cb5d2081c91a56783471ff8a7f7110b", "shasum": "" }, "require": { @@ -3765,7 +3765,7 @@ "type": "tidelift" } ], - "time": "2020-06-15T13:51:38+00:00" + "time": "2020-09-02T08:15:18+00:00" }, { "name": "symfony/messenger", @@ -3933,7 +3933,7 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.18.0", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -4253,7 +4253,7 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.18.0", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -4480,7 +4480,7 @@ }, { "name": "symfony/polyfill-php73", - "version": "v1.18.0", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", @@ -4556,7 +4556,7 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.18.0", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", @@ -5346,16 +5346,16 @@ }, { "name": "symfony/var-dumper", - "version": "v5.1.2", + "version": "v5.1.5", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "46a942903059b0b05e601f00eb64179e05578c0f" + "reference": "b43a3905262bcf97b2510f0621f859ca4f5287be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/46a942903059b0b05e601f00eb64179e05578c0f", - "reference": "46a942903059b0b05e601f00eb64179e05578c0f", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b43a3905262bcf97b2510f0621f859ca4f5287be", + "reference": "b43a3905262bcf97b2510f0621f859ca4f5287be", "shasum": "" }, "require": { @@ -5432,7 +5432,7 @@ "type": "tidelift" } ], - "time": "2020-05-30T20:35:19+00:00" + "time": "2020-08-17T07:42:30+00:00" }, { "name": "symfony/var-exporter", @@ -7034,6 +7034,7 @@ "type": "github" } ], + "abandoned": true, "time": "2020-06-27T06:36:25+00:00" }, { @@ -7140,12 +7141,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "9f386dba391018e90a5f1e51abeffc6bf27583db" + "reference": "697cfbd44fa43ebb5cd9d5ce6d8fc0edcbce85b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/9f386dba391018e90a5f1e51abeffc6bf27583db", - "reference": "9f386dba391018e90a5f1e51abeffc6bf27583db", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/697cfbd44fa43ebb5cd9d5ce6d8fc0edcbce85b8", + "reference": "697cfbd44fa43ebb5cd9d5ce6d8fc0edcbce85b8", "shasum": "" }, "conflict": { @@ -7161,6 +7162,7 @@ "bagisto/bagisto": "<0.1.5", "barrelstrength/sprout-base-email": "<1.2.7", "barrelstrength/sprout-forms": "<3.9", + "baserproject/basercms": ">=4,<=4.3.6", "bolt/bolt": "<3.7.1", "brightlocal/phpwhois": "<=4.2.5", "buddypress/buddypress": "<5.1.2", @@ -7178,6 +7180,7 @@ "contao/listing-bundle": ">=4,<4.4.8", "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", "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", @@ -7212,6 +7215,7 @@ "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", "fuel/core": "<1.8.1", "getgrav/grav": "<1.7-beta.8", "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", @@ -7219,8 +7223,8 @@ "gregwar/rst": "<1.0.3", "guzzlehttp/guzzle": ">=4-rc.2,<4.2.4|>=5,<5.3.1|>=6,<6.2.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.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.42|>=5.6,<5.6.30", - "illuminate/database": ">=4,<4.0.99|>=4.1,<4.1.29", + "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": ">=4,<4.0.99|>=4.1,<4.1.29|>=5.5,<=5.5.44|>=6,<6.18.34|>=7,<7.23.2", "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", "ivankristianto/phpwhois": "<=4.3", @@ -7228,9 +7232,10 @@ "joomla/session": "<1.3.1", "jsmitty12/phpwhois": "<5.1", "kazist/phpwhois": "<=4.2.6", + "kitodo/presentation": "<3.1.2", "kreait/firebase-php": ">=3.2,<3.8.1", "la-haute-societe/tcpdf": "<6.2.22", - "laravel/framework": ">=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.42|>=5.6,<5.6.30|>=7,<7.1.2", + "laravel/framework": ">=4,<4.0.99|>=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.34|>=7,<7.23.2", "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", "league/commonmark": "<0.18.3", "librenms/librenms": "<1.53", @@ -7238,14 +7243,20 @@ "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", + "mittwald/typo3_forum": "<1.2.1", "monolog/monolog": ">=1.8,<1.12", "namshi/jose": "<2.2", "nystudio107/craft-seomatic": "<3.3", "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", - "october/october": ">=1.0.319,<1.0.467", + "october/backend": ">=1.0.319,<1.0.467", + "october/cms": ">=1.0.319,<1.0.466", + "october/october": ">=1.0.319,<1.0.466", + "october/rain": ">=1.0.319,<1.0.468", "onelogin/php-saml": "<2.10.4", "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", "openid/php-openid": "<2.3", + "openmage/magento-lts": "<19.4.6|>=20,<20.0.2", "oro/crm": ">=1.7,<1.7.4", "oro/platform": ">=1.7,<1.7.4", "padraic/humbug_get_contents": "<1.1.2", @@ -7302,11 +7313,12 @@ "ssddanbrown/bookstack": "<0.29.2", "stormpath/sdk": ">=0,<9.9.99", "studio-42/elfinder": "<2.1.49", + "sulu/sulu": "<1.6.34|>=2,<2.0.10|>=2.1,<2.1.1", "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/resource-bundle": "<1.3.13|>=1.4,<1.4.6|>=1.5,<1.5.1|>=1.6,<1.6.3", + "sylius/resource-bundle": "<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", "sylius/sylius": "<1.3.16|>=1.4,<1.4.12|>=1.5,<1.5.9|>=1.6,<1.6.5", "symbiote/silverstripe-multivaluefield": ">=3,<3.0.99", "symbiote/silverstripe-versionedfiles": "<=2.0.3", @@ -7316,7 +7328,7 @@ "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/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.3.8", + "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/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", "symfony/mime": ">=4.3,<4.3.8", "symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", @@ -7331,7 +7343,7 @@ "symfony/security-guard": ">=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", "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", "symfony/serializer": ">=2,<2.0.11", - "symfony/symfony": ">=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/symfony": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.4.13|>=5,<5.1.5", "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", @@ -7345,8 +7357,8 @@ "titon/framework": ">=0,<9.9.99", "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.30|>=9,<9.5.17|>=10,<10.4.2", - "typo3/cms-core": ">=8,<8.7.30|>=9,<9.5.17|>=10,<10.4.2", + "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.30|>=9,<9.5.20|>=10,<10.4.6", + "typo3/cms-core": ">=8,<8.7.30|>=9,<9.5.20|>=10,<10.4.6", "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5", "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4", "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", @@ -7419,7 +7431,7 @@ "type": "tidelift" } ], - "time": "2020-07-16T05:17:29+00:00" + "time": "2020-09-02T19:02:24+00:00" }, { "name": "sebastian/code-unit", From 3cb21f60876885547a1cdc5ffe45e813d403df89 Mon Sep 17 00:00:00 2001 From: Daniel Ramos Date: Mon, 14 Sep 2020 12:37:29 +0100 Subject: [PATCH 037/106] Migrate Doctrine mappings to XML (#200) --- .../Persistence/Doctrine/Video.orm.xml | 17 +++++++++++++ .../Persistence/Doctrine/Video.orm.yml | 25 ------------------- .../Persistence/Doctrine/VideoTitle.orm.xml | 11 ++++++++ .../Persistence/Doctrine/VideoTitle.orm.yml | 7 ------ .../Persistence/Doctrine/VideoType.orm.xml | 11 ++++++++ .../Persistence/Doctrine/VideoType.orm.yml | 7 ------ 6 files changed, 39 insertions(+), 39 deletions(-) create mode 100644 src/Mooc/Videos/Infrastructure/Persistence/Doctrine/Video.orm.xml delete mode 100644 src/Mooc/Videos/Infrastructure/Persistence/Doctrine/Video.orm.yml create mode 100644 src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoTitle.orm.xml delete mode 100644 src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoTitle.orm.yml create mode 100644 src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoType.orm.xml delete mode 100644 src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoType.orm.yml diff --git a/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/Video.orm.xml b/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/Video.orm.xml new file mode 100644 index 000000000..bd2d9a994 --- /dev/null +++ b/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/Video.orm.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + diff --git a/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/Video.orm.yml b/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/Video.orm.yml deleted file mode 100644 index 876b9138f..000000000 --- a/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/Video.orm.yml +++ /dev/null @@ -1,25 +0,0 @@ -CodelyTv\Mooc\Videos\Domain\Video: - type: entity - table: videos - - id: - id: - type: video_id - column: id - length: 36 - - fields: - courseId: - type: course_id - column: course_id - - embedded: - type: - class: CodelyTv\Mooc\Videos\Domain\VideoType - columnPrefix: false - title: - class: CodelyTv\Mooc\Videos\Domain\VideoTitle - columnPrefix: false - url: - class: CodelyTv\Mooc\Shared\Domain\Videos\VideoUrl - columnPrefix: false diff --git a/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoTitle.orm.xml b/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoTitle.orm.xml new file mode 100644 index 000000000..b6496a0c4 --- /dev/null +++ b/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoTitle.orm.xml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoTitle.orm.yml b/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoTitle.orm.yml deleted file mode 100644 index 730a5c931..000000000 --- a/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoTitle.orm.yml +++ /dev/null @@ -1,7 +0,0 @@ -CodelyTv\Mooc\Videos\Domain\VideoTitle: - type: embeddable - - fields: - value: - type: string - column: title diff --git a/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoType.orm.xml b/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoType.orm.xml new file mode 100644 index 000000000..b05a427cb --- /dev/null +++ b/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoType.orm.xml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoType.orm.yml b/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoType.orm.yml deleted file mode 100644 index ac6da1871..000000000 --- a/src/Mooc/Videos/Infrastructure/Persistence/Doctrine/VideoType.orm.yml +++ /dev/null @@ -1,7 +0,0 @@ -CodelyTv\Mooc\Videos\Domain\VideoType: - type: embeddable - - fields: - value: - type: string - column: type From 46eb1a42c7f2fca1def1d3ceda3066b90e59328a Mon Sep 17 00:00:00 2001 From: jomisacu Date: Fri, 2 Oct 2020 10:47:02 -0400 Subject: [PATCH 038/106] Fix referenced pattern name (#204) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0ce3b7e9b..f40d1c2cc 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,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 `Strategy` pattern also known as `Criteria` pattern. So we add a +If we need some query with more filters we use the `Specification` pattern also known as `Criteria` pattern. So we add a `searchByCriteria` method. You can see an example [here](src/Mooc/Courses/Domain/CourseRepository.php) From 5d02e003ed3d2ec44263cce12131e1a5875be7c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Thu, 5 Nov 2020 22:15:32 +0100 Subject: [PATCH 039/106] Use PHP 8 --- Dockerfile | 2 +- composer.json | 2 +- composer.lock | 45 +++++++++++++++++++++++++++++---------------- 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1e33b4533..c739d6c25 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM php:7.4.2-fpm-alpine +FROM php:8.0.0RC3-fpm-alpine WORKDIR /app RUN apk --update upgrade \ diff --git a/composer.json b/composer.json index 53d2240ff..736f50b48 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": "^7.4", + "php": "^8.0", "ext-amqp": "*", "ext-apcu": "*", diff --git a/composer.lock b/composer.lock index 0343bc742..3fb48dd32 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": "5b369cd8eccc1e25b6b019e1737d311b", + "content-hash": "10a44651f3f7cd5f3210cb9ae53271b5", "packages": [ { "name": "doctrine/annotations", @@ -1038,6 +1038,7 @@ "reflection", "static" ], + "abandoned": "roave/better-reflection", "time": "2020-03-27T11:06:43+00:00" }, { @@ -7034,7 +7035,6 @@ "type": "github" } ], - "abandoned": true, "time": "2020-06-27T06:36:25+00:00" }, { @@ -7141,12 +7141,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "697cfbd44fa43ebb5cd9d5ce6d8fc0edcbce85b8" + "reference": "065a018d3b5c2c84a53db3347cca4e1b7fa362a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/697cfbd44fa43ebb5cd9d5ce6d8fc0edcbce85b8", - "reference": "697cfbd44fa43ebb5cd9d5ce6d8fc0edcbce85b8", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/065a018d3b5c2c84a53db3347cca4e1b7fa362a6", + "reference": "065a018d3b5c2c84a53db3347cca4e1b7fa362a6", "shasum": "" }, "conflict": { @@ -7162,7 +7162,7 @@ "bagisto/bagisto": "<0.1.5", "barrelstrength/sprout-base-email": "<1.2.7", "barrelstrength/sprout-forms": "<3.9", - "baserproject/basercms": ">=4,<=4.3.6", + "baserproject/basercms": ">=4,<=4.3.6|>=4.4,<4.4.1", "bolt/bolt": "<3.7.1", "brightlocal/phpwhois": "<=4.2.5", "buddypress/buddypress": "<5.1.2", @@ -7176,7 +7176,7 @@ "composer/composer": "<=1-alpha.11", "contao-components/mediaelement": ">=2.14.2,<2.21.1", "contao/core": ">=2,<3.5.39", - "contao/core-bundle": ">=4,<4.4.46|>=4.5,<4.8.6", + "contao/core-bundle": ">=4,<4.4.52|>=4.5,<4.9.6|= 4.10.0", "contao/listing-bundle": ">=4,<4.4.8", "datadog/dd-trace": ">=0.30,<0.30.2", "david-garcia/phpwhois": "<=4.3.1", @@ -7192,8 +7192,8 @@ "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1", "dolibarr/dolibarr": "<11.0.4", "dompdf/dompdf": ">=0.6,<0.6.2", - "drupal/core": ">=7,<7.72|>=8,<8.8.8|>=8.9,<8.9.1|>=9,<9.0.1", - "drupal/drupal": ">=7,<7.72|>=8,<8.8.8|>=8.9,<8.9.1|>=9,<9.0.1", + "drupal/core": ">=7,<7.73|>=8,<8.8.10|>=8.9,<8.9.6|>=9,<9.0.6", + "drupal/drupal": ">=7,<7.73|>=8,<8.8.10|>=8.9,<8.9.6|>=9,<9.0.6", "endroid/qr-code-bundle": "<3.4.2", "enshrined/svg-sanitize": "<0.13.1", "erusev/parsedown": "<1.7.2", @@ -7202,11 +7202,12 @@ "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-admin-ui-assets": ">=4,<4.2", + "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", "ezsystems/ezplatform-kernel": ">=1,<1.0.2.1", "ezsystems/ezplatform-user": ">=1,<1.0.1", "ezsystems/ezpublish-kernel": ">=5.3,<5.3.12.1|>=5.4,<5.4.14.2|>=6,<6.7.9.1|>=6.8,<6.13.6.3|>=7,<7.2.4.1|>=7.3,<7.3.2.1|>=7.5,<7.5.7.1", - "ezsystems/ezpublish-legacy": ">=5.3,<5.3.12.6|>=5.4,<5.4.14.1|>=2011,<2017.12.7.2|>=2018.6,<2018.6.1.4|>=2018.9,<2018.9.1.3|>=2019.3,<2019.3.4.2", + "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/platform-ui-assets-bundle": ">=4.2,<4.2.3", "ezsystems/repository-forms": ">=2.3,<2.3.2.1", "ezyang/htmlpurifier": "<4.1.1", "firebase/php-jwt": "<2", @@ -7239,14 +7240,18 @@ "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", "league/commonmark": "<0.18.3", "librenms/librenms": "<1.53", + "livewire/livewire": ">2.2.4,<2.2.6", "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", + "mediawiki/core": ">=1.31,<1.31.9|>=1.32,<1.32.4|>=1.33,<1.33.3|>=1.34,<1.34.3|>=1.34.99,<1.35", "mittwald/typo3_forum": "<1.2.1", "monolog/monolog": ">=1.8,<1.12", "namshi/jose": "<2.2", + "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", "nystudio107/craft-seomatic": "<3.3", "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", "october/backend": ">=1.0.319,<1.0.467", @@ -7256,7 +7261,8 @@ "onelogin/php-saml": "<2.10.4", "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", "openid/php-openid": "<2.3", - "openmage/magento-lts": "<19.4.6|>=20,<20.0.2", + "openmage/magento-lts": "<19.4.8|>=20,<20.0.4", + "orchid/platform": ">=9,<9.4.4", "oro/crm": ">=1.7,<1.7.4", "oro/platform": ">=1.7,<1.7.4", "padraic/humbug_get_contents": "<1.1.2", @@ -7264,6 +7270,7 @@ "paragonie/random_compat": "<2", "paypal/merchant-sdk-php": "<3.12", "pear/archive_tar": "<1.4.4", + "personnummer/personnummer": "<3.0.2", "phpfastcache/phpfastcache": ">=5,<5.0.13", "phpmailer/phpmailer": "<6.1.6", "phpmussel/phpmussel": ">=1,<1.6", @@ -7275,18 +7282,23 @@ "phpxmlrpc/extras": "<0.6.1", "pimcore/pimcore": "<6.3", "prestashop/autoupgrade": ">=4,<4.10.1", + "prestashop/contactform": ">1.0.1,<4.3", "prestashop/gamification": "<2.3.2", "prestashop/ps_facetedsearch": "<3.4.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", "pusher/pusher-php-server": "<2.2.1", "rainlab/debugbar-plugin": "<3.1", "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", "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.3.2", + "shopware/platform": "<=6.3.2", "shopware/shopware": "<5.3.7", "silverstripe/admin": ">=1.0.3,<1.0.4|>=1.1,<1.1.1", "silverstripe/assets": ">=1,<1.4.7|>=1.5,<1.5.2", @@ -7319,7 +7331,7 @@ "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/resource-bundle": "<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", - "sylius/sylius": "<1.3.16|>=1.4,<1.4.12|>=1.5,<1.5.9|>=1.6,<1.6.5", + "sylius/sylius": "<1.6.9|>=1.7,<1.7.9|>=1.8,<1.8.3", "symbiote/silverstripe-multivaluefield": ">=3,<3.0.99", "symbiote/silverstripe-versionedfiles": "<=2.0.3", "symfony/cache": ">=3.1,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", @@ -7362,6 +7374,7 @@ "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5", "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4", "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", + "typo3fluid/fluid": ">=2,<2.0.5|>=2.1,<2.1.4|>=2.2,<2.2.1|>=2.3,<2.3.5|>=2.4,<2.4.1|>=2.5,<2.5.5|>=2.6,<2.6.1", "ua-parser/uap-php": "<3.8", "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", "verot/class.upload.php": "<=1.0.3|>=2,<=2.0.4", @@ -7369,7 +7382,7 @@ "willdurand/js-translation-bundle": "<2.1.1", "yii2mod/yii2-cms": "<1.9.2", "yiisoft/yii": ">=1.1.14,<1.1.15", - "yiisoft/yii2": "<2.0.15", + "yiisoft/yii2": "<2.0.38", "yiisoft/yii2-bootstrap": "<2.0.4", "yiisoft/yii2-dev": "<2.0.15", "yiisoft/yii2-elasticsearch": "<2.0.5", @@ -7431,7 +7444,7 @@ "type": "tidelift" } ], - "time": "2020-09-02T19:02:24+00:00" + "time": "2020-11-01T20:01:47+00:00" }, { "name": "sebastian/code-unit", @@ -8722,7 +8735,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^7.4", + "php": "^8.0", "ext-amqp": "*", "ext-apcu": "*", "ext-json": "*", From 5fedecdc8b226fe05634daceb1de0b79c1f63d61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Thu, 5 Nov 2020 22:21:35 +0100 Subject: [PATCH 040/106] Use `pickle` instead of `pecl` --- Dockerfile | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index c739d6c25..f9b5807d9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,20 @@ FROM php:8.0.0RC3-fpm-alpine WORKDIR /app +RUN wget https://github.com/FriendsOfPHP/pickle/releases/download/v0.6.0/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 rabbitmq-c rabbitmq-c-dev \ - && pecl install amqp-1.9.4 \ - && pecl install apcu-5.1.18 \ - && pecl install xdebug-2.9.1 \ + && apk add --no-cache autoconf automake make gcc g++ bash icu-dev libzip-dev rabbitmq-c rabbitmq-c-dev \ && docker-php-ext-install -j$(nproc) \ bcmath \ opcache \ intl \ + zip \ pdo_mysql \ + && pickle install amqp-1.10.2 \ + && pickle install apcu-5.1.19 \ && docker-php-ext-enable \ amqp \ apcu \ From d34cd33fe98e2b45fb0c9742e6d8cc4245fed7b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Tue, 10 Nov 2020 15:24:52 +0100 Subject: [PATCH 041/106] Build amqp from sources test Build amqp from sources Build amqp from sources --- Dockerfile | 13 +++++++++---- etc/infrastructure/php/extensions/amqp.sh | 6 ++++++ 2 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 etc/infrastructure/php/extensions/amqp.sh diff --git a/Dockerfile b/Dockerfile index f9b5807d9..eab1d7cfd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,10 +12,15 @@ RUN apk --update upgrade \ opcache \ intl \ zip \ - pdo_mysql \ - && pickle install amqp-1.10.2 \ - && pickle install apcu-5.1.19 \ - && docker-php-ext-enable \ + pdo_mysql + +RUN pickle install apcu-5.1.19 + +ADD etc/infrastructure/php/extensions/amqp.sh /root/install-amqp.sh +RUN apk add git +RUN sh /root/install-amqp.sh + +RUN docker-php-ext-enable \ amqp \ apcu \ opcache diff --git a/etc/infrastructure/php/extensions/amqp.sh b/etc/infrastructure/php/extensions/amqp.sh new file mode 100644 index 000000000..2531f08bc --- /dev/null +++ b/etc/infrastructure/php/extensions/amqp.sh @@ -0,0 +1,6 @@ +git clone https://github.com/php-amqp/php-amqp.git +cd php-amqp +phpize +./configure +make +make install From 5623454eb77af5fc1cc424bed15470c3bedb0a00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Tue, 10 Nov 2020 17:28:23 +0100 Subject: [PATCH 042/106] Update to Symfony 5.2 It's needed to work with php 8 --- composer.json | 14 +- composer.lock | 2711 ++++++++++++++++++++++++++++--------------------- 2 files changed, 1555 insertions(+), 1170 deletions(-) diff --git a/composer.json b/composer.json index 736f50b48..5ac72f26d 100644 --- a/composer.json +++ b/composer.json @@ -12,12 +12,12 @@ "ext-zend-opcache": "*", "ext-pdo": "*", - "symfony/framework-bundle": "^5.1", - "symfony/messenger": "^5.1", - "symfony/dotenv": "^5.1", - "symfony/yaml": "^5.1", - "symfony/twig-bundle": "^5.1", - "symfony/validator": "^5.1", + "symfony/framework-bundle": "^v5.2", + "symfony/messenger": "^v5.2", + "symfony/dotenv": "^v5.2", + "symfony/yaml": "^v5.2", + "symfony/twig-bundle": "^v5.2", + "symfony/validator": "^v5.2", "lambdish/phunctional": "^2.0", @@ -65,5 +65,5 @@ "CodelyTv\\Tests\\": ["tests"] } }, - "minimum-stability": "stable" + "minimum-stability": "RC" } diff --git a/composer.lock b/composer.lock index 3fb48dd32..57e807876 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,93 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "10a44651f3f7cd5f3210cb9ae53271b5", + "content-hash": "e934130660b685ecaae3c157a8a0ed22", "packages": [ + { + "name": "composer/package-versions-deprecated", + "version": "1.8.2", + "source": { + "type": "git", + "url": "https://github.com/composer/package-versions-deprecated.git", + "reference": "7a8001fe2c9befad9d001bf54ef0b4a17d950d0f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/7a8001fe2c9befad9d001bf54ef0b4a17d950d0f", + "reference": "7a8001fe2c9befad9d001bf54ef0b4a17d950d0f", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1.0 || ^2.0", + "php": "^7" + }, + "replace": { + "ocramius/package-versions": "1.8.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.8.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2020-07-10T14:10:26+00:00" + }, { "name": "doctrine/annotations", - "version": "1.10.3", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d" + "reference": "ce77a7ba1770462cd705a91a151b6c3746f9c6ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/5db60a4969eba0e0c197a19c077780aadbc43c5d", - "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/ce77a7ba1770462cd705a91a151b6c3746f9c6ad", + "reference": "ce77a7ba1770462cd705a91a151b6c3746f9c6ad", "shasum": "" }, "require": { @@ -27,12 +100,14 @@ }, "require-dev": { "doctrine/cache": "1.*", - "phpunit/phpunit": "^7.5" + "doctrine/coding-standard": "^6.0 || ^8.1", + "phpstan/phpstan": "^0.12.20", + "phpunit/phpunit": "^7.5 || ^9.1.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9.x-dev" + "dev-master": "1.11.x-dev" } }, "autoload": { @@ -67,13 +142,17 @@ } ], "description": "Docblock Annotations Parser", - "homepage": "http://www.doctrine-project.org", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", "keywords": [ "annotations", "docblock", "parser" ], - "time": "2020-05-25T17:24:27+00:00" + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.11.1" + }, + "time": "2020-10-26T10:28:16+00:00" }, { "name": "doctrine/cache", @@ -155,6 +234,10 @@ "redis", "xcache" ], + "support": { + "issues": "https://github.com/doctrine/cache/issues", + "source": "https://github.com/doctrine/cache/tree/1.10.x" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -173,16 +256,16 @@ }, { "name": "doctrine/collections", - "version": "1.6.6", + "version": "1.6.7", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "5f0470363ff042d0057006ae7acabc5d7b5252d5" + "reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/5f0470363ff042d0057006ae7acabc5d7b5252d5", - "reference": "5f0470363ff042d0057006ae7acabc5d7b5252d5", + "url": "https://api.github.com/repos/doctrine/collections/zipball/55f8b799269a1a472457bd1a41b4f379d4cfba4a", + "reference": "55f8b799269a1a472457bd1a41b4f379d4cfba4a", "shasum": "" }, "require": { @@ -234,21 +317,11 @@ "iterators", "php" ], - "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": "2020-06-22T19:14:02+00:00" + "support": { + "issues": "https://github.com/doctrine/collections/issues", + "source": "https://github.com/doctrine/collections/tree/1.6.7" + }, + "time": "2020-07-27T17:53:49+00:00" }, { "name": "doctrine/common", @@ -324,6 +397,10 @@ "doctrine", "php" ], + "support": { + "issues": "https://github.com/doctrine/common/issues", + "source": "https://github.com/doctrine/common/tree/3.0.2" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -342,32 +419,32 @@ }, { "name": "doctrine/dbal", - "version": "2.10.2", + "version": "2.12.0", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "aab745e7b6b2de3b47019da81e7225e14dcfdac8" + "reference": "c6d37b4c42aaa3c3ee175f05eca68056f4185646" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/aab745e7b6b2de3b47019da81e7225e14dcfdac8", - "reference": "aab745e7b6b2de3b47019da81e7225e14dcfdac8", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/c6d37b4c42aaa3c3ee175f05eca68056f4185646", + "reference": "c6d37b4c42aaa3c3ee175f05eca68056f4185646", "shasum": "" }, "require": { "doctrine/cache": "^1.0", "doctrine/event-manager": "^1.0", "ext-pdo": "*", - "php": "^7.2" + "php": "^7.3 || ^8" }, "require-dev": { - "doctrine/coding-standard": "^6.0", + "doctrine/coding-standard": "^8.1", "jetbrains/phpstorm-stubs": "^2019.1", - "nikic/php-parser": "^4.4", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^8.4.1", + "phpstan/phpstan": "^0.12.40", + "phpunit/phpunit": "^9.4", + "psalm/plugin-phpunit": "^0.10.0", "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "^3.11" + "vimeo/psalm": "^3.17.2" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -378,8 +455,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.10.x-dev", - "dev-develop": "3.0.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { @@ -432,6 +508,10 @@ "sqlserver", "sqlsrv" ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/2.12.0" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -446,24 +526,24 @@ "type": "tidelift" } ], - "time": "2020-04-20T17:19:26+00:00" + "time": "2020-10-22T17:26:24+00:00" }, { "name": "doctrine/event-manager", - "version": "1.1.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "629572819973f13486371cb611386eb17851e85c" + "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/629572819973f13486371cb611386eb17851e85c", - "reference": "629572819973f13486371cb611386eb17851e85c", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f", + "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "conflict": { "doctrine/common": "<2.9@dev" @@ -522,7 +602,25 @@ "event system", "events" ], - "time": "2019-11-10T09:48:07+00:00" + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/1.1.x" + }, + "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%2Fevent-manager", + "type": "tidelift" + } + ], + "time": "2020-05-29T18:28:51+00:00" }, { "name": "doctrine/inflector", @@ -600,6 +698,10 @@ "uppercase", "words" ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/1.4.x" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -670,6 +772,10 @@ "constructor", "instantiate" ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.3.x" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -746,6 +852,10 @@ "parser", "php" ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.1" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -764,19 +874,20 @@ }, { "name": "doctrine/orm", - "version": "v2.7.3", + "version": "2.7.4", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "d95e03ba660d50d785a9925f41927fef0ee553cf" + "reference": "7d84a4998091ece4d645253ac65de9f879eeed2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/d95e03ba660d50d785a9925f41927fef0ee553cf", - "reference": "d95e03ba660d50d785a9925f41927fef0ee553cf", + "url": "https://api.github.com/repos/doctrine/orm/zipball/7d84a4998091ece4d645253ac65de9f879eeed2f", + "reference": "7d84a4998091ece4d645253ac65de9f879eeed2f", "shasum": "" }, "require": { + "composer/package-versions-deprecated": "^1.8", "doctrine/annotations": "^1.8", "doctrine/cache": "^1.9.1", "doctrine/collections": "^1.5", @@ -788,7 +899,6 @@ "doctrine/lexer": "^1.0", "doctrine/persistence": "^1.3.3 || ^2.0", "ext-pdo": "*", - "ocramius/package-versions": "^1.2", "php": "^7.1", "symfony/console": "^3.0|^4.0|^5.0" }, @@ -848,34 +958,24 @@ "database", "orm" ], - "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/orm", - "type": "tidelift" - } - ], - "time": "2020-05-26T16:03:49+00:00" + "support": { + "issues": "https://github.com/doctrine/orm/issues", + "source": "https://github.com/doctrine/orm/tree/2.7.4" + }, + "time": "2020-10-10T17:11:26+00:00" }, { "name": "doctrine/persistence", - "version": "2.0.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "1dee036f22cd5dc0bc12132f1d1c38415907be55" + "reference": "9899c16934053880876b920a3b8b02ed2337ac1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/1dee036f22cd5dc0bc12132f1d1c38415907be55", - "reference": "1dee036f22cd5dc0bc12132f1d1c38415907be55", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/9899c16934053880876b920a3b8b02ed2337ac1d", + "reference": "9899c16934053880876b920a3b8b02ed2337ac1d", "shasum": "" }, "require": { @@ -883,24 +983,20 @@ "doctrine/cache": "^1.0", "doctrine/collections": "^1.0", "doctrine/event-manager": "^1.0", - "doctrine/reflection": "^1.2", - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "conflict": { "doctrine/common": "<2.10@dev" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan": "^0.11", - "phpunit/phpunit": "^7.0", + "composer/package-versions-deprecated": "^1.11", + "doctrine/coding-standard": "^6.0 || ^8.0", + "doctrine/common": "^3.0", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.5.20 || ^8.0 || ^9.0", "vimeo/psalm": "^3.11" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\": "lib/Doctrine/Common", @@ -946,113 +1042,24 @@ "orm", "persistence" ], - "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": "2020-05-12T19:32:44+00:00" - }, - { - "name": "doctrine/reflection", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/reflection.git", - "reference": "55e71912dfcd824b2fdd16f2d9afe15684cfce79" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/reflection/zipball/55e71912dfcd824b2fdd16f2d9afe15684cfce79", - "reference": "55e71912dfcd824b2fdd16f2d9afe15684cfce79", - "shasum": "" - }, - "require": { - "doctrine/annotations": "^1.0", - "ext-tokenizer": "*", - "php": "^7.1" - }, - "conflict": { - "doctrine/common": "<2.9" - }, - "require-dev": { - "doctrine/coding-standard": "^5.0", - "doctrine/common": "^2.10", - "phpstan/phpstan": "^0.11.0", - "phpstan/phpstan-phpunit": "^0.11.0", - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" - } + "support": { + "issues": "https://github.com/doctrine/persistence/issues", + "source": "https://github.com/doctrine/persistence/tree/2.1.0" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "The Doctrine Reflection project is a simple library used by the various Doctrine projects which adds some additional functionality on top of the reflection functionality that comes with PHP. It allows you to get the reflection information about classes, methods and properties statically.", - "homepage": "https://www.doctrine-project.org/projects/reflection.html", - "keywords": [ - "reflection", - "static" - ], - "abandoned": "roave/better-reflection", - "time": "2020-03-27T11:06:43+00:00" + "time": "2020-10-24T22:13:54+00:00" }, { "name": "elasticsearch/elasticsearch", - "version": "v7.8.0", + "version": "v7.9.1", "source": { "type": "git", "url": "https://github.com/elastic/elasticsearch-php.git", - "reference": "5c2d039ae7bdaa1e28f1e66971c5b3314fc36383" + "reference": "38e821f37491bd91fe06b18b88613128950a11bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/5c2d039ae7bdaa1e28f1e66971c5b3314fc36383", - "reference": "5c2d039ae7bdaa1e28f1e66971c5b3314fc36383", + "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/38e821f37491bd91fe06b18b88613128950a11bb", + "reference": "38e821f37491bd91fe06b18b88613128950a11bb", "shasum": "" }, "require": { @@ -1064,6 +1071,7 @@ "require-dev": { "cpliakas/git-wrapper": "~2.0", "doctrine/inflector": "^1.3", + "ext-yaml": "*", "mockery/mockery": "^1.2", "phpstan/phpstan": "^0.12", "phpunit/phpunit": "^7.5", @@ -1102,7 +1110,11 @@ "elasticsearch", "search" ], - "time": "2020-06-18T19:23:29+00:00" + "support": { + "issues": "https://github.com/elastic/elasticsearch-php/issues", + "source": "https://github.com/elastic/elasticsearch-php/tree/v7.9.1" + }, + "time": "2020-10-06T13:03:50+00:00" }, { "name": "endclothing/prometheus_client_php", @@ -1147,6 +1159,10 @@ "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" }, { @@ -1197,6 +1213,9 @@ "Guzzle", "stream" ], + "support": { + "source": "https://github.com/ezimuel/guzzlestreams/tree/3.0.1" + }, "time": "2020-02-14T23:11:50+00:00" }, { @@ -1248,6 +1267,9 @@ } ], "description": "Fork of guzzle/RingPHP (abandoned) to be used with elasticsearch-php", + "support": { + "source": "https://github.com/ezimuel/ringphp/tree/1.1.2" + }, "time": "2020-02-14T23:51:21+00:00" }, { @@ -1315,27 +1337,31 @@ "rest", "web service" ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/6.5" + }, "time": "2020-06-16T21:01:06+00:00" }, { "name": "guzzlehttp/promises", - "version": "v1.3.1", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + "reference": "60d379c243457e073cff02bc323a2a86cb355631" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631", + "reference": "60d379c243457e073cff02bc323a2a86cb355631", "shasum": "" }, "require": { - "php": ">=5.5.0" + "php": ">=5.5" }, "require-dev": { - "phpunit/phpunit": "^4.0" + "symfony/phpunit-bridge": "^4.4 || ^5.1" }, "type": "library", "extra": { @@ -1366,20 +1392,24 @@ "keywords": [ "promise" ], - "time": "2016-12-20T10:07:11+00:00" + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.4.0" + }, + "time": "2020-09-30T07:37:28+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.6.1", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a" + "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3", + "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3", "shasum": "" }, "require": { @@ -1392,15 +1422,15 @@ }, "require-dev": { "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" }, "suggest": { - "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -1437,20 +1467,24 @@ "uri", "url" ], - "time": "2019-07-01T23:21:34+00:00" + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/1.7.0" + }, + "time": "2020-09-30T07:37:11+00:00" }, { "name": "lambdish/phunctional", - "version": "v2.0.1", + "version": "v2.1.0", "source": { "type": "git", "url": "https://github.com/Lambdish/phunctional.git", - "reference": "2e41ff9956b79c8764b74dfd25529c0601f8d9d1" + "reference": "ed3482e7da134d886789abb33c6df22a5d2f271c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Lambdish/phunctional/zipball/2e41ff9956b79c8764b74dfd25529c0601f8d9d1", - "reference": "2e41ff9956b79c8764b74dfd25529c0601f8d9d1", + "url": "https://api.github.com/repos/Lambdish/phunctional/zipball/ed3482e7da134d886789abb33c6df22a5d2f271c", + "reference": "ed3482e7da134d886789abb33c6df22a5d2f271c", "shasum": "" }, "require": { @@ -1489,7 +1523,11 @@ "library", "php" ], - "time": "2020-06-30T16:59:45+00:00" + "support": { + "issues": "https://github.com/Lambdish/phunctional/issues", + "source": "https://github.com/Lambdish/phunctional/tree/v2.1.0" + }, + "time": "2020-09-18T07:22:08+00:00" }, { "name": "laminas/laminas-code", @@ -1550,45 +1588,53 @@ "code", "laminas" ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-code/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-code/issues", + "rss": "https://github.com/laminas/laminas-code/releases.atom", + "source": "https://github.com/laminas/laminas-code" + }, "time": "2019-12-31T16:28:24+00:00" }, { "name": "laminas/laminas-eventmanager", - "version": "3.2.1", + "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-eventmanager.git", - "reference": "ce4dc0bdf3b14b7f9815775af9dfee80a63b4748" + "reference": "1940ccf30e058b2fd66f5a9d696f1b5e0027b082" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/ce4dc0bdf3b14b7f9815775af9dfee80a63b4748", - "reference": "ce4dc0bdf3b14b7f9815775af9dfee80a63b4748", + "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/1940ccf30e058b2fd66f5a9d696f1b5e0027b082", + "reference": "1940ccf30e058b2fd66f5a9d696f1b5e0027b082", "shasum": "" }, "require": { "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^5.6 || ^7.0" + "php": "^7.3 || ^8.0" }, "replace": { - "zendframework/zend-eventmanager": "self.version" + "zendframework/zend-eventmanager": "^3.2.1" }, "require-dev": { - "athletic/athletic": "^0.1", - "container-interop/container-interop": "^1.1.0", + "container-interop/container-interop": "^1.1", "laminas/laminas-coding-standard": "~1.0.0", "laminas/laminas-stdlib": "^2.7.3 || ^3.0", - "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2" + "phpbench/phpbench": "^0.17.1", + "phpunit/phpunit": "^8.5.8" }, "suggest": { - "container-interop/container-interop": "^1.1.0, to use the lazy listeners feature", + "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", "extra": { "branch-alias": { - "dev-master": "3.2-dev", - "dev-develop": "3.3-dev" + "dev-master": "3.3.x-dev", + "dev-develop": "3.4.x-dev" } }, "autoload": { @@ -1608,35 +1654,45 @@ "events", "laminas" ], - "time": "2019-12-31T16:44:52+00:00" + "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": "2020-08-25T11:10:44+00:00" }, { "name": "laminas/laminas-zendframework-bridge", - "version": "1.0.4", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/laminas/laminas-zendframework-bridge.git", - "reference": "fcd87520e4943d968557803919523772475e8ea3" + "reference": "6ede70583e101030bcace4dcddd648f760ddf642" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/fcd87520e4943d968557803919523772475e8ea3", - "reference": "fcd87520e4943d968557803919523772475e8ea3", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6ede70583e101030bcace4dcddd648f760ddf642", + "reference": "6ede70583e101030bcace4dcddd648f760ddf642", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^5.6 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1", + "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3", "squizlabs/php_codesniffer": "^3.5" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev", - "dev-develop": "1.1.x-dev" - }, "laminas": { "module": "Laminas\\ZendFrameworkBridge" } @@ -1660,26 +1716,32 @@ "laminas", "zf" ], + "support": { + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues", + "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom", + "source": "https://github.com/laminas/laminas-zendframework-bridge" + }, "funding": [ { "url": "https://funding.communitybridge.org/projects/laminas-project", "type": "community_bridge" } ], - "time": "2020-05-20T16:45:56+00:00" + "time": "2020-09-14T14:23:00+00:00" }, { "name": "monolog/monolog", - "version": "2.1.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "38914429aac460e8e4616c8cb486ecb40ec90bb1" + "reference": "f9eee5cec93dfb313a38b6b288741e84e53f02d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/38914429aac460e8e4616c8cb486ecb40ec90bb1", - "reference": "38914429aac460e8e4616c8cb486ecb40ec90bb1", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f9eee5cec93dfb313a38b6b288741e84e53f02d5", + "reference": "f9eee5cec93dfb313a38b6b288741e84e53f02d5", "shasum": "" }, "require": { @@ -1747,6 +1809,10 @@ "logging", "psr-3" ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.1.1" + }, "funding": [ { "url": "https://github.com/Seldaek", @@ -1757,104 +1823,43 @@ "type": "tidelift" } ], - "time": "2020-05-22T08:12:19+00:00" + "time": "2020-07-23T08:41:23+00:00" }, { - "name": "ocramius/package-versions", - "version": "1.9.0", + "name": "ocramius/proxy-manager", + "version": "2.8.1", "source": { "type": "git", - "url": "https://github.com/Ocramius/PackageVersions.git", - "reference": "94c9d42a466c57f91390cdd49c81313264f49d85" + "url": "https://github.com/Ocramius/ProxyManager.git", + "reference": "371c8f2d9d1e888ce1f8f2137d9187252b07ee94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/94c9d42a466c57f91390cdd49c81313264f49d85", - "reference": "94c9d42a466c57f91390cdd49c81313264f49d85", + "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/371c8f2d9d1e888ce1f8f2137d9187252b07ee94", + "reference": "371c8f2d9d1e888ce1f8f2137d9187252b07ee94", "shasum": "" }, "require": { - "composer-plugin-api": "^1.1.0 || ^2.0", - "php": "^7.4.0" + "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" + }, + "conflict": { + "doctrine/annotations": "<1.6.1", + "laminas/laminas-stdlib": "<3.2.1", + "zendframework/zend-stdlib": "<3.2.1" }, "require-dev": { - "composer/composer": "^1.9.3 || ^2.0@dev", - "doctrine/coding-standard": "^7.0.2", - "ext-zip": "^1.15.0", - "infection/infection": "^0.15.3", + "doctrine/coding-standard": "^6.0.0", + "ext-phar": "*", + "infection/infection": "^0.16.2", + "nikic/php-parser": "^4.4.0", + "phpbench/phpbench": "^0.17.0", "phpunit/phpunit": "^9.1.1", - "vimeo/psalm": "^3.9.3" - }, - "type": "composer-plugin", - "extra": { - "class": "PackageVersions\\Installer", - "branch-alias": { - "dev-master": "1.99.x-dev" - } - }, - "autoload": { - "psr-4": { - "PackageVersions\\": "src/PackageVersions" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", - "funding": [ - { - "url": "https://github.com/Ocramius", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ocramius/package-versions", - "type": "tidelift" - } - ], - "time": "2020-06-22T14:15:44+00:00" - }, - { - "name": "ocramius/proxy-manager", - "version": "2.8.1", - "source": { - "type": "git", - "url": "https://github.com/Ocramius/ProxyManager.git", - "reference": "371c8f2d9d1e888ce1f8f2137d9187252b07ee94" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/371c8f2d9d1e888ce1f8f2137d9187252b07ee94", - "reference": "371c8f2d9d1e888ce1f8f2137d9187252b07ee94", - "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" - }, - "conflict": { - "doctrine/annotations": "<1.6.1", - "laminas/laminas-stdlib": "<3.2.1", - "zendframework/zend-stdlib": "<3.2.1" - }, - "require-dev": { - "doctrine/coding-standard": "^6.0.0", - "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" + "slevomat/coding-standard": "^5.0.4", + "squizlabs/php_codesniffer": "^3.5.4", + "vimeo/psalm": "^3.11.1" }, "suggest": { "laminas/laminas-json": "To have the JsonRpc adapter (Remote Object feature)", @@ -1893,6 +1898,10 @@ "proxy pattern", "service proxies" ], + "support": { + "issues": "https://github.com/Ocramius/ProxyManager/issues", + "source": "https://github.com/Ocramius/ProxyManager/tree/2.8.1" + }, "funding": [ { "url": "https://github.com/Ocramius", @@ -1948,6 +1957,11 @@ "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" }, { @@ -1994,6 +2008,9 @@ "psr", "psr-6" ], + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, "time": "2016-08-06T20:24:11+00:00" }, { @@ -2043,6 +2060,10 @@ "container-interop", "psr" ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/master" + }, "time": "2017-02-14T16:28:37+00:00" }, { @@ -2089,6 +2110,10 @@ "psr", "psr-14" ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, "time": "2019-01-08T18:20:26+00:00" }, { @@ -2139,6 +2164,9 @@ "request", "response" ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, "time": "2016-08-06T14:39:51+00:00" }, { @@ -2186,6 +2214,9 @@ "psr", "psr-3" ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.3" + }, "time": "2020-03-23T09:12:05+00:00" }, { @@ -2226,6 +2257,10 @@ } ], "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" }, { @@ -2313,6 +2348,12 @@ "identifier", "uuid" ], + "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" + }, "time": "2020-02-21T04:36:14+00:00" }, { @@ -2359,20 +2400,24 @@ "promise", "promises" ], + "support": { + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v2.8.0" + }, "time": "2020-05-12T15:16:56+00:00" }, { "name": "symfony/amqp-messenger", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/amqp-messenger.git", - "reference": "f8bc975215edd516e25c9ea2b82a3026952bd8bc" + "reference": "8aa604498a40e48909266a0fddcbd3ea341623db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/amqp-messenger/zipball/f8bc975215edd516e25c9ea2b82a3026952bd8bc", - "reference": "f8bc975215edd516e25c9ea2b82a3026952bd8bc", + "url": "https://api.github.com/repos/symfony/amqp-messenger/zipball/8aa604498a40e48909266a0fddcbd3ea341623db", + "reference": "8aa604498a40e48909266a0fddcbd3ea341623db", "shasum": "" }, "require": { @@ -2386,11 +2431,6 @@ "symfony/serializer": "^4.4|^5.0" }, "type": "symfony-bridge", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Messenger\\Bridge\\Amqp\\": "" @@ -2415,6 +2455,9 @@ ], "description": "Symfony AMQP extension Messenger Bridge", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/amqp-messenger/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2429,33 +2472,33 @@ "type": "tidelift" } ], - "time": "2020-05-20T17:43:50+00:00" + "time": "2020-10-27T10:14:44+00:00" }, { "name": "symfony/cache", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "787eb05e137ad74fa5e51857b9884719760c7b2f" + "reference": "ce4bdd7a46d10298c23b2af8997b242de2a6dc55" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/787eb05e137ad74fa5e51857b9884719760c7b2f", - "reference": "787eb05e137ad74fa5e51857b9884719760c7b2f", + "url": "https://api.github.com/repos/symfony/cache/zipball/ce4bdd7a46d10298c23b2af8997b242de2a6dc55", + "reference": "ce4bdd7a46d10298c23b2af8997b242de2a6dc55", "shasum": "" }, "require": { "php": ">=7.2.5", "psr/cache": "~1.0", - "psr/log": "~1.0", + "psr/log": "^1.1", "symfony/cache-contracts": "^1.1.7|^2", "symfony/polyfill-php80": "^1.15", "symfony/service-contracts": "^1.1|^2", "symfony/var-exporter": "^4.4|^5.0" }, "conflict": { - "doctrine/dbal": "<2.5", + "doctrine/dbal": "<2.10", "symfony/dependency-injection": "<4.4", "symfony/http-kernel": "<4.4", "symfony/var-dumper": "<4.4" @@ -2468,19 +2511,16 @@ "require-dev": { "cache/integration-tests": "dev-master", "doctrine/cache": "^1.6", - "doctrine/dbal": "^2.5|^3.0", + "doctrine/dbal": "^2.10|^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/messenger": "^4.4|^5.0", "symfony/var-dumper": "^4.4|^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Cache\\": "" @@ -2509,6 +2549,9 @@ "caching", "psr6" ], + "support": { + "source": "https://github.com/symfony/cache/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2523,20 +2566,20 @@ "type": "tidelift" } ], - "time": "2020-06-09T14:15:34+00:00" + "time": "2020-11-02T08:16:52+00:00" }, { "name": "symfony/cache-contracts", - "version": "v2.1.3", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "9771a09d2e6b84ecb8c9f0a7dbc72ee92aeba009" + "reference": "8034ca0b61d4dd967f3698aaa1da2507b631d0cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/9771a09d2e6b84ecb8c9f0a7dbc72ee92aeba009", - "reference": "9771a09d2e6b84ecb8c9f0a7dbc72ee92aeba009", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/8034ca0b61d4dd967f3698aaa1da2507b631d0cb", + "reference": "8034ca0b61d4dd967f3698aaa1da2507b631d0cb", "shasum": "" }, "require": { @@ -2549,7 +2592,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.2-dev" }, "thanks": { "name": "symfony/contracts", @@ -2585,6 +2628,9 @@ "interoperability", "standards" ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v2.2.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2599,20 +2645,20 @@ "type": "tidelift" } ], - "time": "2020-07-06T13:23:11+00:00" + "time": "2020-09-07T11:33:47+00:00" }, { "name": "symfony/config", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "b8623ef3d99fe62a34baf7a111b576216965f880" + "reference": "e90f717c34788c11644478414c93fb766b669dc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/b8623ef3d99fe62a34baf7a111b576216965f880", - "reference": "b8623ef3d99fe62a34baf7a111b576216965f880", + "url": "https://api.github.com/repos/symfony/config/zipball/e90f717c34788c11644478414c93fb766b669dc4", + "reference": "e90f717c34788c11644478414c93fb766b669dc4", "shasum": "" }, "require": { @@ -2636,11 +2682,6 @@ "symfony/yaml": "To use the yaml reference dumper" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Config\\": "" @@ -2665,6 +2706,9 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2679,20 +2723,20 @@ "type": "tidelift" } ], - "time": "2020-05-23T13:08:13+00:00" + "time": "2020-10-28T21:46:03+00:00" }, { "name": "symfony/console", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "34ac555a3627e324b660e318daa07572e1140123" + "reference": "d1d8b8fd9b605630aa73b1b384e246fee54e8ffa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/34ac555a3627e324b660e318daa07572e1140123", - "reference": "34ac555a3627e324b660e318daa07572e1140123", + "url": "https://api.github.com/repos/symfony/console/zipball/d1d8b8fd9b605630aa73b1b384e246fee54e8ffa", + "reference": "d1d8b8fd9b605630aa73b1b384e246fee54e8ffa", "shasum": "" }, "require": { @@ -2729,11 +2773,6 @@ "symfony/process": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Console\\": "" @@ -2758,6 +2797,15 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2772,20 +2820,20 @@ "type": "tidelift" } ], - "time": "2020-06-15T12:59:21+00:00" + "time": "2020-11-05T20:05:54+00:00" }, { "name": "symfony/dependency-injection", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "6508423eded583fc07e88a0172803e1a62f0310c" + "reference": "ff71914efb285cfe375dbfa12b79a779b89be1dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/6508423eded583fc07e88a0172803e1a62f0310c", - "reference": "6508423eded583fc07e88a0172803e1a62f0310c", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ff71914efb285cfe375dbfa12b79a779b89be1dc", + "reference": "ff71914efb285cfe375dbfa12b79a779b89be1dc", "shasum": "" }, "require": { @@ -2818,11 +2866,6 @@ "symfony/yaml": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\DependencyInjection\\": "" @@ -2847,6 +2890,9 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dependency-injection/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2861,20 +2907,20 @@ "type": "tidelift" } ], - "time": "2020-06-12T08:11:32+00:00" + "time": "2020-11-09T12:21:52+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.1.3", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5e20b83385a77593259c9f8beb2c43cd03b2ac14" + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5e20b83385a77593259c9f8beb2c43cd03b2ac14", - "reference": "5e20b83385a77593259c9f8beb2c43cd03b2ac14", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", "shasum": "" }, "require": { @@ -2883,7 +2929,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.2-dev" }, "thanks": { "name": "symfony/contracts", @@ -2911,6 +2957,9 @@ ], "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/master" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2925,20 +2974,20 @@ "type": "tidelift" } ], - "time": "2020-06-06T08:49:21+00:00" + "time": "2020-09-07T11:33:47+00:00" }, { "name": "symfony/doctrine-messenger", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-messenger.git", - "reference": "a928616ec539355fdd57ad92216e4ebd95e05566" + "reference": "078588b495c7137bdbb3b118b3ee5a46144d4126" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/a928616ec539355fdd57ad92216e4ebd95e05566", - "reference": "a928616ec539355fdd57ad92216e4ebd95e05566", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/078588b495c7137bdbb3b118b3ee5a46144d4126", + "reference": "078588b495c7137bdbb3b118b3ee5a46144d4126", "shasum": "" }, "require": { @@ -2947,20 +2996,16 @@ "symfony/service-contracts": "^1.1|^2" }, "conflict": { + "doctrine/dbal": "<2.10", "doctrine/persistence": "<1.3" }, "require-dev": { - "doctrine/dbal": "^2.6|^3.0", - "doctrine/persistence": "^1.3", + "doctrine/dbal": "^2.10|^3.0", + "doctrine/persistence": "^1.3|^2", "symfony/property-access": "^4.4|^5.0", "symfony/serializer": "^4.4|^5.0" }, "type": "symfony-bridge", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Messenger\\Bridge\\Doctrine\\": "" @@ -2985,6 +3030,9 @@ ], "description": "Symfony Doctrine Messenger Bridge", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/doctrine-messenger/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2999,20 +3047,20 @@ "type": "tidelift" } ], - "time": "2020-06-09T14:24:29+00:00" + "time": "2020-11-07T16:24:48+00:00" }, { "name": "symfony/dotenv", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "42d2a18597f4c7cafc0e25b1ad6a1cbb4f2caf05" + "reference": "29ac2a3e538da61780a769827c716738ce7accbb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/42d2a18597f4c7cafc0e25b1ad6a1cbb4f2caf05", - "reference": "42d2a18597f4c7cafc0e25b1ad6a1cbb4f2caf05", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/29ac2a3e538da61780a769827c716738ce7accbb", + "reference": "29ac2a3e538da61780a769827c716738ce7accbb", "shasum": "" }, "require": { @@ -3023,11 +3071,6 @@ "symfony/process": "^4.4|^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Dotenv\\": "" @@ -3057,6 +3100,9 @@ "env", "environment" ], + "support": { + "source": "https://github.com/symfony/dotenv/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3071,20 +3117,20 @@ "type": "tidelift" } ], - "time": "2020-05-28T08:20:44+00:00" + "time": "2020-10-24T12:01:57+00:00" }, { "name": "symfony/error-handler", - "version": "v5.1.5", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "525636d4b84e06c6ca72d96b6856b5b169416e6a" + "reference": "289008c5be039e39908d33ae0a8ac99be1210bba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/525636d4b84e06c6ca72d96b6856b5b169416e6a", - "reference": "525636d4b84e06c6ca72d96b6856b5b169416e6a", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/289008c5be039e39908d33ae0a8ac99be1210bba", + "reference": "289008c5be039e39908d33ae0a8ac99be1210bba", "shasum": "" }, "require": { @@ -3099,11 +3145,6 @@ "symfony/serializer": "^4.4|^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\ErrorHandler\\": "" @@ -3128,6 +3169,9 @@ ], "description": "Symfony ErrorHandler Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3142,20 +3186,20 @@ "type": "tidelift" } ], - "time": "2020-08-17T10:01:29+00:00" + "time": "2020-10-28T21:46:03+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.1.5", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "94871fc0a69c3c5da57764187724cdce0755899c" + "reference": "aa13a09811e6d2ad43f8fb336bebdb7691d85d3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/94871fc0a69c3c5da57764187724cdce0755899c", - "reference": "94871fc0a69c3c5da57764187724cdce0755899c", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/aa13a09811e6d2ad43f8fb336bebdb7691d85d3c", + "reference": "aa13a09811e6d2ad43f8fb336bebdb7691d85d3c", "shasum": "" }, "require": { @@ -3175,6 +3219,7 @@ "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", @@ -3185,11 +3230,6 @@ "symfony/http-kernel": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\EventDispatcher\\": "" @@ -3214,6 +3254,9 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3228,20 +3271,20 @@ "type": "tidelift" } ], - "time": "2020-08-13T14:19:42+00:00" + "time": "2020-11-01T16:14:45+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.1.3", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "f6f613d74cfc5a623fc36294d3451eb7fa5a042b" + "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f6f613d74cfc5a623fc36294d3451eb7fa5a042b", - "reference": "f6f613d74cfc5a623fc36294d3451eb7fa5a042b", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ba7d54483095a198fa51781bc608d17e84dffa2", + "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2", "shasum": "" }, "require": { @@ -3254,7 +3297,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.2-dev" }, "thanks": { "name": "symfony/contracts", @@ -3290,6 +3333,9 @@ "interoperability", "standards" ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.2.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3304,20 +3350,20 @@ "type": "tidelift" } ], - "time": "2020-07-06T13:23:11+00:00" + "time": "2020-09-07T11:33:47+00:00" }, { "name": "symfony/filesystem", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "6e4320f06d5f2cce0d96530162491f4465179157" + "reference": "4326782dcccf8aa873b26999e36c6c71c8d3404b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/6e4320f06d5f2cce0d96530162491f4465179157", - "reference": "6e4320f06d5f2cce0d96530162491f4465179157", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/4326782dcccf8aa873b26999e36c6c71c8d3404b", + "reference": "4326782dcccf8aa873b26999e36c6c71c8d3404b", "shasum": "" }, "require": { @@ -3325,11 +3371,6 @@ "symfony/polyfill-ctype": "~1.8" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Filesystem\\": "" @@ -3354,6 +3395,9 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3368,31 +3412,26 @@ "type": "tidelift" } ], - "time": "2020-05-30T20:35:19+00:00" + "time": "2020-10-28T21:33:29+00:00" }, { "name": "symfony/finder", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187" + "reference": "19de51f4fd1cb88ba4d8d9a8c39d79cca7f11577" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/4298870062bfc667cb78d2b379be4bf5dec5f187", - "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187", + "url": "https://api.github.com/repos/symfony/finder/zipball/19de51f4fd1cb88ba4d8d9a8c39d79cca7f11577", + "reference": "19de51f4fd1cb88ba4d8d9a8c39d79cca7f11577", "shasum": "" }, "require": { "php": ">=7.2.5" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Finder\\": "" @@ -3417,6 +3456,9 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3431,37 +3473,37 @@ "type": "tidelift" } ], - "time": "2020-05-20T17:43:50+00:00" + "time": "2020-11-02T07:55:38+00:00" }, { "name": "symfony/framework-bundle", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "d9a85deaa9c7a10df087d86f6a689eb5d4db0abc" + "reference": "1d242be298a163545ea5aac0761e9475f2f28a5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/d9a85deaa9c7a10df087d86f6a689eb5d4db0abc", - "reference": "d9a85deaa9c7a10df087d86f6a689eb5d4db0abc", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/1d242be298a163545ea5aac0761e9475f2f28a5f", + "reference": "1d242be298a163545ea5aac0761e9475f2f28a5f", "shasum": "" }, "require": { "ext-xml": "*", "php": ">=7.2.5", - "symfony/cache": "^4.4|^5.0", + "symfony/cache": "^5.2", "symfony/config": "^5.0", - "symfony/dependency-injection": "^5.1", + "symfony/dependency-injection": "^5.2", "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": "^4.4|^5.0", - "symfony/http-kernel": "^5.0", + "symfony/http-foundation": "^5.2", + "symfony/http-kernel": "^5.2", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php80": "^1.15", - "symfony/routing": "^5.1" + "symfony/routing": "^5.2" }, "conflict": { "doctrine/persistence": "<1.3", @@ -3470,42 +3512,43 @@ "phpunit/phpunit": "<5.4.3", "symfony/asset": "<5.1", "symfony/browser-kit": "<4.4", - "symfony/console": "<4.4", + "symfony/console": "<5.2", "symfony/dom-crawler": "<4.4", "symfony/dotenv": "<5.1", - "symfony/form": "<4.4", + "symfony/form": "<5.2", "symfony/http-client": "<4.4", "symfony/lock": "<4.4", - "symfony/mailer": "<4.4", + "symfony/mailer": "<5.2", "symfony/messenger": "<4.4", "symfony/mime": "<4.4", + "symfony/property-access": "<5.2", "symfony/property-info": "<4.4", - "symfony/serializer": "<4.4", + "symfony/serializer": "<5.2", "symfony/stopwatch": "<4.4", "symfony/translation": "<5.0", "symfony/twig-bridge": "<4.4", "symfony/twig-bundle": "<4.4", - "symfony/validator": "<4.4", + "symfony/validator": "<5.2", "symfony/web-profiler-bundle": "<4.4", - "symfony/workflow": "<4.4" + "symfony/workflow": "<5.2" }, "require-dev": { "doctrine/annotations": "~1.7", "doctrine/cache": "~1.0", "paragonie/sodium_compat": "^1.8", - "phpdocumentor/reflection-docblock": "^3.0|^4.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "symfony/asset": "^5.1", "symfony/browser-kit": "^4.4|^5.0", - "symfony/console": "^4.4|^5.0", + "symfony/console": "^5.2", "symfony/css-selector": "^4.4|^5.0", "symfony/dom-crawler": "^4.4|^5.0", "symfony/dotenv": "^5.1", "symfony/expression-language": "^4.4|^5.0", - "symfony/form": "^4.4|^5.0", + "symfony/form": "^5.2", "symfony/http-client": "^4.4|^5.0", "symfony/lock": "^4.4|^5.0", - "symfony/mailer": "^4.4|^5.0", - "symfony/messenger": "^4.4|^5.0", + "symfony/mailer": "^5.2", + "symfony/messenger": "^5.2", "symfony/mime": "^4.4|^5.0", "symfony/polyfill-intl-icu": "~1.0", "symfony/process": "^4.4|^5.0", @@ -3513,14 +3556,14 @@ "symfony/security-bundle": "^5.1", "symfony/security-csrf": "^4.4|^5.0", "symfony/security-http": "^4.4|^5.0", - "symfony/serializer": "^4.4|^5.0", + "symfony/serializer": "^5.2", "symfony/stopwatch": "^4.4|^5.0", "symfony/string": "^5.0", "symfony/translation": "^5.0", "symfony/twig-bundle": "^4.4|^5.0", - "symfony/validator": "^4.4|^5.0", + "symfony/validator": "^5.2", "symfony/web-link": "^4.4|^5.0", - "symfony/workflow": "^4.4|^5.0", + "symfony/workflow": "^5.2", "symfony/yaml": "^4.4|^5.0", "twig/twig": "^2.10|^3.0" }, @@ -3535,11 +3578,6 @@ "symfony/yaml": "For using the debug:config and lint:yaml commands" }, "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Bundle\\FrameworkBundle\\": "" @@ -3564,6 +3602,9 @@ ], "description": "Symfony FrameworkBundle", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/framework-bundle/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3578,20 +3619,99 @@ "type": "tidelift" } ], - "time": "2020-06-12T08:11:32+00:00" + "time": "2020-11-07T21:48:53+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v2.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "41db680a15018f9c1d4b23516059633ce280ca33" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/41db680a15018f9c1d4b23516059633ce280ca33", + "reference": "41db680a15018f9c1d4b23516059633ce280ca33", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/http-client-implementation": "" + }, + "type": "library", + "extra": { + "branch-version": "2.3", + "branch-alias": { + "dev-main": "2.3-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.3.1" + }, + "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": "2020-10-14T17:08:19+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.1.5", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "41a4647f12870e9d41d9a7d72ff0614a27208558" + "reference": "46ff6a7c7a747cf87ca4ca2701048c6adc9c29de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/41a4647f12870e9d41d9a7d72ff0614a27208558", - "reference": "41a4647f12870e9d41d9a7d72ff0614a27208558", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/46ff6a7c7a747cf87ca4ca2701048c6adc9c29de", + "reference": "46ff6a7c7a747cf87ca4ca2701048c6adc9c29de", "shasum": "" }, "require": { @@ -3610,11 +3730,6 @@ "symfony/mime": "To use the file extension guesser" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\HttpFoundation\\": "" @@ -3639,6 +3754,9 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3653,20 +3771,20 @@ "type": "tidelift" } ], - "time": "2020-08-17T07:48:54+00:00" + "time": "2020-11-02T16:16:33+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.1.5", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "3e32676e6cb5d2081c91a56783471ff8a7f7110b" + "reference": "e8136e599847130f54ff70e47fc9e5070bc4860b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3e32676e6cb5d2081c91a56783471ff8a7f7110b", - "reference": "3e32676e6cb5d2081c91a56783471ff8a7f7110b", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/e8136e599847130f54ff70e47fc9e5070bc4860b", + "reference": "e8136e599847130f54ff70e47fc9e5070bc4860b", "shasum": "" }, "require": { @@ -3675,6 +3793,7 @@ "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": "^4.4|^5.0", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-php73": "^1.9", @@ -3685,7 +3804,7 @@ "symfony/cache": "<5.0", "symfony/config": "<5.0", "symfony/console": "<4.4", - "symfony/dependency-injection": "<4.4", + "symfony/dependency-injection": "<5.1.8", "symfony/doctrine-bridge": "<5.0", "symfony/form": "<5.0", "symfony/http-client": "<5.0", @@ -3705,7 +3824,7 @@ "symfony/config": "^5.0", "symfony/console": "^4.4|^5.0", "symfony/css-selector": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", + "symfony/dependency-injection": "^5.1.8", "symfony/dom-crawler": "^4.4|^5.0", "symfony/expression-language": "^4.4|^5.0", "symfony/finder": "^4.4|^5.0", @@ -3723,11 +3842,6 @@ "symfony/dependency-injection": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\HttpKernel\\": "" @@ -3752,6 +3866,9 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3766,20 +3883,20 @@ "type": "tidelift" } ], - "time": "2020-09-02T08:15:18+00:00" + "time": "2020-11-10T07:54:37+00:00" }, { "name": "symfony/messenger", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/messenger.git", - "reference": "4e668843aee9f035baaefbac6961a52d2b293928" + "reference": "ae14385879e5b14d5dae94d5b30502a617ef6b06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/messenger/zipball/4e668843aee9f035baaefbac6961a52d2b293928", - "reference": "4e668843aee9f035baaefbac6961a52d2b293928", + "url": "https://api.github.com/repos/symfony/messenger/zipball/ae14385879e5b14d5dae94d5b30502a617ef6b06", + "reference": "ae14385879e5b14d5dae94d5b30502a617ef6b06", "shasum": "" }, "require": { @@ -3813,11 +3930,6 @@ "enqueue/messenger-adapter": "For using the php-enqueue library as a transport." }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Messenger\\": "" @@ -3842,6 +3954,9 @@ ], "description": "Symfony Messenger Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/messenger/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3856,29 +3971,29 @@ "type": "tidelift" } ], - "time": "2020-05-24T08:49:09+00:00" + "time": "2020-11-10T06:17:22+00:00" }, { "name": "symfony/polyfill-apcu", - "version": "v1.18.0", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-apcu.git", - "reference": "f1d94a98e364f4b84252331a40cb7987b847e241" + "reference": "f5191eb0e98e08d12eb49fc0ed0820e37de89fdf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/f1d94a98e364f4b84252331a40cb7987b847e241", - "reference": "f1d94a98e364f4b84252331a40cb7987b847e241", + "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/f5191eb0e98e08d12eb49fc0ed0820e37de89fdf", + "reference": "f5191eb0e98e08d12eb49fc0ed0820e37de89fdf", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.20-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3916,6 +4031,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-apcu/tree/v1.20.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -3930,24 +4048,24 @@ "type": "tidelift" } ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.18.1", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "1c302646f6efc070cd46856e600e5e0684d6b454" + "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454", - "reference": "1c302646f6efc070cd46856e600e5e0684d6b454", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41", + "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "suggest": { "ext-ctype": "For best performance" @@ -3955,7 +4073,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.20-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3992,6 +4110,9 @@ "polyfill", "portable" ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.20.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -4006,24 +4127,24 @@ "type": "tidelift" } ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.18.0", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "b740103edbdcc39602239ee8860f0f45a8eb9aa5" + "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b740103edbdcc39602239ee8860f0f45a8eb9aa5", - "reference": "b740103edbdcc39602239ee8860f0f45a8eb9aa5", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", + "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "suggest": { "ext-intl": "For best performance" @@ -4031,7 +4152,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.20-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4070,6 +4191,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.20.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -4084,26 +4208,25 @@ "type": "tidelift" } ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.18.0", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "bc6549d068d0160e0f10f7a5a23c7d1406b95ebe" + "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/bc6549d068d0160e0f10f7a5a23c7d1406b95ebe", - "reference": "bc6549d068d0160e0f10f7a5a23c7d1406b95ebe", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3b75acd829741c768bc8b1f84eb33265e7cc5117", + "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117", "shasum": "" }, "require": { - "php": ">=5.3.3", + "php": ">=7.1", "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php70": "^1.10", "symfony/polyfill-php72": "^1.10" }, "suggest": { @@ -4112,7 +4235,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.20-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4155,87 +4278,9 @@ "portable", "shim" ], - "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": "2020-07-14T12:35:20+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.18.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", - "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.18-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.20.0" }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], "funding": [ { "url": "https://symfony.com/sponsor", @@ -4250,32 +4295,32 @@ "type": "tidelift" } ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.18.1", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.20.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "727d1096295d807c309fb01a851577302394c897" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a", - "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/727d1096295d807c309fb01a851577302394c897", + "reference": "727d1096295d807c309fb01a851577302394c897", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "suggest": { - "ext-mbstring": "For best performance" + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.20-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4284,10 +4329,13 @@ }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" }, "files": [ "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4304,15 +4352,19 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Mbstring extension", + "description": "Symfony polyfill for intl's Normalizer class and related functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "mbstring", + "intl", + "normalizer", "polyfill", "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.20.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -4327,30 +4379,32 @@ "type": "tidelift" } ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { - "name": "symfony/polyfill-php70", - "version": "v1.18.0", + "name": "symfony/polyfill-mbstring", + "version": "v1.20.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "39d483bdf39be819deabf04ec872eb0b2410b531" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", - "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531", + "reference": "39d483bdf39be819deabf04ec872eb0b2410b531", "shasum": "" }, "require": { - "paragonie/random_compat": "~1.0|~2.0|~9.99", - "php": ">=5.3.3" + "php": ">=7.1" + }, + "suggest": { + "ext-mbstring": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.20-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4359,13 +4413,10 @@ }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php70\\": "" + "Symfony\\Polyfill\\Mbstring\\": "" }, "files": [ "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4382,14 +4433,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "description": "Symfony polyfill for the Mbstring extension", "homepage": "https://symfony.com", "keywords": [ "compatibility", + "mbstring", "polyfill", "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.20.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -4404,29 +4459,29 @@ "type": "tidelift" } ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.18.0", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "639447d008615574653fb3bc60d1986d7172eaae" + "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/639447d008615574653fb3bc60d1986d7172eaae", - "reference": "639447d008615574653fb3bc60d1986d7172eaae", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cede45fcdfabdd6043b3592e83678e42ec69e930", + "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.20-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4463,6 +4518,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.20.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -4477,29 +4535,29 @@ "type": "tidelift" } ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.18.1", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca" + "reference": "8ff431c517be11c78c48a39a66d37431e26a6bed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca", - "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/8ff431c517be11c78c48a39a66d37431e26a6bed", + "reference": "8ff431c517be11c78c48a39a66d37431e26a6bed", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.20-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4539,6 +4597,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.20.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -4553,29 +4614,29 @@ "type": "tidelift" } ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.18.1", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981" + "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981", - "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de", + "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de", "shasum": "" }, "require": { - "php": ">=7.0.8" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.20-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4619,6 +4680,9 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.20.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -4633,20 +4697,20 @@ "type": "tidelift" } ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { "name": "symfony/redis-messenger", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/redis-messenger.git", - "reference": "d37c6a267d79b0e0dff5e2b96c5f07886353d7a2" + "reference": "8a827544bd0536a6097006e178bc6e2c5873aad1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/redis-messenger/zipball/d37c6a267d79b0e0dff5e2b96c5f07886353d7a2", - "reference": "d37c6a267d79b0e0dff5e2b96c5f07886353d7a2", + "url": "https://api.github.com/repos/symfony/redis-messenger/zipball/8a827544bd0536a6097006e178bc6e2c5873aad1", + "reference": "8a827544bd0536a6097006e178bc6e2c5873aad1", "shasum": "" }, "require": { @@ -4658,11 +4722,6 @@ "symfony/serializer": "^4.4|^5.0" }, "type": "symfony-bridge", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Messenger\\Bridge\\Redis\\": "" @@ -4687,6 +4746,9 @@ ], "description": "Symfony Redis extension Messenger Bridge", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/redis-messenger/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -4701,20 +4763,20 @@ "type": "tidelift" } ], - "time": "2020-05-20T17:43:50+00:00" + "time": "2020-10-24T12:08:07+00:00" }, { "name": "symfony/routing", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "bbd0ba121d623f66d165a55a108008968911f3eb" + "reference": "1e6197621f53ebc807db00892194ca5d816c1f3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/bbd0ba121d623f66d165a55a108008968911f3eb", - "reference": "bbd0ba121d623f66d165a55a108008968911f3eb", + "url": "https://api.github.com/repos/symfony/routing/zipball/1e6197621f53ebc807db00892194ca5d816c1f3e", + "reference": "1e6197621f53ebc807db00892194ca5d816c1f3e", "shasum": "" }, "require": { @@ -4728,7 +4790,7 @@ "symfony/yaml": "<4.4" }, "require-dev": { - "doctrine/annotations": "~1.2", + "doctrine/annotations": "^1.7", "psr/log": "~1.0", "symfony/config": "^5.0", "symfony/dependency-injection": "^4.4|^5.0", @@ -4744,11 +4806,6 @@ "symfony/yaml": "For using the YAML loader" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Routing\\": "" @@ -4779,6 +4836,9 @@ "uri", "url" ], + "support": { + "source": "https://github.com/symfony/routing/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -4793,20 +4853,20 @@ "type": "tidelift" } ], - "time": "2020-06-10T11:49:58+00:00" + "time": "2020-10-28T21:46:03+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.1.3", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442" + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/58c7475e5457c5492c26cc740cc0ad7464be9442", - "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", "shasum": "" }, "require": { @@ -4819,7 +4879,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.2-dev" }, "thanks": { "name": "symfony/contracts", @@ -4855,6 +4915,9 @@ "interoperability", "standards" ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/master" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -4869,20 +4932,20 @@ "type": "tidelift" } ], - "time": "2020-07-06T13:23:11+00:00" + "time": "2020-09-07T11:33:47+00:00" }, { "name": "symfony/string", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "ac70459db781108db7c6d8981dd31ce0e29e3298" + "reference": "40e975edadd4e32cd16f3753b3bad65d9ac48242" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/ac70459db781108db7c6d8981dd31ce0e29e3298", - "reference": "ac70459db781108db7c6d8981dd31ce0e29e3298", + "url": "https://api.github.com/repos/symfony/string/zipball/40e975edadd4e32cd16f3753b3bad65d9ac48242", + "reference": "40e975edadd4e32cd16f3753b3bad65d9ac48242", "shasum": "" }, "require": { @@ -4900,11 +4963,6 @@ "symfony/var-exporter": "^4.4|^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\String\\": "" @@ -4940,6 +4998,9 @@ "utf-8", "utf8" ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -4954,20 +5015,20 @@ "type": "tidelift" } ], - "time": "2020-06-11T12:16:36+00:00" + "time": "2020-10-24T12:08:07+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.1.3", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "616a9773c853097607cf9dd6577d5b143ffdcd63" + "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/616a9773c853097607cf9dd6577d5b143ffdcd63", - "reference": "616a9773c853097607cf9dd6577d5b143ffdcd63", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e2eaa60b558f26a4b0354e1bbb25636efaaad105", + "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105", "shasum": "" }, "require": { @@ -4979,7 +5040,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -5015,6 +5076,9 @@ "interoperability", "standards" ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v2.3.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5029,20 +5093,20 @@ "type": "tidelift" } ], - "time": "2020-07-06T13:23:11+00:00" + "time": "2020-09-28T13:05:58+00:00" }, { "name": "symfony/twig-bridge", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "04f57638e591b23d06f72dca2f123605dbbe3a75" + "reference": "8daf9ed41c9fbd075d437c5c7ffaf46c5ab67f8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/04f57638e591b23d06f72dca2f123605dbbe3a75", - "reference": "04f57638e591b23d06f72dca2f123605dbbe3a75", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/8daf9ed41c9fbd075d437c5c7ffaf46c5ab67f8a", + "reference": "8daf9ed41c9fbd075d437c5c7ffaf46c5ab67f8a", "shasum": "" }, "require": { @@ -5056,11 +5120,12 @@ "symfony/form": "<5.1", "symfony/http-foundation": "<4.4", "symfony/http-kernel": "<4.4", - "symfony/translation": "<5.0", - "symfony/workflow": "<4.4" + "symfony/translation": "<5.2", + "symfony/workflow": "<5.2" }, "require-dev": { "egulias/email-validator": "^2.1.10", + "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", @@ -5069,17 +5134,19 @@ "symfony/form": "^5.1", "symfony/http-foundation": "^4.4|^5.0", "symfony/http-kernel": "^4.4|^5.0", - "symfony/mime": "^4.4|^5.0", + "symfony/mime": "^5.2", "symfony/polyfill-intl-icu": "~1.0", + "symfony/property-info": "^4.4|^5.1", "symfony/routing": "^4.4|^5.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.0", + "symfony/translation": "^5.2", "symfony/web-link": "^4.4|^5.0", - "symfony/workflow": "^4.4|^5.0", + "symfony/workflow": "^5.2", "symfony/yaml": "^4.4|^5.0", "twig/cssinliner-extra": "^2.12", "twig/inky-extra": "^2.12", @@ -5102,11 +5169,6 @@ "symfony/yaml": "For using the YamlExtension" }, "type": "symfony-bridge", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Bridge\\Twig\\": "" @@ -5131,6 +5193,9 @@ ], "description": "Symfony Twig Bridge", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bridge/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5145,20 +5210,20 @@ "type": "tidelift" } ], - "time": "2020-05-30T20:35:19+00:00" + "time": "2020-10-28T21:46:03+00:00" }, { "name": "symfony/twig-bundle", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "8898ef8aea8fa48638e15ce00c7c6318ce570ce1" + "reference": "954b642ce585c7f20795f30aba53eb27eeb1a91f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/8898ef8aea8fa48638e15ce00c7c6318ce570ce1", - "reference": "8898ef8aea8fa48638e15ce00c7c6318ce570ce1", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/954b642ce585c7f20795f30aba53eb27eeb1a91f", + "reference": "954b642ce585c7f20795f30aba53eb27eeb1a91f", "shasum": "" }, "require": { @@ -5171,7 +5236,7 @@ "twig/twig": "^2.10|^3.0" }, "conflict": { - "symfony/dependency-injection": "<4.4", + "symfony/dependency-injection": "<5.2", "symfony/framework-bundle": "<5.0", "symfony/translation": "<5.0" }, @@ -5179,7 +5244,7 @@ "doctrine/annotations": "~1.7", "doctrine/cache": "~1.0", "symfony/asset": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", + "symfony/dependency-injection": "^5.2", "symfony/expression-language": "^4.4|^5.0", "symfony/finder": "^4.4|^5.0", "symfony/form": "^4.4|^5.0", @@ -5191,11 +5256,6 @@ "symfony/yaml": "^4.4|^5.0" }, "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Bundle\\TwigBundle\\": "" @@ -5220,6 +5280,9 @@ ], "description": "Symfony TwigBundle", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bundle/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5234,26 +5297,28 @@ "type": "tidelift" } ], - "time": "2020-05-20T17:43:50+00:00" + "time": "2020-10-24T12:08:07+00:00" }, { "name": "symfony/validator", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "5e80f314a2faff6fb97942526e27c528b10acdb8" + "reference": "d66cfc3879bfac6743e146c0b4522e7eb485eb72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/5e80f314a2faff6fb97942526e27c528b10acdb8", - "reference": "5e80f314a2faff6fb97942526e27c528b10acdb8", + "url": "https://api.github.com/repos/symfony/validator/zipball/d66cfc3879bfac6743e146c0b4522e7eb485eb72", + "reference": "d66cfc3879bfac6743e146c0b4522e7eb485eb72", "shasum": "" }, "require": { "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", "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" }, @@ -5273,8 +5338,10 @@ "egulias/email-validator": "^2.1.10", "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", @@ -5300,11 +5367,6 @@ "symfony/yaml": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Validator\\": "" @@ -5329,6 +5391,9 @@ ], "description": "Symfony Validator Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/validator/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5343,20 +5408,20 @@ "type": "tidelift" } ], - "time": "2020-06-02T08:42:14+00:00" + "time": "2020-11-07T21:48:53+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.1.5", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "b43a3905262bcf97b2510f0621f859ca4f5287be" + "reference": "b75af2fd53fbf718b45add928e80db0b5af560f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b43a3905262bcf97b2510f0621f859ca4f5287be", - "reference": "b43a3905262bcf97b2510f0621f859ca4f5287be", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b75af2fd53fbf718b45add928e80db0b5af560f9", + "reference": "b75af2fd53fbf718b45add928e80db0b5af560f9", "shasum": "" }, "require": { @@ -5383,11 +5448,6 @@ "Resources/bin/var-dump-server" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "files": [ "Resources/functions/dump.php" @@ -5419,6 +5479,9 @@ "debug", "dump" ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5433,20 +5496,20 @@ "type": "tidelift" } ], - "time": "2020-08-17T07:42:30+00:00" + "time": "2020-10-28T21:46:03+00:00" }, { "name": "symfony/var-exporter", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "eabaabfe1485ca955c5b53307eade15ccda57a15" + "reference": "fbc3507f23d263d75417e09a12d77c009f39676c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/eabaabfe1485ca955c5b53307eade15ccda57a15", - "reference": "eabaabfe1485ca955c5b53307eade15ccda57a15", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/fbc3507f23d263d75417e09a12d77c009f39676c", + "reference": "fbc3507f23d263d75417e09a12d77c009f39676c", "shasum": "" }, "require": { @@ -5457,11 +5520,6 @@ "symfony/var-dumper": "^4.4.9|^5.0.9" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\VarExporter\\": "" @@ -5494,6 +5552,9 @@ "instantiate", "serialize" ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5508,20 +5569,20 @@ "type": "tidelift" } ], - "time": "2020-06-07T15:42:22+00:00" + "time": "2020-10-28T21:31:18+00:00" }, { "name": "symfony/yaml", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "ea342353a3ef4f453809acc4ebc55382231d4d23" + "reference": "f284e032c3cefefb9943792132251b79a6127ca6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/ea342353a3ef4f453809acc4ebc55382231d4d23", - "reference": "ea342353a3ef4f453809acc4ebc55382231d4d23", + "url": "https://api.github.com/repos/symfony/yaml/zipball/f284e032c3cefefb9943792132251b79a6127ca6", + "reference": "f284e032c3cefefb9943792132251b79a6127ca6", "shasum": "" }, "require": { @@ -5542,11 +5603,6 @@ "Resources/bin/yaml-lint" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Yaml\\": "" @@ -5571,6 +5627,9 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -5585,20 +5644,20 @@ "type": "tidelift" } ], - "time": "2020-05-20T17:43:50+00:00" + "time": "2020-10-24T12:03:25+00:00" }, { "name": "twig/twig", - "version": "v3.0.4", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "582bdbdc173027ebfba3c93dc750a40b8f9ebc02" + "reference": "b02fa41f3783a2616eccef7b92fbc2343ffed737" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/582bdbdc173027ebfba3c93dc750a40b8f9ebc02", - "reference": "582bdbdc173027ebfba3c93dc750a40b8f9ebc02", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/b02fa41f3783a2616eccef7b92fbc2343ffed737", + "reference": "b02fa41f3783a2616eccef7b92fbc2343ffed737", "shasum": "" }, "require": { @@ -5613,7 +5672,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -5647,19 +5706,11 @@ "keywords": [ "templating" ], + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.1.1" + }, "funding": [ - { - "url": "https://certification.symfony.com/", - "type": "custom" - }, - { - "url": "https://live.symfony.com/", - "type": "custom" - }, - { - "url": "https://symfony.com/cloud/", - "type": "custom" - }, { "url": "https://github.com/fabpot", "type": "github" @@ -5669,34 +5720,35 @@ "type": "tidelift" } ], - "time": "2020-07-05T13:18:14+00:00" + "time": "2020-10-27T19:28:23+00:00" }, { "name": "webimpress/safe-writer", - "version": "2.0.1", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/webimpress/safe-writer.git", - "reference": "d6e879960febb307c112538997316371f1e95b12" + "reference": "5cfafdec5873c389036f14bf832a5efc9390dcdd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webimpress/safe-writer/zipball/d6e879960febb307c112538997316371f1e95b12", - "reference": "d6e879960febb307c112538997316371f1e95b12", + "url": "https://api.github.com/repos/webimpress/safe-writer/zipball/5cfafdec5873c389036f14bf832a5efc9390dcdd", + "reference": "5cfafdec5873c389036f14bf832a5efc9390dcdd", "shasum": "" }, "require": { - "php": "^7.2" + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^8.5.2 || ^9.0.1", - "webimpress/coding-standard": "^1.1.4" + "phpunit/phpunit": "^8.5.8 || ^9.3.7", + "vimeo/psalm": "^3.14.2", + "webimpress/coding-standard": "^1.1.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev", - "dev-develop": "2.1.x-dev", + "dev-master": "2.1.x-dev", + "dev-develop": "2.2.x-dev", "dev-release-1.0": "1.0.x-dev" } }, @@ -5717,48 +5769,52 @@ "safe writer", "webimpress" ], + "support": { + "issues": "https://github.com/webimpress/safe-writer/issues", + "source": "https://github.com/webimpress/safe-writer/tree/master" + }, "funding": [ { "url": "https://github.com/michalbundyra", "type": "github" } ], - "time": "2020-03-21T15:49:08+00:00" + "time": "2020-08-25T07:21:11+00:00" } ], "packages-dev": [ { "name": "behat/behat", - "version": "v3.7.0", + "version": "v3.8.1", "source": { "type": "git", "url": "https://github.com/Behat/Behat.git", - "reference": "08052f739619a9e9f62f457a67302f0715e6dd13" + "reference": "fbb065457d523d9856d4b50775b4151a7598b510" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Behat/zipball/08052f739619a9e9f62f457a67302f0715e6dd13", - "reference": "08052f739619a9e9f62f457a67302f0715e6dd13", + "url": "https://api.github.com/repos/Behat/Behat/zipball/fbb065457d523d9856d4b50775b4151a7598b510", + "reference": "fbb065457d523d9856d4b50775b4151a7598b510", "shasum": "" }, "require": { "behat/gherkin": "^4.6.0", "behat/transliterator": "^1.2", "ext-mbstring": "*", - "php": ">=5.3.3", + "php": "^7.2 || ^8.0", "psr/container": "^1.0", - "symfony/config": "^2.7.51 || ^3.0 || ^4.0 || ^5.0", - "symfony/console": "^2.7.51 || ^2.8.33 || ^3.3.15 || ^3.4.3 || ^4.0.3 || ^5.0", - "symfony/dependency-injection": "^2.7.51 || ^3.0 || ^4.0 || ^5.0", - "symfony/event-dispatcher": "^2.7.51 || ^3.0 || ^4.0 || ^5.0", - "symfony/translation": "^2.7.51 || ^3.0 || ^4.0 || ^5.0", - "symfony/yaml": "^2.7.51 || ^3.0 || ^4.0 || ^5.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" }, "require-dev": { "container-interop/container-interop": "^1.2", "herrera-io/box": "~1.6.1", - "phpunit/phpunit": "^4.8.36 || ^6.5.14 || ^7.5.20", - "symfony/process": "~2.5 || ^3.0 || ^4.0 || ^5.0" + "phpunit/phpunit": "^8.5 || ^9.0", + "symfony/process": "^4.4 || ^5.0" }, "suggest": { "ext-dom": "Needed to output test results in JUnit format." @@ -5769,7 +5825,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.6.x-dev" + "dev-master": "3.8.x-dev" } }, "autoload": { @@ -5789,7 +5845,7 @@ "homepage": "http://everzet.com" } ], - "description": "Scenario-oriented BDD framework for PHP 5.3", + "description": "Scenario-oriented BDD framework for PHP", "homepage": "http://behat.org/", "keywords": [ "Agile", @@ -5805,7 +5861,11 @@ "symfony", "testing" ], - "time": "2020-06-03T13:08:44+00:00" + "support": { + "issues": "https://github.com/Behat/Behat/issues", + "source": "https://github.com/Behat/Behat/tree/v3.8.1" + }, + "time": "2020-11-07T15:55:18+00:00" }, { "name": "behat/gherkin", @@ -5864,6 +5924,10 @@ "gherkin", "parser" ], + "support": { + "issues": "https://github.com/Behat/Gherkin/issues", + "source": "https://github.com/Behat/Gherkin/tree/master" + }, "time": "2020-03-17T14:03:26+00:00" }, { @@ -5925,6 +5989,10 @@ "testing", "web" ], + "support": { + "issues": "https://github.com/minkphp/Mink/issues", + "source": "https://github.com/minkphp/Mink/tree/v1.8.1" + }, "time": "2020-03-11T15:45:53+00:00" }, { @@ -5982,6 +6050,10 @@ "browser", "testing" ], + "support": { + "issues": "https://github.com/minkphp/MinkBrowserKitDriver/issues", + "source": "https://github.com/minkphp/MinkBrowserKitDriver/tree/v1.3.4" + }, "time": "2020-03-11T09:49:45+00:00" }, { @@ -6027,6 +6099,10 @@ "slug", "transliterator" ], + "support": { + "issues": "https://github.com/Behat/Transliterator/issues", + "source": "https://github.com/Behat/Transliterator/tree/v1.3.0" + }, "time": "2020-01-14T16:39:13+00:00" }, { @@ -6089,6 +6165,9 @@ "test", "web" ], + "support": { + "source": "https://github.com/FriendsOfBehat/MinkExtension/tree/v2.4.0" + }, "time": "2020-01-15T17:16:57+00:00" }, { @@ -6154,6 +6233,10 @@ } ], "description": "Integrates Behat with Symfony.", + "support": { + "issues": "https://github.com/FriendsOfBehat/SymfonyExtension/issues", + "source": "https://github.com/FriendsOfBehat/SymfonyExtension/tree/2.1" + }, "time": "2020-04-04T20:07:00+00:00" }, { @@ -6204,6 +6287,11 @@ "faker", "fixtures" ], + "support": { + "issues": "https://github.com/fzaninotto/Faker/issues", + "source": "https://github.com/fzaninotto/Faker/tree/v1.9.1" + }, + "abandoned": true, "time": "2019-12-12T13:22:17+00:00" }, { @@ -6251,20 +6339,24 @@ "keywords": [ "test" ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, "time": "2020-07-09T08:09:16+00:00" }, { "name": "mockery/mockery", - "version": "1.4.1", + "version": "1.4.2", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "1404386ca3410b04fe58b9517e85d702ab33b2c6" + "reference": "20cab678faed06fac225193be281ea0fddb43b93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/1404386ca3410b04fe58b9517e85d702ab33b2c6", - "reference": "1404386ca3410b04fe58b9517e85d702ab33b2c6", + "url": "https://api.github.com/repos/mockery/mockery/zipball/20cab678faed06fac225193be281ea0fddb43b93", + "reference": "20cab678faed06fac225193be281ea0fddb43b93", "shasum": "" }, "require": { @@ -6276,7 +6368,7 @@ "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.0" + "phpunit/phpunit": "^8.5 || ^9.3" }, "type": "library", "extra": { @@ -6319,7 +6411,11 @@ "test double", "testing" ], - "time": "2020-07-09T08:31:54+00:00" + "support": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/master" + }, + "time": "2020-08-11T18:10:13+00:00" }, { "name": "myclabs/deep-copy", @@ -6367,6 +6463,10 @@ "object", "object graph" ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.x" + }, "funding": [ { "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", @@ -6375,30 +6475,87 @@ ], "time": "2020-06-29T13:22:24+00:00" }, + { + "name": "nikic/php-parser", + "version": "v4.10.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "658f1be311a230e0907f5dfe0213742aff0596de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/658f1be311a230e0907f5dfe0213742aff0596de", + "reference": "658f1be311a230e0907f5dfe0213742aff0596de", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.2" + }, + "time": "2020-09-26T10:30:38+00:00" + }, { "name": "phar-io/manifest", - "version": "1.0.3", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", "shasum": "" }, "require": { "ext-dom": "*", "ext-phar": "*", - "phar-io/version": "^2.0", - "php": "^5.6 || ^7.0" + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -6428,24 +6585,28 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2018-07-08T19:23:20+00:00" + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/master" + }, + "time": "2020-06-27T14:33:11+00:00" }, { "name": "phar-io/version", - "version": "2.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + "reference": "c6bb6825def89e0a32220f88337f8ceaf1975fa0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "url": "https://api.github.com/repos/phar-io/version/zipball/c6bb6825def89e0a32220f88337f8ceaf1975fa0", + "reference": "c6bb6825def89e0a32220f88337f8ceaf1975fa0", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -6475,7 +6636,11 @@ } ], "description": "Library for handling version information and constraints", - "time": "2018-07-08T19:19:57+00:00" + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/master" + }, + "time": "2020-06-27T14:39:04+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -6524,32 +6689,35 @@ "reflection", "static analysis" ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, "time": "2020-06-27T09:03:43+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.1.0", + "version": "5.2.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", - "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", "shasum": "" }, "require": { - "ext-filter": "^7.1", - "php": "^7.2", - "phpdocumentor/reflection-common": "^2.0", - "phpdocumentor/type-resolver": "^1.0", - "webmozart/assert": "^1" + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" }, "require-dev": { - "doctrine/instantiator": "^1", - "mockery/mockery": "^1" + "mockery/mockery": "~1.3.2" }, "type": "library", "extra": { @@ -6577,20 +6745,24 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2020-02-22T12:28:44+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + }, + "time": "2020-09-03T19:13:55+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.3.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "e878a14a65245fbe78f8080eba03b47c3b705651" + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651", - "reference": "e878a14a65245fbe78f8080eba03b47c3b705651", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", "shasum": "" }, "require": { @@ -6622,32 +6794,36 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2020-06-27T10:12:23+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + }, + "time": "2020-09-17T18:55:26+00:00" }, { "name": "phpspec/prophecy", - "version": "1.11.1", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160" + "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b20034be5efcdab4fb60ca3a29cba2949aead160", - "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/8ce87516be71aae9b956f81906aaf0338e0d8a2d", + "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d", "shasum": "" }, "require": { "doctrine/instantiator": "^1.2", - "php": "^7.2", - "phpdocumentor/reflection-docblock": "^5.0", + "php": "^7.2 || ~8.0, <8.1", + "phpdocumentor/reflection-docblock": "^5.2", "sebastian/comparator": "^3.0 || ^4.0", "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0" + "phpunit/phpunit": "^8.0 || ^9.0 <9.3" }, "type": "library", "extra": { @@ -6685,36 +6861,43 @@ "spy", "stub" ], - "time": "2020-07-08T12:44:21+00:00" + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/1.12.1" + }, + "time": "2020-09-29T09:10:42+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "8.0.2", + "version": "9.2.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "ca6647ffddd2add025ab3f21644a441d7c146cdc" + "reference": "6b20e2055f7c29b56cb3870b3de7cc463d7add41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca6647ffddd2add025ab3f21644a441d7c146cdc", - "reference": "ca6647ffddd2add025ab3f21644a441d7c146cdc", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6b20e2055f7c29b56cb3870b3de7cc463d7add41", + "reference": "6b20e2055f7c29b56cb3870b3de7cc463d7add41", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-xmlwriter": "*", - "php": "^7.3", - "phpunit/php-file-iterator": "^3.0", - "phpunit/php-text-template": "^2.0", - "phpunit/php-token-stream": "^4.0", - "sebastian/code-unit-reverse-lookup": "^2.0", - "sebastian/environment": "^5.0", - "sebastian/version": "^3.0", - "theseer/tokenizer": "^1.1.3" + "nikic/php-parser": "^4.10.2", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-pcov": "*", @@ -6723,7 +6906,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "8.0-dev" + "dev-master": "9.2-dev" } }, "autoload": { @@ -6749,33 +6932,37 @@ "testing", "xunit" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.3" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2020-05-23T08:02:54+00:00" + "time": "2020-10-30T10:46:41+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.4", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "25fefc5b19835ca653877fe081644a3f8c1d915e" + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/25fefc5b19835ca653877fe081644a3f8c1d915e", - "reference": "25fefc5b19835ca653877fe081644a3f8c1d915e", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -6805,34 +6992,38 @@ "filesystem", "iterator" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2020-07-11T05:18:21+00:00" + "time": "2020-09-28T05:57:25+00:00" }, { "name": "phpunit/php-invoker", - "version": "3.0.2", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "f6eedfed1085dd1f4c599629459a0277d25f9a66" + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f6eedfed1085dd1f4c599629459a0277d25f9a66", - "reference": "f6eedfed1085dd1f4c599629459a0277d25f9a66", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-pcntl": "*" @@ -6840,7 +7031,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -6862,95 +7053,44 @@ "description": "Invoke callables with a timeout", "homepage": "https://github.com/sebastianbergmann/php-invoker/", "keywords": [ - "process" - ], - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-06-26T11:53:53+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "6ff9c8ea4d3212b88fcf74e25e516e2c51c99324" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/6ff9c8ea4d3212b88fcf74e25e516e2c51c99324", - "reference": "6ff9c8ea4d3212b88fcf74e25e516e2c51c99324", - "shasum": "" - }, - "require": { - "php": "^7.3 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" + "process" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2020-06-26T11:55:37+00:00" + "time": "2020-09-28T05:58:55+00:00" }, { - "name": "phpunit/php-timer", - "version": "5.0.1", + "name": "phpunit/php-text-template", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "cc49734779cbb302bf51a44297dab8c4bbf941e7" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/cc49734779cbb302bf51a44297dab8c4bbf941e7", - "reference": "cc49734779cbb302bf51a44297dab8c4bbf941e7", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.2" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -6969,44 +7109,47 @@ "role": "lead" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "timer" + "template" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2020-06-26T11:58:13+00:00" + "time": "2020-10-26T05:33:50+00:00" }, { - "name": "phpunit/php-token-stream", - "version": "4.0.3", + "name": "phpunit/php-timer", + "version": "5.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "5672711b6b07b14d5ab694e700c62eeb82fcf374" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/5672711b6b07b14d5ab694e700c62eeb82fcf374", - "reference": "5672711b6b07b14d5ab694e700c62eeb82fcf374", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -7021,34 +7164,39 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "tokenizer" + "timer" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2020-06-27T06:36:25+00:00" + "time": "2020-10-26T13:16:10+00:00" }, { "name": "phpunit/phpunit", - "version": "9.2.6", + "version": "9.4.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "1c6a9e4312e209e659f1fce3ce88dd197c2448f6" + "reference": "9fa359ff5ddaa5eb2be2bedb08a6a5787a5807ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1c6a9e4312e209e659f1fce3ce88dd197c2448f6", - "reference": "1c6a9e4312e209e659f1fce3ce88dd197c2448f6", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9fa359ff5ddaa5eb2be2bedb08a6a5787a5807ab", + "reference": "9fa359ff5ddaa5eb2be2bedb08a6a5787a5807ab", "shasum": "" }, "require": { @@ -7059,30 +7207,31 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.9.5", - "phar-io/manifest": "^1.0.3", - "phar-io/version": "^2.0.1", - "php": "^7.3", - "phpspec/prophecy": "^1.10.3", - "phpunit/php-code-coverage": "^8.0.2", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-invoker": "^3.0.2", - "phpunit/php-text-template": "^2.0.2", - "phpunit/php-timer": "^5.0.1", - "sebastian/code-unit": "^1.0.5", - "sebastian/comparator": "^4.0.3", - "sebastian/diff": "^4.0.1", - "sebastian/environment": "^5.1.2", - "sebastian/exporter": "^4.0.2", - "sebastian/global-state": "^4.0", - "sebastian/object-enumerator": "^4.0.2", - "sebastian/resource-operations": "^3.0.2", - "sebastian/type": "^2.1.1", - "sebastian/version": "^3.0.1" + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.1", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^2.3", + "sebastian/version": "^3.0.2" }, "require-dev": { "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0" + "phpspec/prophecy-phpunit": "^2.0.1" }, "suggest": { "ext-soap": "*", @@ -7094,7 +7243,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-master": "9.4-dev" } }, "autoload": { @@ -7123,6 +7272,10 @@ "testing", "xunit" ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.4.3" + }, "funding": [ { "url": "https://phpunit.de/donate.html", @@ -7133,7 +7286,7 @@ "type": "github" } ], - "time": "2020-07-13T17:55:55+00:00" + "time": "2020-11-10T12:53:30+00:00" }, { "name": "roave/security-advisories", @@ -7141,12 +7294,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "065a018d3b5c2c84a53db3347cca4e1b7fa362a6" + "reference": "e440567339d5fe93d9525e377c5e686b0b08bcca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/065a018d3b5c2c84a53db3347cca4e1b7fa362a6", - "reference": "065a018d3b5c2c84a53db3347cca4e1b7fa362a6", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/e440567339d5fe93d9525e377c5e686b0b08bcca", + "reference": "e440567339d5fe93d9525e377c5e686b0b08bcca", "shasum": "" }, "conflict": { @@ -7434,6 +7587,10 @@ } ], "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", + "support": { + "issues": "https://github.com/Roave/SecurityAdvisories/issues", + "source": "https://github.com/Roave/SecurityAdvisories/tree/latest" + }, "funding": [ { "url": "https://github.com/Ocramius", @@ -7444,27 +7601,83 @@ "type": "tidelift" } ], - "time": "2020-11-01T20:01:47+00:00" + "time": "2020-11-07T16:07:08+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "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" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" }, { "name": "sebastian/code-unit", - "version": "1.0.5", + "version": "1.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "c1e2df332c905079980b119c4db103117e5e5c90" + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/c1e2df332c905079980b119c4db103117e5e5c90", - "reference": "c1e2df332c905079980b119c4db103117e5e5c90", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -7490,33 +7703,37 @@ ], "description": "Collection of value objects that represent the PHP code units", "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2020-06-26T12:50:45+00:00" + "time": "2020-10-26T13:08:54+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ee51f9bb0c6d8a43337055db3120829fa14da819" + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ee51f9bb0c6d8a43337055db3120829fa14da819", - "reference": "ee51f9bb0c6d8a43337055db3120829fa14da819", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -7541,35 +7758,39 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2020-06-26T12:04:00+00:00" + "time": "2020-09-28T05:30:19+00:00" }, { "name": "sebastian/comparator", - "version": "4.0.3", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f" + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f", - "reference": "dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0", + "php": ">=7.3", "sebastian/diff": "^4.0", "sebastian/exporter": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -7611,33 +7832,94 @@ "compare", "equality" ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:49:45+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2020-06-26T12:05:46+00:00" + "time": "2020-10-26T15:52:27+00:00" }, { "name": "sebastian/diff", - "version": "4.0.2", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113" + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113", - "reference": "1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.0", + "phpunit/phpunit": "^9.3", "symfony/process": "^4.2 || ^5" }, "type": "library", @@ -7673,33 +7955,37 @@ "unidiff", "unified diff" ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2020-06-30T04:46:02+00:00" + "time": "2020-10-26T13:10:38+00:00" }, { "name": "sebastian/environment", - "version": "5.1.2", + "version": "5.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2" + "reference": "388b6ced16caa751030f6a69e588299fa09200ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2", - "reference": "0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-posix": "*" @@ -7707,7 +7993,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -7732,35 +8018,39 @@ "environment", "hhvm" ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2020-06-26T12:07:24+00:00" + "time": "2020-09-28T05:52:38+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.2", + "version": "4.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "571d721db4aec847a0e59690b954af33ebf9f023" + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/571d721db4aec847a0e59690b954af33ebf9f023", - "reference": "571d721db4aec847a0e59690b954af33ebf9f023", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0", + "php": ">=7.3", "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "^9.2" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -7805,36 +8095,40 @@ "export", "exporter" ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2020-06-26T12:08:55+00:00" + "time": "2020-09-28T05:24:23+00:00" }, { "name": "sebastian/global-state", - "version": "4.0.0", + "version": "5.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72" + "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bdb1e7c79e592b8c82cb1699be3c8743119b8a72", - "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", + "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", "shasum": "" }, "require": { - "php": "^7.3", + "php": ">=7.3", "sebastian/object-reflector": "^2.0", "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-uopz": "*" @@ -7842,7 +8136,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -7865,29 +8159,96 @@ "keywords": [ "global state" ], - "time": "2020-02-07T06:11:37+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:55:19+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "acf76492a65401babcf5283296fa510782783a7a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/acf76492a65401babcf5283296fa510782783a7a", + "reference": "acf76492a65401babcf5283296fa510782783a7a", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T17:03:56+00:00" }, { "name": "sebastian/object-enumerator", - "version": "4.0.2", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "074fed2d0a6d08e1677dd8ce9d32aecb384917b8" + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/074fed2d0a6d08e1677dd8ce9d32aecb384917b8", - "reference": "074fed2d0a6d08e1677dd8ce9d32aecb384917b8", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0", + "php": ">=7.3", "sebastian/object-reflector": "^2.0", "sebastian/recursion-context": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -7912,33 +8273,37 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2020-06-26T12:11:32+00:00" + "time": "2020-10-26T13:12:34+00:00" }, { "name": "sebastian/object-reflector", - "version": "2.0.2", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "127a46f6b057441b201253526f81d5406d6c7840" + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/127a46f6b057441b201253526f81d5406d6c7840", - "reference": "127a46f6b057441b201253526f81d5406d6c7840", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -7963,33 +8328,37 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2020-06-26T12:12:55+00:00" + "time": "2020-10-26T13:14:26+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.2", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "062231bf61d2b9448c4fa5a7643b5e1829c11d63" + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/062231bf61d2b9448c4fa5a7643b5e1829c11d63", - "reference": "062231bf61d2b9448c4fa5a7643b5e1829c11d63", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -8022,30 +8391,34 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.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" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2020-06-26T12:14:17+00:00" + "time": "2020-10-26T13:17:30+00:00" }, { "name": "sebastian/resource-operations", - "version": "3.0.2", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0653718a5a629b065e91f774595267f8dc32e213" + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0653718a5a629b065e91f774595267f8dc32e213", - "reference": "0653718a5a629b065e91f774595267f8dc32e213", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { "phpunit/phpunit": "^9.0" @@ -8073,38 +8446,42 @@ ], "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" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2020-06-26T12:16:22+00:00" + "time": "2020-09-28T06:45:17+00:00" }, { "name": "sebastian/type", - "version": "2.2.1", + "version": "2.3.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "86991e2b33446cd96e648c18bcdb1e95afb2c05a" + "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/86991e2b33446cd96e648c18bcdb1e95afb2c05a", - "reference": "86991e2b33446cd96e648c18bcdb1e95afb2c05a", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.2" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-master": "2.3-dev" } }, "autoload": { @@ -8125,30 +8502,34 @@ ], "description": "Collection of value objects that represent the types of the PHP type system", "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/2.3.1" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2020-07-05T08:31:53+00:00" + "time": "2020-10-26T13:18:59+00:00" }, { "name": "sebastian/version", - "version": "3.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "626586115d0ed31cb71483be55beb759b5af5a3c" + "reference": "c6c1022351a901512170118436c764e473f6de8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/626586115d0ed31cb71483be55beb759b5af5a3c", - "reference": "626586115d0ed31cb71483be55beb759b5af5a3c", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "type": "library", "extra": { @@ -8174,26 +8555,30 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2020-06-26T12:18:43+00:00" + "time": "2020-09-28T06:39:44+00:00" }, { "name": "symfony/browser-kit", - "version": "v4.4.10", + "version": "v4.4.16", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "f53310646af9901292488b2ff36e26ea10f545f5" + "reference": "99b640fd5d06877e3242ba0393b40a7877dfe534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/f53310646af9901292488b2ff36e26ea10f545f5", - "reference": "f53310646af9901292488b2ff36e26ea10f545f5", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/99b640fd5d06877e3242ba0393b40a7877dfe534", + "reference": "99b640fd5d06877e3242ba0393b40a7877dfe534", "shasum": "" }, "require": { @@ -8210,11 +8595,6 @@ "symfony/process": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\BrowserKit\\": "" @@ -8239,6 +8619,9 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/browser-kit/tree/v4.4.16" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -8253,31 +8636,26 @@ "type": "tidelift" } ], - "time": "2020-05-22T17:28:00+00:00" + "time": "2020-10-24T11:50:19+00:00" }, { "name": "symfony/css-selector", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "e544e24472d4c97b2d11ade7caacd446727c6bf9" + "reference": "b8d8eb06b0942e84a69e7acebc3e9c1e6e6e7256" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/e544e24472d4c97b2d11ade7caacd446727c6bf9", - "reference": "e544e24472d4c97b2d11ade7caacd446727c6bf9", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/b8d8eb06b0942e84a69e7acebc3e9c1e6e6e7256", + "reference": "b8d8eb06b0942e84a69e7acebc3e9c1e6e6e7256", "shasum": "" }, "require": { "php": ">=7.2.5" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\CssSelector\\": "" @@ -8306,6 +8684,9 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -8320,20 +8701,20 @@ "type": "tidelift" } ], - "time": "2020-05-20T17:43:50+00:00" + "time": "2020-10-28T21:31:18+00:00" }, { "name": "symfony/debug", - "version": "v4.4.10", + "version": "v4.4.16", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "28f92d08bb6d1fddf8158e02c194ad43870007e6" + "reference": "c87adf3fc1cd0bf4758316a3a150d50a8f957ef4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/28f92d08bb6d1fddf8158e02c194ad43870007e6", - "reference": "28f92d08bb6d1fddf8158e02c194ad43870007e6", + "url": "https://api.github.com/repos/symfony/debug/zipball/c87adf3fc1cd0bf4758316a3a150d50a8f957ef4", + "reference": "c87adf3fc1cd0bf4758316a3a150d50a8f957ef4", "shasum": "" }, "require": { @@ -8348,11 +8729,6 @@ "symfony/http-kernel": "^3.4|^4.0|^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Debug\\": "" @@ -8377,6 +8753,9 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/debug/tree/v4.4.16" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -8391,20 +8770,20 @@ "type": "tidelift" } ], - "time": "2020-05-24T08:33:35+00:00" + "time": "2020-10-24T11:50:19+00:00" }, { "name": "symfony/dom-crawler", - "version": "v4.4.10", + "version": "v4.4.16", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "c18354d5a0bb84c945f6257c51b971d52f10c614" + "reference": "30ad9ac96a01913195bf0328d48e29d54fa53e6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/c18354d5a0bb84c945f6257c51b971d52f10c614", - "reference": "c18354d5a0bb84c945f6257c51b971d52f10c614", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/30ad9ac96a01913195bf0328d48e29d54fa53e6e", + "reference": "30ad9ac96a01913195bf0328d48e29d54fa53e6e", "shasum": "" }, "require": { @@ -8423,11 +8802,6 @@ "symfony/css-selector": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\DomCrawler\\": "" @@ -8452,6 +8826,9 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dom-crawler/tree/v4.4.16" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -8466,23 +8843,24 @@ "type": "tidelift" } ], - "time": "2020-05-23T00:03:06+00:00" + "time": "2020-10-24T11:50:19+00:00" }, { "name": "symfony/proxy-manager-bridge", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/proxy-manager-bridge.git", - "reference": "65f834babc07abe54c8e0f5bb5cb01f953480953" + "reference": "a200b07f24a3b473dbe0d38bc8bff87414866801" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/65f834babc07abe54c8e0f5bb5cb01f953480953", - "reference": "65f834babc07abe54c8e0f5bb5cb01f953480953", + "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/a200b07f24a3b473dbe0d38bc8bff87414866801", + "reference": "a200b07f24a3b473dbe0d38bc8bff87414866801", "shasum": "" }, "require": { + "composer/package-versions-deprecated": "^1.8", "ocramius/proxy-manager": "~2.1", "php": ">=7.2.5", "symfony/dependency-injection": "^5.0" @@ -8494,11 +8872,6 @@ "symfony/config": "^4.4|^5.0" }, "type": "symfony-bridge", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Bridge\\ProxyManager\\": "" @@ -8523,6 +8896,9 @@ ], "description": "Symfony ProxyManager Bridge", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/proxy-manager-bridge/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -8537,27 +8913,27 @@ "type": "tidelift" } ], - "time": "2020-05-20T17:43:50+00:00" + "time": "2020-11-07T13:01:26+00:00" }, { "name": "symfony/translation", - "version": "v5.1.2", + "version": "v5.2.0-RC1", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "d387f07d4c15f9c09439cf3f13ddbe0b2c5e8be2" + "reference": "331974aae89a1337fdde974339e822fb734a650e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/d387f07d4c15f9c09439cf3f13ddbe0b2c5e8be2", - "reference": "d387f07d4c15f9c09439cf3f13ddbe0b2c5e8be2", + "url": "https://api.github.com/repos/symfony/translation/zipball/331974aae89a1337fdde974339e822fb734a650e", + "reference": "331974aae89a1337fdde974339e822fb734a650e", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php80": "^1.15", - "symfony/translation-contracts": "^2" + "symfony/translation-contracts": "^2.3" }, "conflict": { "symfony/config": "<4.4", @@ -8586,12 +8962,10 @@ "symfony/yaml": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, "autoload": { + "files": [ + "Resources/functions.php" + ], "psr-4": { "Symfony\\Component\\Translation\\": "" }, @@ -8615,6 +8989,9 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v5.2.0-RC1" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -8629,7 +9006,7 @@ "type": "tidelift" } ], - "time": "2020-05-30T20:35:19+00:00" + "time": "2020-10-28T21:46:03+00:00" }, { "name": "theseer/tokenizer", @@ -8669,6 +9046,10 @@ } ], "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" + }, "funding": [ { "url": "https://github.com/theseer", @@ -8724,11 +9105,15 @@ "check", "validate" ], + "support": { + "issues": "https://github.com/webmozart/assert/issues", + "source": "https://github.com/webmozart/assert/tree/master" + }, "time": "2020-07-08T17:02:28+00:00" } ], "aliases": [], - "minimum-stability": "stable", + "minimum-stability": "RC", "stability-flags": { "roave/security-advisories": 20 }, @@ -8745,5 +9130,5 @@ "platform-dev": { "ext-xdebug": "*" }, - "plugin-api-version": "1.1.0" + "plugin-api-version": "2.0.0" } From 705fe6bfffa9a3022965fa333aa592f106a7b967 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Tue, 10 Nov 2020 17:45:54 +0100 Subject: [PATCH 043/106] Use new reflection API --- .../Infrastructure/Bus/CallableFirstParameterExtractor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php index 55049ca4b..31778ac13 100644 --- a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php +++ b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php @@ -60,7 +60,7 @@ public function extract($class): ?string private function firstParameterClassFrom(ReflectionMethod $method): string { - return $method->getParameters()[0]->getClass()->getName(); + return $method->getParameters()[0]->getType()->getName(); } private function hasOnlyOneParameter(ReflectionMethod $method): bool From a465a87578529583f4e9c2e144848ca2dcd217cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Tue, 10 Nov 2020 18:04:09 +0100 Subject: [PATCH 044/106] Use xDebug 3 beta --- Dockerfile | 2 ++ etc/infrastructure/php/conf.d/xdebug.ini | 18 +++++++++--------- etc/infrastructure/php/extensions/amqp.sh | 3 ++- etc/infrastructure/php/extensions/xdebug.sh | 7 +++++++ 4 files changed, 20 insertions(+), 10 deletions(-) create mode 100644 etc/infrastructure/php/extensions/xdebug.sh diff --git a/Dockerfile b/Dockerfile index eab1d7cfd..0a015f565 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,8 +17,10 @@ RUN apk --update upgrade \ RUN pickle install apcu-5.1.19 ADD etc/infrastructure/php/extensions/amqp.sh /root/install-amqp.sh +ADD etc/infrastructure/php/extensions/xdebug.sh /root/install-xdebug.sh RUN apk add git RUN sh /root/install-amqp.sh +RUN sh /root/install-xdebug.sh RUN docker-php-ext-enable \ amqp \ diff --git a/etc/infrastructure/php/conf.d/xdebug.ini b/etc/infrastructure/php/conf.d/xdebug.ini index 4701b2a60..d97b6a059 100644 --- a/etc/infrastructure/php/conf.d/xdebug.ini +++ b/etc/infrastructure/php/conf.d/xdebug.ini @@ -1,15 +1,15 @@ zend_extension = xdebug.so ;Debugging -xdebug.remote_enable = 1; -xdebug.remote_connect_back = 1; -xdebug.remote_autostart = 1; -xdebug.remote_port = 9001; -xdebug.remote_host = host.docker.internal +xdebug.mode=debug +xdebug.start_with_request = yes +xdebug.discover_client_host = yes +xdebug.client_port = 9001 +xdebug.client_host = host.docker.internal ;Profiling -xdebug.profiler_enable = 0; -xdebug.profiler_enable_trigger = 1; -xdebug.profiler_output_dir = "/tmp/xdebug"; +xdebug.mode=profile +xdebug.start_with_request=trigger -xdebug.max_nesting_level = 500; +xdebug.output_dir = "/tmp/xdebug" +xdebug.max_nesting_level = 500 diff --git a/etc/infrastructure/php/extensions/amqp.sh b/etc/infrastructure/php/extensions/amqp.sh index 2531f08bc..464c89c29 100644 --- a/etc/infrastructure/php/extensions/amqp.sh +++ b/etc/infrastructure/php/extensions/amqp.sh @@ -1,5 +1,6 @@ -git clone https://github.com/php-amqp/php-amqp.git +git clone -n https://github.com/php-amqp/php-amqp.git cd php-amqp +git checkout 96cd5cb5eddd3db2faaa3643dad2fe4677d7c438 phpize ./configure make diff --git a/etc/infrastructure/php/extensions/xdebug.sh b/etc/infrastructure/php/extensions/xdebug.sh new file mode 100644 index 000000000..77f850a95 --- /dev/null +++ b/etc/infrastructure/php/extensions/xdebug.sh @@ -0,0 +1,7 @@ +git clone -n https://github.com/xdebug/xdebug.git +cd xdebug +git checkout 592ab9fa10cfa132623489511e92ef69fb91744c +phpize +./configure +make +make install From 306d594c4d8650ae307a263c04dce7ed53b91f3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Tue, 10 Nov 2020 18:38:57 +0100 Subject: [PATCH 045/106] Use amqp @remicollet version https://github.com/php-amqp/php-amqp/pull/383 --- etc/infrastructure/php/extensions/amqp.sh | 3 +-- .../Bus/CallableFirstParameterExtractor.php | 2 +- .../Bus/Event/RabbitMq/RabbitMqConnection.php | 12 ++++++++---- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/etc/infrastructure/php/extensions/amqp.sh b/etc/infrastructure/php/extensions/amqp.sh index 464c89c29..0a22cd53e 100644 --- a/etc/infrastructure/php/extensions/amqp.sh +++ b/etc/infrastructure/php/extensions/amqp.sh @@ -1,6 +1,5 @@ -git clone -n https://github.com/php-amqp/php-amqp.git +git clone --branch issue-php8 https://github.com/remicollet/php-amqp.git cd php-amqp -git checkout 96cd5cb5eddd3db2faaa3643dad2fe4677d7c438 phpize ./configure make diff --git a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php index 31778ac13..be5132c3c 100644 --- a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php +++ b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php @@ -60,7 +60,7 @@ public function extract($class): ?string private function firstParameterClassFrom(ReflectionMethod $method): string { - return $method->getParameters()[0]->getType()->getName(); + return $method->getParameters()[0]->getType()->getName(); } private function hasOnlyOneParameter(ReflectionMethod $method): bool diff --git a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php index 9f1a365ff..2440bbf82 100644 --- a/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php +++ b/src/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqConnection.php @@ -50,14 +50,18 @@ public function exchange(string $name): AMQPExchange private function channel(): AMQPChannel { - return self::$channel = self::$channel && self::$channel->isConnected() - ? self::$channel - : new AMQPChannel($this->connection()); + if (!self::$channel?->isConnected()) { + self::$channel = new AMQPChannel($this->connection()); + } + + return self::$channel; } private function connection(): AMQPConnection { - self::$connection = self::$connection ?: new AMQPConnection($this->configuration); + if (null === self::$connection) { + self::$connection = new AMQPConnection($this->configuration); + } if (!self::$connection->isConnected()) { self::$connection->pconnect(); From 89232e75a8e33159cdc261cc459ab9e73152c75d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Tue, 10 Nov 2020 23:11:40 +0100 Subject: [PATCH 046/106] Update to php8 style (#210) * Update to php8 style * Apply code style --- .../Courses/CoursesGetController.php | 5 +- .../Controller/Metrics/MetricsController.php | 5 +- .../ImportCoursesToElasticsearchCommand.php | 10 +- .../Courses/CoursesGetWebController.php | 10 +- .../Courses/CoursesPostWebController.php | 10 +- .../Controller/Home/HomeGetWebController.php | 10 +- .../Controller/Metrics/MetricsController.php | 5 +- apps/bootstrap.php | 2 +- .../MySql/ConsumeMySqlDomainEventsCommand.php | 15 +- .../RabbitMq/ConfigureRabbitMqCommand.php | 16 +- .../ConsumeRabbitMqDomainEventsCommand.php | 15 +- ...SupervisorRabbitMqConsumerFilesCommand.php | 7 +- .../HealthCheck/HealthCheckGetController.php | 5 +- .../Controller/Metrics/MetricsController.php | 5 +- composer.json | 3 +- composer.lock | 1755 +++++++++++++++-- rector.php | 35 + .../Application/Store/DomainEventStorer.php | 5 +- .../Store/StoreDomainEventOnOccurred.php | 5 +- .../Domain/AnalyticsDomainEvent.php | 17 +- .../Domain/AnalyticsDomainEventBody.php | 5 +- .../Authenticate/AuthenticateUserCommand.php | 7 +- .../AuthenticateUserCommandHandler.php | 5 +- .../Authenticate/UserAuthenticator.php | 5 +- src/Backoffice/Auth/Domain/AuthUser.php | 7 +- .../Application/BackofficeCourseResponse.php | 9 +- .../Create/BackofficeCourseCreator.php | 5 +- .../CreateBackofficeCourseOnCourseCreated.php | 5 +- .../AllBackofficeCoursesSearcher.php | 5 +- ...SearchAllBackofficeCoursesQueryHandler.php | 5 +- .../BackofficeCoursesByCriteriaSearcher.php | 5 +- ...SearchBackofficeCoursesByCriteriaQuery.php | 21 +- ...ackofficeCoursesByCriteriaQueryHandler.php | 5 +- .../Courses/Domain/BackofficeCourse.php | 9 +- ...nMemoryCacheBackofficeCourseRepository.php | 4 +- .../Application/Create/CourseCreator.php | 7 +- .../Create/CreateCourseCommand.php | 9 +- .../Create/CreateCourseCommandHandler.php | 5 +- .../Courses/Application/Find/CourseFinder.php | 5 +- .../Application/Update/CourseRenamer.php | 8 +- src/Mooc/Courses/Domain/Course.php | 9 +- .../Domain/CourseCreatedDomainEvent.php | 10 +- src/Mooc/Courses/Domain/CourseNotExist.php | 6 +- .../Application/Find/CoursesCounterFinder.php | 5 +- .../Find/CoursesCounterResponse.php | 5 +- .../Find/FindCoursesCounterQueryHandler.php | 5 +- .../Increment/CoursesCounterIncrementer.php | 13 +- ...IncrementCoursesCounterOnCourseCreated.php | 5 +- .../CoursesCounter/Domain/CoursesCounter.php | 13 +- .../CoursesCounterIncrementedDomainEvent.php | 12 +- .../DependencyInjection/mooc_services.yaml | 12 +- .../Application/Create/CreateVideoCommand.php | 20 +- .../Create/CreateVideoCommandHandler.php | 5 +- .../Application/Create/VideoCreator.php | 7 +- .../Application/Find/FindVideoQuery.php | 5 +- .../Videos/Application/Find/VideoResponse.php | 20 +- .../Application/Trim/TrimVideoCommand.php | 9 +- .../Trim/TrimVideoCommandHandler.php | 5 +- .../Application/Update/VideoTitleUpdater.php | 6 +- src/Mooc/Videos/Domain/Video.php | 20 +- .../Videos/Domain/VideoCreatedDomainEvent.php | 18 +- src/Mooc/Videos/Domain/VideoFinder.php | 5 +- src/Mooc/Videos/Domain/VideoNotFound.php | 6 +- src/Shared/Domain/Bus/Event/DomainEvent.php | 8 +- src/Shared/Domain/Collection.php | 6 +- src/Shared/Domain/Criteria/Criteria.php | 17 +- src/Shared/Domain/Criteria/Filter.php | 14 +- src/Shared/Domain/Criteria/Order.php | 7 +- src/Shared/Domain/Second.php | 2 +- src/Shared/Domain/SecondsInterval.php | 8 +- src/Shared/Domain/ValueObject/Enum.php | 8 +- .../Domain/ValueObject/IntValueObject.php | 7 +- .../Domain/ValueObject/StringValueObject.php | 7 +- src/Shared/Domain/ValueObject/Uuid.php | 9 +- .../Bus/Command/InMemorySymfonyCommandBus.php | 2 +- .../Bus/Event/DomainEventJsonDeserializer.php | 5 +- .../InMemory/InMemorySymfonyEventBus.php | 2 +- .../MySqlDoctrineDomainEventsConsumer.php | 6 +- .../WithPrometheusMonitoringEventBus.php | 9 +- .../Bus/Query/InMemorySymfonyQueryBus.php | 2 +- .../Elasticsearch/ElasticsearchClient.php | 7 +- .../ElasticsearchClientFactory.php | 2 +- .../Infrastructure/Logger/MonologLogger.php | 5 +- .../Doctrine/DoctrineCriteriaConverter.php | 9 +- .../Doctrine/DoctrineRepository.php | 5 +- .../Elasticsearch/ElasticsearchRepository.php | 7 +- .../Symfony/AddJsonBodyToRequestListener.php | 2 +- .../Infrastructure/Symfony/ApiController.php | 10 +- .../Symfony/ApiExceptionListener.php | 5 +- .../Symfony/BasicHttpAuthMiddleware.php | 7 +- .../Infrastructure/Symfony/WebController.php | 14 +- .../PhpUnit/BackofficeEnvironmentArranger.php | 7 +- .../PhpUnit/MoocEnvironmentArranger.php | 5 +- .../Infrastructure/Behat/ApiContext.php | 4 +- .../Behat/ApplicationFeatureContext.php | 13 +- .../Event/RabbitMq/RabbitMqEventBusTest.php | 10 +- .../Infrastructure/Bus/Query/FakeResponse.php | 5 +- .../Shared/Infrastructure/Mink/MinkHelper.php | 5 +- .../Mink/MinkSessionRequestHelper.php | 6 +- .../Mockery/CodelyTvMatcherIsSimilar.php | 6 +- .../AggregateRootArraySimilarComparator.php | 8 +- .../DateTimeStringSimilarComparator.php | 16 +- .../DomainEventArraySimilarComparator.php | 8 +- .../CodelyTvConstraintIsSimilar.php | 10 +- 104 files changed, 1855 insertions(+), 737 deletions(-) create mode 100644 rector.php diff --git a/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php b/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php index bbd468882..c1cfed9af 100644 --- a/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php +++ b/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php @@ -14,11 +14,8 @@ final class CoursesGetController { - private $queryBus; - - public function __construct(QueryBus $queryBus) + public function __construct(private QueryBus $queryBus) { - $this->queryBus = $queryBus; } public function __invoke(Request $request): JsonResponse diff --git a/apps/backoffice/backend/src/Controller/Metrics/MetricsController.php b/apps/backoffice/backend/src/Controller/Metrics/MetricsController.php index 6ceba048e..6326b58fb 100644 --- a/apps/backoffice/backend/src/Controller/Metrics/MetricsController.php +++ b/apps/backoffice/backend/src/Controller/Metrics/MetricsController.php @@ -11,11 +11,8 @@ final class MetricsController { - private PrometheusMonitor $monitor; - - public function __construct(PrometheusMonitor $monitor) + public function __construct(private PrometheusMonitor $monitor) { - $this->monitor = $monitor; } public function __invoke(Request $request): Response diff --git a/apps/backoffice/frontend/src/Command/ImportCoursesToElasticsearchCommand.php b/apps/backoffice/frontend/src/Command/ImportCoursesToElasticsearchCommand.php index 0edfe8692..314214864 100644 --- a/apps/backoffice/frontend/src/Command/ImportCoursesToElasticsearchCommand.php +++ b/apps/backoffice/frontend/src/Command/ImportCoursesToElasticsearchCommand.php @@ -12,17 +12,11 @@ final class ImportCoursesToElasticsearchCommand extends Command { - private MySqlBackofficeCourseRepository $mySqlRepository; - private ElasticsearchBackofficeCourseRepository $elasticRepository; - public function __construct( - MySqlBackofficeCourseRepository $mySqlRepository, - ElasticsearchBackofficeCourseRepository $elasticRepository + private MySqlBackofficeCourseRepository $mySqlRepository, + private ElasticsearchBackofficeCourseRepository $elasticRepository ) { parent::__construct(); - - $this->mySqlRepository = $mySqlRepository; - $this->elasticRepository = $elasticRepository; } public function execute(InputInterface $input, OutputInterface $output): void diff --git a/apps/backoffice/frontend/src/Controller/Courses/CoursesGetWebController.php b/apps/backoffice/frontend/src/Controller/Courses/CoursesGetWebController.php index 6bf2d2335..549fcd62b 100644 --- a/apps/backoffice/frontend/src/Controller/Courses/CoursesGetWebController.php +++ b/apps/backoffice/frontend/src/Controller/Courses/CoursesGetWebController.php @@ -13,11 +13,6 @@ final class CoursesGetWebController extends WebController { - protected function exceptions(): array - { - return []; - } - public function __invoke(Request $request): Response { /** @var CoursesCounterResponse $coursesCounterResponse */ @@ -33,4 +28,9 @@ public function __invoke(Request $request): Response ] ); } + + 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 48757a4b8..073b9a448 100644 --- a/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php +++ b/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php @@ -14,11 +14,6 @@ final class CoursesPostWebController extends WebController { - protected function exceptions(): array - { - return []; - } - public function __invoke(Request $request): RedirectResponse { $validationErrors = $this->validateRequest($request); @@ -28,6 +23,11 @@ public function __invoke(Request $request): RedirectResponse : $this->createCourse($request); } + protected function exceptions(): array + { + return []; + } + private function validateRequest(Request $request): ConstraintViolationListInterface { $constraint = new Assert\Collection( diff --git a/apps/backoffice/frontend/src/Controller/Home/HomeGetWebController.php b/apps/backoffice/frontend/src/Controller/Home/HomeGetWebController.php index 7470e76c8..8cdc343d8 100644 --- a/apps/backoffice/frontend/src/Controller/Home/HomeGetWebController.php +++ b/apps/backoffice/frontend/src/Controller/Home/HomeGetWebController.php @@ -10,11 +10,6 @@ final class HomeGetWebController extends WebController { - protected function exceptions(): array - { - return []; - } - public function __invoke(Request $request): Response { return $this->render( @@ -25,4 +20,9 @@ public function __invoke(Request $request): Response ] ); } + + 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 01d2d94b1..0b194cf1d 100644 --- a/apps/backoffice/frontend/src/Controller/Metrics/MetricsController.php +++ b/apps/backoffice/frontend/src/Controller/Metrics/MetricsController.php @@ -11,11 +11,8 @@ final class MetricsController { - private PrometheusMonitor $monitor; - - public function __construct(PrometheusMonitor $monitor) + public function __construct(private PrometheusMonitor $monitor) { - $this->monitor = $monitor; } public function __invoke(Request $request): Response diff --git a/apps/bootstrap.php b/apps/bootstrap.php index f127db28d..f9717d54c 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]) && 0 !== strpos($k, 'HTTP_') ? $_SERVER[$k] : $v); + $_ENV[$k] = $_ENV[$k] ?? (isset($_SERVER[$k]) && str_starts_with($k, 'HTTP_') ? $_SERVER[$k] : $v); } } elseif (!class_exists(Dotenv::class)) { throw new RuntimeException( diff --git a/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php b/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php index 152e1e7c8..5460fb312 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php @@ -16,20 +16,13 @@ final class ConsumeMySqlDomainEventsCommand extends Command { - protected static $defaultName = 'codelytv:domain-events:mysql:consume'; - private MySqlDoctrineDomainEventsConsumer $consumer; - private DomainEventSubscriberLocator $subscriberLocator; - private DatabaseConnections $connections; + protected static $defaultName = 'codelytv:domain-events:mysql:consume'; public function __construct( - MySqlDoctrineDomainEventsConsumer $consumer, - DatabaseConnections $connections, - DomainEventSubscriberLocator $subscriberLocator + private MySqlDoctrineDomainEventsConsumer $consumer, + private DatabaseConnections $connections, + private DomainEventSubscriberLocator $subscriberLocator ) { - $this->consumer = $consumer; - $this->subscriberLocator = $subscriberLocator; - $this->connections = $connections; - 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 675dfed6b..9037653a2 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php @@ -12,18 +12,14 @@ final class ConfigureRabbitMqCommand extends Command { - protected static $defaultName = 'codelytv:domain-events:rabbitmq:configure'; - private RabbitMqConfigurer $configurer; - private string $exchangeName; - private Traversable $subscribers; + protected static $defaultName = 'codelytv:domain-events:rabbitmq:configure'; - public function __construct(RabbitMqConfigurer $configurer, string $exchangeName, Traversable $subscribers) - { + public function __construct( + private RabbitMqConfigurer $configurer, + private string $exchangeName, + private Traversable $subscribers + ) { parent::__construct(); - - $this->configurer = $configurer; - $this->exchangeName = $exchangeName; - $this->subscribers = $subscribers; } protected function configure(): void diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php index f2f2f8105..d8ab4347a 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php @@ -15,21 +15,14 @@ final class ConsumeRabbitMqDomainEventsCommand extends Command { - protected static $defaultName = 'codelytv:domain-events:rabbitmq:consume'; - private RabbitMqDomainEventsConsumer $consumer; - private DatabaseConnections $connections; - private DomainEventSubscriberLocator $locator; + protected static $defaultName = 'codelytv:domain-events:rabbitmq:consume'; public function __construct( - RabbitMqDomainEventsConsumer $consumer, - DatabaseConnections $connections, - DomainEventSubscriberLocator $locator + private RabbitMqDomainEventsConsumer $consumer, + private DatabaseConnections $connections, + private DomainEventSubscriberLocator $locator ) { parent::__construct(); - - $this->consumer = $consumer; - $this->connections = $connections; - $this->locator = $locator; } protected function configure(): void diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php index 47d44df47..6c9ea3038 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php @@ -18,14 +18,11 @@ 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 DomainEventSubscriberLocator $locator; + protected static $defaultName = 'codelytv:domain-events:rabbitmq:generate-supervisor-files'; - public function __construct(DomainEventSubscriberLocator $locator) + public function __construct(private DomainEventSubscriberLocator $locator) { parent::__construct(); - - $this->locator = $locator; } protected function configure(): void diff --git a/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php b/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php index 39d283f7c..82c30e36f 100644 --- a/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php +++ b/apps/mooc/backend/src/Controller/HealthCheck/HealthCheckGetController.php @@ -10,11 +10,8 @@ final class HealthCheckGetController { - private RandomNumberGenerator $generator; - - public function __construct(RandomNumberGenerator $generator) + public function __construct(private RandomNumberGenerator $generator) { - $this->generator = $generator; } public function __invoke(Request $request): JsonResponse diff --git a/apps/mooc/backend/src/Controller/Metrics/MetricsController.php b/apps/mooc/backend/src/Controller/Metrics/MetricsController.php index 5aba807e3..32428afd7 100644 --- a/apps/mooc/backend/src/Controller/Metrics/MetricsController.php +++ b/apps/mooc/backend/src/Controller/Metrics/MetricsController.php @@ -11,11 +11,8 @@ final class MetricsController { - private PrometheusMonitor $monitor; - - public function __construct(PrometheusMonitor $monitor) + public function __construct(private PrometheusMonitor $monitor) { - $this->monitor = $monitor; } public function __invoke(Request $request): Response diff --git a/composer.json b/composer.json index 5ac72f26d..f963d2014 100644 --- a/composer.json +++ b/composer.json @@ -47,7 +47,8 @@ "fzaninotto/faker": "^1.9", - "symfony/debug": "^4.4" + "symfony/debug": "^4.4", + "rector/rector": "^0.8.48" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index 57e807876..571d2d159 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": "e934130660b685ecaae3c157a8a0ed22", + "content-hash": "106017a1e7c4074ef16fb931f33bcaee", "packages": [ { "name": "composer/package-versions-deprecated", @@ -6105,6 +6105,69 @@ }, "time": "2020-01-14T16:39:13+00:00" }, + { + "name": "composer/xdebug-handler", + "version": "1.4.4", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "6e076a124f7ee146f2487554a94b6a19a74887ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6e076a124f7ee146f2487554a94b6a19a74887ba", + "reference": "6e076a124f7ee146f2487554a94b6a19a74887ba", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0", + "psr/log": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/1.4.4" + }, + "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": "2020-10-24T12:39:10+00:00" + }, { "name": "friends-of-behat/mink-extension", "version": "v2.4.0", @@ -6345,6 +6408,146 @@ }, "time": "2020-07-09T08:09:16+00:00" }, + { + "name": "jean85/pretty-package-versions", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "a917488320c20057da87f67d0d40543dd9427f7a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/a917488320c20057da87f67d0d40543dd9427f7a", + "reference": "a917488320c20057da87f67d0d40543dd9427f7a", + "shasum": "" + }, + "require": { + "composer/package-versions-deprecated": "^1.8.0", + "php": "^7.0|^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0|^8.5|^9.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Jean85\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alessandro Lai", + "email": "alessandro.lai85@gmail.com" + } + ], + "description": "A wrapper for ocramius/package-versions to get pretty versions strings", + "keywords": [ + "composer", + "package", + "release", + "versions" + ], + "support": { + "issues": "https://github.com/Jean85/pretty-package-versions/issues", + "source": "https://github.com/Jean85/pretty-package-versions/tree/1.5.1" + }, + "time": "2020-09-14T08:43:34+00:00" + }, + { + "name": "migrify/migrify-kernel", + "version": "0.3.52", + "source": { + "type": "git", + "url": "https://github.com/migrify/migrify-kernel.git", + "reference": "79c8015edeaeafc7d7d27ff0f528ab6165e5d10c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/migrify/migrify-kernel/zipball/79c8015edeaeafc7d7d27ff0f528ab6165e5d10c", + "reference": "79c8015edeaeafc7d7d27ff0f528ab6165e5d10c", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/console": "^4.4|^5.1", + "symfony/dependency-injection": "^4.4|^5.1", + "symfony/http-kernel": "^4.4|^5.1", + "symplify/autowire-array-parameter": "^8.3.46", + "symplify/package-builder": "^8.3.46", + "symplify/smart-file-system": "^8.3.46" + }, + "require-dev": { + "tracy/tracy": "^2.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Migrify\\MigrifyKernel\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Kernel for small CLI applications", + "support": { + "issues": "https://github.com/migrify/migrify-kernel/issues", + "source": "https://github.com/migrify/migrify-kernel/tree/0.3.52" + }, + "time": "2020-10-25T12:09:47+00:00" + }, + { + "name": "migrify/php-config-printer", + "version": "0.3.52", + "source": { + "type": "git", + "url": "https://github.com/migrify/php-config-printer.git", + "reference": "1c840c83cfa8b738ab20e229e8254177d38df068" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/migrify/php-config-printer/zipball/1c840c83cfa8b738ab20e229e8254177d38df068", + "reference": "1c840c83cfa8b738ab20e229e8254177d38df068", + "shasum": "" + }, + "require": { + "migrify/migrify-kernel": "^0.3.52", + "nette/utils": "^3.1", + "nikic/php-parser": "^4.9", + "php": ">=7.2", + "symfony/http-kernel": "^4.4|^5.1" + }, + "require-dev": { + "phpunit/phpunit": "^8.5|^9.0", + "symplify/easy-testing": "^8.3.46" + }, + "type": "library", + "autoload": { + "psr-4": { + "Migrify\\PhpConfigPrinter\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Print Symfony services array with configuration to to plain PHP file format thanks to this simple php-parser wrapper", + "support": { + "issues": "https://github.com/migrify/php-config-printer/issues", + "source": "https://github.com/migrify/php-config-printer/tree/0.3.52" + }, + "time": "2020-10-30T10:33:25+00:00" + }, { "name": "mockery/mockery", "version": "1.4.2", @@ -6476,86 +6679,101 @@ "time": "2020-06-29T13:22:24+00:00" }, { - "name": "nikic/php-parser", - "version": "v4.10.2", + "name": "nette/finder", + "version": "v2.5.2", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "658f1be311a230e0907f5dfe0213742aff0596de" + "url": "https://github.com/nette/finder.git", + "reference": "4ad2c298eb8c687dd0e74ae84206a4186eeaed50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/658f1be311a230e0907f5dfe0213742aff0596de", - "reference": "658f1be311a230e0907f5dfe0213742aff0596de", + "url": "https://api.github.com/repos/nette/finder/zipball/4ad2c298eb8c687dd0e74ae84206a4186eeaed50", + "reference": "4ad2c298eb8c687dd0e74ae84206a4186eeaed50", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=7.0" + "nette/utils": "^2.4 || ^3.0", + "php": ">=7.1" + }, + "conflict": { + "nette/nette": "<2.2" }, "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "nette/tester": "^2.0", + "phpstan/phpstan": "^0.12", + "tracy/tracy": "^2.3" }, - "bin": [ - "bin/php-parse" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "2.5-dev" } }, "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" ], "authors": [ { - "name": "Nikita Popov" + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" } ], - "description": "A PHP parser written in PHP", + "description": "🔍 Nette Finder: find files and directories with an intuitive API.", + "homepage": "https://nette.org", "keywords": [ - "parser", - "php" + "filesystem", + "glob", + "iterator", + "nette" ], "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.2" + "issues": "https://github.com/nette/finder/issues", + "source": "https://github.com/nette/finder/tree/v2.5.2" }, - "time": "2020-09-26T10:30:38+00:00" + "time": "2020-01-03T20:35:40+00:00" }, { - "name": "phar-io/manifest", - "version": "2.0.1", + "name": "nette/robot-loader", + "version": "v3.3.1", "source": { "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + "url": "https://github.com/nette/robot-loader.git", + "reference": "15c1ecd0e6e69e8d908dfc4cca7b14f3b850a96b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "url": "https://api.github.com/repos/nette/robot-loader/zipball/15c1ecd0e6e69e8d908dfc4cca7b14f3b850a96b", + "reference": "15c1ecd0e6e69e8d908dfc4cca7b14f3b850a96b", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" + "ext-tokenizer": "*", + "nette/finder": "^2.5 || ^3.0", + "nette/utils": "^3.0", + "php": ">=7.1" + }, + "require-dev": { + "nette/tester": "^2.0", + "phpstan/phpstan": "^0.12", + "tracy/tracy": "^2.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -6565,50 +6783,72 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" + "name": "David Grudl", + "homepage": "https://davidgrudl.com" }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" + "name": "Nette Community", + "homepage": "https://nette.org/contributors" } ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "description": "🍀 Nette RobotLoader: high performance and comfortable autoloader that will search and autoload classes within your application.", + "homepage": "https://nette.org", + "keywords": [ + "autoload", + "class", + "interface", + "nette", + "trait" + ], "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/master" + "issues": "https://github.com/nette/robot-loader/issues", + "source": "https://github.com/nette/robot-loader/tree/v3.3.1" }, - "time": "2020-06-27T14:33:11+00:00" + "time": "2020-09-15T15:14:17+00:00" }, { - "name": "phar-io/version", - "version": "3.0.2", + "name": "nette/utils", + "version": "v3.1.3", "source": { "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "c6bb6825def89e0a32220f88337f8ceaf1975fa0" + "url": "https://github.com/nette/utils.git", + "reference": "c09937fbb24987b2a41c6022ebe84f4f1b8eec0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/c6bb6825def89e0a32220f88337f8ceaf1975fa0", - "reference": "c6bb6825def89e0a32220f88337f8ceaf1975fa0", + "url": "https://api.github.com/repos/nette/utils/zipball/c09937fbb24987b2a41c6022ebe84f4f1b8eec0f", + "reference": "c09937fbb24987b2a41c6022ebe84f4f1b8eec0f", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": ">=7.1" + }, + "require-dev": { + "nette/tester": "~2.0", + "phpstan/phpstan": "^0.12", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -6616,50 +6856,301 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" + "name": "David Grudl", + "homepage": "https://davidgrudl.com" }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" + "name": "Nette Community", + "homepage": "https://nette.org/contributors" } ], - "description": "Library for handling version information and constraints", + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/master" + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v3.1.3" }, - "time": "2020-06-27T14:39:04+00:00" + "time": "2020-08-07T10:34:21+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", + "name": "nikic/php-parser", + "version": "v4.10.2", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "658f1be311a230e0907f5dfe0213742aff0596de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/658f1be311a230e0907f5dfe0213742aff0596de", + "reference": "658f1be311a230e0907f5dfe0213742aff0596de", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "ext-tokenizer": "*", + "php": ">=7.0" }, - "type": "library", + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.2" + }, + "time": "2020-09-26T10:30:38+00:00" + }, + { + "name": "ondram/ci-detector", + "version": "3.5.1", + "source": { + "type": "git", + "url": "https://github.com/OndraM/ci-detector.git", + "reference": "594e61252843b68998bddd48078c5058fe9028bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/OndraM/ci-detector/zipball/594e61252843b68998bddd48078c5058fe9028bd", + "reference": "594e61252843b68998bddd48078c5058fe9028bd", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.2", + "lmc/coding-standard": "^1.3 || ^2.0", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpstan/extension-installer": "^1.0.3", + "phpstan/phpstan": "^0.12.0", + "phpstan/phpstan-phpunit": "^0.12.1", + "phpunit/phpunit": "^7.1 || ^8.0 || ^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "OndraM\\CiDetector\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ondřej Machulda", + "email": "ondrej.machulda@gmail.com" + } + ], + "description": "Detect continuous integration environment and provide unified access to properties of current build", + "keywords": [ + "CircleCI", + "Codeship", + "Wercker", + "adapter", + "appveyor", + "aws", + "aws codebuild", + "bamboo", + "bitbucket", + "buddy", + "ci-info", + "codebuild", + "continuous integration", + "continuousphp", + "drone", + "github", + "gitlab", + "interface", + "jenkins", + "teamcity", + "travis" + ], + "support": { + "issues": "https://github.com/OndraM/ci-detector/issues", + "source": "https://github.com/OndraM/ci-detector/tree/main" + }, + "time": "2020-09-04T11:21:14+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "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" + }, + "time": "2020-06-27T14:33:11+00:00" + }, + { + "name": "phar-io/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "c6bb6825def89e0a32220f88337f8ceaf1975fa0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/c6bb6825def89e0a32220f88337f8ceaf1975fa0", + "reference": "c6bb6825def89e0a32220f88337f8ceaf1975fa0", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "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/master" + }, + "time": "2020-06-27T14:39:04+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", "extra": { "branch-alias": { "dev-2.x": "2.x-dev" @@ -6868,85 +7359,258 @@ "time": "2020-09-29T09:10:42+00:00" }, { - "name": "phpunit/php-code-coverage", - "version": "9.2.3", + "name": "phpstan/phpdoc-parser", + "version": "0.4.9", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6b20e2055f7c29b56cb3870b3de7cc463d7add41" + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "98a088b17966bdf6ee25c8a4b634df313d8aa531" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6b20e2055f7c29b56cb3870b3de7cc463d7add41", - "reference": "6b20e2055f7c29b56cb3870b3de7cc463d7add41", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/98a088b17966bdf6ee25c8a4b634df313d8aa531", + "reference": "98a088b17966bdf6ee25c8a4b634df313d8aa531", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.10.2", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" + "php": "^7.1 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "consistence/coding-standard": "^3.5", + "ergebnis/composer-normalize": "^2.0.2", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "phing/phing": "^2.16.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.26", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^6.3", + "slevomat/coding-standard": "^4.7.2", + "symfony/process": "^4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-master": "0.4-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" + "MIT" ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.3" + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/master" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-30T10:46:41+00:00" + "time": "2020-08-03T20:32:43+00:00" }, { - "name": "phpunit/php-file-iterator", - "version": "3.0.5", + "name": "phpstan/phpstan", + "version": "0.12.54", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "45c7b999a4b7dd9ac5558bdaaf23dcebbef88223" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/45c7b999a4b7dd9ac5558bdaaf23dcebbef88223", + "reference": "45c7b999a4b7dd9ac5558bdaaf23dcebbef88223", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.12-dev" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "support": { + "issues": "https://github.com/phpstan/phpstan/issues", + "source": "https://github.com/phpstan/phpstan/tree/0.12.54" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpstan", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2020-11-05T13:36:26+00:00" + }, + { + "name": "phpstan/phpstan-phpunit", + "version": "0.12.16", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan-phpunit.git", + "reference": "1dd916d181b0539dea5cd37e91546afb8b107e17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/1dd916d181b0539dea5cd37e91546afb8b107e17", + "reference": "1dd916d181b0539dea5cd37e91546afb8b107e17", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "phpstan/phpstan": "^0.12.33" + }, + "conflict": { + "phpunit/phpunit": "<7.0" + }, + "require-dev": { + "consistence/coding-standard": "^3.5", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "ergebnis/composer-normalize": "^2.0.2", + "jakub-onderka/php-parallel-lint": "^1.0", + "phing/phing": "^2.16.0", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "satooshi/php-coveralls": "^1.0", + "slevomat/coding-standard": "^4.7.2" + }, + "type": "phpstan-extension", + "extra": { + "branch-alias": { + "dev-master": "0.12-dev" + }, + "phpstan": { + "includes": [ + "extension.neon", + "rules.neon" + ] + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPUnit extensions and rules for PHPStan", + "support": { + "issues": "https://github.com/phpstan/phpstan-phpunit/issues", + "source": "https://github.com/phpstan/phpstan-phpunit/tree/0.12.16" + }, + "time": "2020-08-05T13:28:50+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "6b20e2055f7c29b56cb3870b3de7cc463d7add41" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6b20e2055f7c29b56cb3870b3de7cc463d7add41", + "reference": "6b20e2055f7c29b56cb3870b3de7cc463d7add41", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.10.2", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-30T10:46:41+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", @@ -7288,6 +7952,276 @@ ], "time": "2020-11-10T12:53:30+00:00" }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/master" + }, + "time": "2017-10-23T01:57:42+00:00" + }, + { + "name": "rector/rector", + "version": "0.8.48", + "source": { + "type": "git", + "url": "https://github.com/rectorphp/rector.git", + "reference": "84d2cc41d2526d84ef40e0faccbaf0bf0cbf38b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/84d2cc41d2526d84ef40e0faccbaf0bf0cbf38b9", + "reference": "84d2cc41d2526d84ef40e0faccbaf0bf0cbf38b9", + "shasum": "" + }, + "require": { + "composer/xdebug-handler": "^1.4", + "doctrine/annotations": "^1.11", + "doctrine/inflector": "^1.4|^2.0", + "ext-json": "*", + "jean85/pretty-package-versions": "^1.5.1", + "migrify/php-config-printer": "^0.3.52", + "nette/robot-loader": "^3.2", + "nette/utils": "^3.1", + "nikic/php-parser": "4.10.2", + "ondram/ci-detector": "^3.4", + "php": "^7.2.4|^8.0", + "phpstan/phpdoc-parser": "^0.4.9", + "phpstan/phpstan": "^0.12.52", + "phpstan/phpstan-phpunit": "^0.12.16", + "psr/simple-cache": "^1.0", + "sebastian/diff": "^3.0|^4.0", + "symfony/cache": "^4.4.8|^5.1", + "symfony/console": "^4.4.8|^5.1", + "symfony/dependency-injection": "^4.4.8|^5.1", + "symfony/finder": "^4.4.8|^5.1", + "symfony/http-kernel": "^4.4.8|^5.1", + "symfony/process": "^4.4.8|^5.1", + "symplify/autowire-array-parameter": "^8.3.48", + "symplify/composer-json-manipulator": "^8.3.48", + "symplify/console-color-diff": "^8.3.48", + "symplify/easy-testing": "^8.3.48", + "symplify/package-builder": "^8.3.48", + "symplify/set-config-resolver": "^8.3.48", + "symplify/smart-file-system": "^8.3.48", + "webmozart/assert": "^1.9" + }, + "replace": { + "rector/rector-prefixed": "self.version", + "rector/simple-php-doc-parser": "self.version", + "rector/symfony-php-config": "self.version" + }, + "require-dev": { + "cweagans/composer-patches": "^1.7", + "friendsofphp/php-cs-fixer": "^2.16", + "migrify/vendor-patches": "^0.3.52", + "nette/application": "^3.0", + "nette/di": "^3.0", + "nette/forms": "^3.0", + "ocramius/package-versions": "^1.9", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpunit/phpunit": "^8.5|^9.2", + "psr/event-dispatcher": "^1.0", + "symplify/changelog-linker": "^8.3.48", + "symplify/easy-coding-standard": "^8.3.48", + "symplify/easy-testing": "^8.3.48", + "symplify/monorepo-builder": "^8.3.48", + "symplify/phpstan-extensions": "^8.3.48", + "tracy/tracy": "^2.7" + }, + "bin": [ + "bin/rector" + ], + "type": "library", + "extra": { + "patches": { + "nette/application": [ + "patches/nette-application-src-application-ui-presenter-php.patch" + ] + } + }, + "autoload": { + "files": [ + "packages/symfony-php-config/functions/functions.php", + "rules/restoration/tests/Rector/Use_/RestoreFullyQualifiedNameRector/Source/ShortClassOnly.php" + ], + "psr-4": { + "Rector\\Testing\\": "packages/testing/src", + "Rector\\Architecture\\": "rules/architecture/src", + "Rector\\AttributeAwarePhpDoc\\": "packages/attribute-aware-php-doc/src", + "Rector\\Autodiscovery\\": "rules/autodiscovery/src", + "Rector\\BetterPhpDocParser\\": "packages/better-php-doc-parser/src", + "Rector\\Caching\\": "packages/caching/src", + "Rector\\CakePHP\\": "rules/cakephp/src", + "Rector\\ChangesReporting\\": "packages/changes-reporting/src", + "Rector\\CodeQuality\\": "rules/code-quality/src", + "Rector\\CodingStyle\\": "rules/coding-style/src", + "Rector\\ConsoleDiffer\\": "packages/console-differ/src", + "Rector\\Core\\": "src", + "Rector\\DeadCode\\": "rules/dead-code/src", + "Rector\\DoctrineAnnotationGenerated\\": "packages/doctrine-annotation-generated/src", + "Rector\\DoctrineCodeQuality\\": "rules/doctrine-code-quality/src", + "Rector\\DoctrineGedmoToKnplabs\\": "rules/doctrine-gedmo-to-knplabs/src", + "Rector\\Doctrine\\": "rules/doctrine/src", + "Rector\\DocumentationGenerator\\": "packages/documentation-generator/src", + "Rector\\DowngradePhp71\\": "rules/downgrade-php71/src", + "Rector\\DowngradePhp72\\": "rules/downgrade-php72/src", + "Rector\\DowngradePhp73\\": "rules/downgrade-php73/src", + "Rector\\ReadWrite\\": "packages/read-write/src", + "Rector\\DowngradePhp74\\": "rules/downgrade-php74/src", + "Rector\\DowngradePhp80\\": "rules/downgrade-php80/src", + "Rector\\FamilyTree\\": "packages/family-tree/src", + "Rector\\FileSystemRector\\": "packages/file-system-rector/src", + "Rector\\Generic\\": "rules/generic/src", + "Rector\\JMS\\": "rules/jms/src", + "Rector\\Laravel\\": "rules/laravel/src", + "Rector\\Legacy\\": "rules/legacy/src", + "Rector\\MagicDisclosure\\": "rules/magic-disclosure/src", + "Rector\\MockeryToProphecy\\": "rules/mockery-to-prophecy/src", + "Rector\\MockistaToMockery\\": "rules/mockista-to-mockery/src", + "Rector\\MysqlToMysqli\\": "rules/mysql-to-mysqli/src", + "Rector\\Naming\\": "rules/naming/src", + "Rector\\NetteCodeQuality\\": "rules/nette-code-quality/src", + "Rector\\NetteKdyby\\": "rules/nette-kdyby/src", + "Rector\\NetteTesterToPHPUnit\\": "rules/nette-tester-to-phpunit/src", + "Rector\\NetteToSymfony\\": "rules/nette-to-symfony/src", + "Rector\\NetteUtilsCodeQuality\\": "rules/nette-utils-code-quality/src", + "Rector\\Nette\\": "rules/nette/src", + "Rector\\Defluent\\": "rules/defluent/src", + "Rector\\NodeCollector\\": "packages/node-collector/src", + "Rector\\NodeNameResolver\\": "packages/node-name-resolver/src", + "Rector\\NodeNestingScope\\": "packages/node-nesting-scope/src", + "Rector\\NodeRemoval\\": "packages/node-removal/src", + "Rector\\NodeTypeResolver\\": "packages/node-type-resolver/src", + "Rector\\Order\\": "rules/order/src", + "Rector\\PHPOffice\\": "rules/php-office/src", + "Rector\\PHPStanStaticTypeMapper\\": "packages/phpstan-static-type-mapper/src", + "Rector\\PHPStan\\": "rules/phpstan/src", + "Rector\\PHPUnitSymfony\\": "rules/phpunit-symfony/src", + "Rector\\PHPUnit\\": "rules/phpunit/src", + "Rector\\PSR4\\": "rules/psr4/src", + "Rector\\Performance\\": "rules/performance/src", + "Rector\\Phalcon\\": "rules/phalcon/src", + "Rector\\Php52\\": "rules/php52/src", + "Rector\\Php53\\": "rules/php53/src", + "Rector\\Php54\\": "rules/php54/src", + "Rector\\Php55\\": "rules/php55/src", + "Rector\\Php56\\": "rules/php56/src", + "Rector\\Php70\\": "rules/php70/src", + "Rector\\Php71\\": "rules/php71/src", + "Rector\\Php72\\": "rules/php72/src", + "Rector\\Php73\\": "rules/php73/src", + "Rector\\Php74\\": "rules/php74/src", + "Rector\\Php80\\": "rules/php80/src", + "Rector\\PhpAttribute\\": "packages/php-attribute/src", + "Rector\\PhpDeglobalize\\": "rules/php-deglobalize/src", + "Rector\\PhpSpecToPHPUnit\\": "rules/php-spec-to-phpunit/src", + "Rector\\Polyfill\\": "rules/polyfill/src", + "Rector\\PostRector\\": "packages/post-rector/src", + "Rector\\Privatization\\": "rules/privatization/src", + "Rector\\RectorGenerator\\": "packages/rector-generator/src", + "Rector\\RemovingStatic\\": "rules/removing-static/src", + "Rector\\Renaming\\": "rules/renaming/src", + "Rector\\Reporting\\": "packages/reporting/src", + "Rector\\Restoration\\": "rules/restoration/src", + "Rector\\SOLID\\": "rules/solid/src", + "Rector\\Sensio\\": "rules/sensio/src", + "Rector\\Set\\": "packages/set/src", + "Rector\\SimplePhpDocParser\\": "packages/simple-php-doc-parser/src", + "Rector\\StaticTypeMapper\\": "packages/static-type-mapper/src", + "Rector\\StrictCodeQuality\\": "rules/strict-code-quality/src", + "Rector\\SymfonyCodeQuality\\": "rules/symfony-code-quality/src", + "Rector\\SymfonyPHPUnit\\": "rules/symfony-phpunit/src", + "Rector\\SymfonyPhpConfig\\": [ + "packages/symfony-php-config/src", + "rules/symfony-php-config/src" + ], + "Rector\\Symfony\\": "rules/symfony/src", + "Rector\\Transform\\": "rules/transform/src", + "Rector\\Twig\\": "rules/twig/src", + "Rector\\TypeDeclaration\\": "rules/type-declaration/src", + "Rector\\VendorLocker\\": "packages/vendor-locker/src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tomas Votruba", + "email": "tomas.vot@gmail.com", + "homepage": "https://tomasvotruba.com" + }, + { + "name": "Jan Mikes", + "email": "j.mikes@me.com", + "homepage": "https://janmikes.cz" + } + ], + "description": "Instant upgrade and refactoring of your PHP code", + "homepage": "https://getrector.org", + "keywords": [ + "ast", + "automated refactoring", + "instant refactoring", + "instant upgrades" + ], + "support": { + "issues": "https://github.com/rectorphp/rector/issues", + "source": "https://github.com/rectorphp/rector/tree/0.8.48" + }, + "funding": [ + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2020-11-02T19:01:31+00:00" + }, { "name": "roave/security-advisories", "version": "dev-master", @@ -8846,35 +9780,97 @@ "time": "2020-10-24T11:50:19+00:00" }, { - "name": "symfony/proxy-manager-bridge", + "name": "symfony/process", "version": "v5.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/symfony/proxy-manager-bridge.git", - "reference": "a200b07f24a3b473dbe0d38bc8bff87414866801" + "url": "https://github.com/symfony/process.git", + "reference": "240e74140d4d956265048f3025c0aecbbc302d54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/a200b07f24a3b473dbe0d38bc8bff87414866801", - "reference": "a200b07f24a3b473dbe0d38bc8bff87414866801", + "url": "https://api.github.com/repos/symfony/process/zipball/240e74140d4d956265048f3025c0aecbbc302d54", + "reference": "240e74140d4d956265048f3025c0aecbbc302d54", "shasum": "" }, "require": { - "composer/package-versions-deprecated": "^1.8", - "ocramius/proxy-manager": "~2.1", "php": ">=7.2.5", - "symfony/dependency-injection": "^5.0" - }, - "conflict": { - "zendframework/zend-eventmanager": "2.6.0" - }, - "require-dev": { - "symfony/config": "^4.4|^5.0" + "symfony/polyfill-php80": "^1.15" }, - "type": "symfony-bridge", + "type": "library", "autoload": { "psr-4": { - "Symfony\\Bridge\\ProxyManager\\": "" + "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": "Symfony Process Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v5.2.0-RC1" + }, + "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": "2020-11-02T15:47:15+00:00" + }, + { + "name": "symfony/proxy-manager-bridge", + "version": "v5.2.0-RC1", + "source": { + "type": "git", + "url": "https://github.com/symfony/proxy-manager-bridge.git", + "reference": "a200b07f24a3b473dbe0d38bc8bff87414866801" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/a200b07f24a3b473dbe0d38bc8bff87414866801", + "reference": "a200b07f24a3b473dbe0d38bc8bff87414866801", + "shasum": "" + }, + "require": { + "composer/package-versions-deprecated": "^1.8", + "ocramius/proxy-manager": "~2.1", + "php": ">=7.2.5", + "symfony/dependency-injection": "^5.0" + }, + "conflict": { + "zendframework/zend-eventmanager": "2.6.0" + }, + "require-dev": { + "symfony/config": "^4.4|^5.0" + }, + "type": "symfony-bridge", + "autoload": { + "psr-4": { + "Symfony\\Bridge\\ProxyManager\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -9008,6 +10004,455 @@ ], "time": "2020-10-28T21:46:03+00:00" }, + { + "name": "symplify/autowire-array-parameter", + "version": "8.3.48", + "source": { + "type": "git", + "url": "https://github.com/symplify/autowire-array-parameter.git", + "reference": "721e29f2e656cc3cf1101fcc0dbb4f4a44d9309b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/autowire-array-parameter/zipball/721e29f2e656cc3cf1101fcc0dbb4f4a44d9309b", + "reference": "721e29f2e656cc3cf1101fcc0dbb4f4a44d9309b", + "shasum": "" + }, + "require": { + "nette/utils": "^3.0", + "php": ">=7.2", + "symfony/dependency-injection": "^4.4|^5.1", + "symplify/package-builder": "^8.3.48" + }, + "require-dev": { + "phpunit/phpunit": "^8.5|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symplify\\AutowireArrayParameter\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Autowire array parameters for your Symfony applications", + "support": { + "source": "https://github.com/symplify/autowire-array-parameter/tree/8.3.48" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2020-10-26T10:38:48+00:00" + }, + { + "name": "symplify/composer-json-manipulator", + "version": "8.3.48", + "source": { + "type": "git", + "url": "https://github.com/symplify/composer-json-manipulator.git", + "reference": "44346fecb95fd0f435ab43d6603995d1e0796353" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/composer-json-manipulator/zipball/44346fecb95fd0f435ab43d6603995d1e0796353", + "reference": "44346fecb95fd0f435ab43d6603995d1e0796353", + "shasum": "" + }, + "require": { + "nette/utils": "^3.0", + "php": ">=7.2", + "symfony/config": "^4.4|^5.1", + "symfony/dependency-injection": "^4.4|^5.1", + "symfony/filesystem": "^4.4|^5.1", + "symfony/http-kernel": "^4.4|^5.1", + "symplify/package-builder": "^8.3.48", + "symplify/smart-file-system": "^8.3.48" + }, + "require-dev": { + "phpunit/phpunit": "^8.5|^9.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "8.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symplify\\ComposerJsonManipulator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Package to load, merge and save composer.json file(s)", + "support": { + "source": "https://github.com/symplify/composer-json-manipulator/tree/8.3.48" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2020-10-26T10:38:48+00:00" + }, + { + "name": "symplify/console-color-diff", + "version": "8.3.48", + "source": { + "type": "git", + "url": "https://github.com/symplify/console-color-diff.git", + "reference": "6cae4c121271da963698a9f0a50717a7d2ee9567" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/console-color-diff/zipball/6cae4c121271da963698a9f0a50717a7d2ee9567", + "reference": "6cae4c121271da963698a9f0a50717a7d2ee9567", + "shasum": "" + }, + "require": { + "nette/utils": "^3.0", + "php": ">=7.2", + "sebastian/diff": "^3.0|^4.0", + "symfony/console": "^4.4|^5.1", + "symfony/dependency-injection": "^4.4|^5.1", + "symfony/http-kernel": "^4.4|^5.1", + "symplify/package-builder": "^8.3.48" + }, + "require-dev": { + "phpunit/phpunit": "^8.5|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symplify\\ConsoleColorDiff\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Package to print diffs in console with colors", + "support": { + "source": "https://github.com/symplify/console-color-diff/tree/8.3.48" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2020-10-26T10:38:48+00:00" + }, + { + "name": "symplify/easy-testing", + "version": "8.3.48", + "source": { + "type": "git", + "url": "https://github.com/symplify/easy-testing.git", + "reference": "cc3f78487655764a2e9b2488731aabf4025628cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/easy-testing/zipball/cc3f78487655764a2e9b2488731aabf4025628cd", + "reference": "cc3f78487655764a2e9b2488731aabf4025628cd", + "shasum": "" + }, + "require": { + "nette/utils": "^3.0", + "php": ">=7.2", + "symfony/finder": "^4.4|^5.1", + "symplify/package-builder": "^8.3.48", + "symplify/smart-file-system": "^8.3.48", + "symplify/symplify-kernel": "^8.3.48" + }, + "require-dev": { + "phpunit/phpunit": "^8.5|^9.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "8.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symplify\\EasyTesting\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Testing made easy", + "support": { + "source": "https://github.com/symplify/easy-testing/tree/8.3.48" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2020-10-26T10:38:48+00:00" + }, + { + "name": "symplify/package-builder", + "version": "8.3.48", + "source": { + "type": "git", + "url": "https://github.com/symplify/package-builder.git", + "reference": "d262d5c2043c669f145d3eabf7d8114ae64cf169" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/package-builder/zipball/d262d5c2043c669f145d3eabf7d8114ae64cf169", + "reference": "d262d5c2043c669f145d3eabf7d8114ae64cf169", + "shasum": "" + }, + "require": { + "nette/finder": "^2.5", + "nette/utils": "^3.0", + "php": ">=7.2", + "symfony/config": "^4.4|^5.1", + "symfony/console": "^4.4|^5.1", + "symfony/dependency-injection": "^4.4|^5.1", + "symfony/finder": "^4.4|^5.1", + "symfony/http-kernel": "^4.4|^5.1", + "symfony/yaml": "^4.4|^5.1", + "symplify/autowire-array-parameter": "^8.3.48", + "symplify/symplify-kernel": "^8.3.48" + }, + "require-dev": { + "phpunit/phpunit": "^8.5|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symplify\\PackageBuilder\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Dependency Injection, Console and Kernel toolkit for Symplify packages.", + "support": { + "source": "https://github.com/symplify/package-builder/tree/8.3.48" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2020-10-26T10:38:48+00:00" + }, + { + "name": "symplify/set-config-resolver", + "version": "8.3.48", + "source": { + "type": "git", + "url": "https://github.com/symplify/set-config-resolver.git", + "reference": "1333995e30b7acfa7c4378c5f85de1dd96226c93" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/set-config-resolver/zipball/1333995e30b7acfa7c4378c5f85de1dd96226c93", + "reference": "1333995e30b7acfa7c4378c5f85de1dd96226c93", + "shasum": "" + }, + "require": { + "nette/utils": "^3.0", + "php": ">=7.2", + "symfony/config": "^4.4|^5.1", + "symfony/console": "^4.4|^5.1", + "symfony/dependency-injection": "^4.4|^5.1", + "symfony/filesystem": "^4.4|^5.1", + "symfony/finder": "^4.4|^5.1", + "symfony/yaml": "^4.4|^5.1", + "symplify/smart-file-system": "^8.3.48", + "symplify/symplify-kernel": "^8.3.48" + }, + "require-dev": { + "phpunit/phpunit": "^8.5|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symplify\\SetConfigResolver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Resolve config and sets from configs and cli opptions for CLI applications", + "support": { + "issues": "https://github.com/symplify/set-config-resolver/issues", + "source": "https://github.com/symplify/set-config-resolver/tree/8.3.48" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2020-10-26T10:38:48+00:00" + }, + { + "name": "symplify/smart-file-system", + "version": "8.3.48", + "source": { + "type": "git", + "url": "https://github.com/symplify/smart-file-system.git", + "reference": "4146069c725b7c6e2f53924a151286f1e26c132f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/smart-file-system/zipball/4146069c725b7c6e2f53924a151286f1e26c132f", + "reference": "4146069c725b7c6e2f53924a151286f1e26c132f", + "shasum": "" + }, + "require": { + "nette/utils": "^3.0", + "php": ">=7.2", + "symfony/filesystem": "^4.4|^5.1", + "symfony/finder": "^4.4|^5.1" + }, + "require-dev": { + "nette/finder": "^2.5", + "phpunit/phpunit": "^8.5|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symplify\\SmartFileSystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Sanitized FileInfo with safe getRealPath() and other handy methods", + "support": { + "source": "https://github.com/symplify/smart-file-system/tree/8.3.48" + }, + "funding": [ + { + "url": "https://www.paypal.me/rectorphp", + "type": "custom" + }, + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2020-10-26T10:38:48+00:00" + }, + { + "name": "symplify/symplify-kernel", + "version": "8.3.48", + "source": { + "type": "git", + "url": "https://github.com/symplify/symplify-kernel.git", + "reference": "c79dc6ce559b408c08e9fbc044f59cbb64961cf9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/symplify-kernel/zipball/c79dc6ce559b408c08e9fbc044f59cbb64961cf9", + "reference": "c79dc6ce559b408c08e9fbc044f59cbb64961cf9", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/console": "^4.4|^5.1", + "symfony/dependency-injection": "^4.4|^5.1", + "symfony/http-kernel": "^4.4|^5.1", + "symplify/package-builder": "^8.3.48", + "symplify/smart-file-system": "^8.3.48" + }, + "require-dev": { + "phpunit/phpunit": "^8.5|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symplify\\SymplifyKernel\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Internal Kernel for Symplify packages", + "support": { + "issues": "https://github.com/symplify/symplify-kernel/issues", + "source": "https://github.com/symplify/symplify-kernel/tree/8.3.48" + }, + "time": "2020-10-26T10:38:48+00:00" + }, { "name": "theseer/tokenizer", "version": "1.2.0", diff --git a/rector.php b/rector.php new file mode 100644 index 000000000..a0384e9ad --- /dev/null +++ b/rector.php @@ -0,0 +1,35 @@ +parameters(); + $parameters->set(Option::SETS, [SetList::PHP_80]); + + $parameters->set( + Option::PATHS, + [ + __DIR__ . '/src', + __DIR__ . '/tests', + __DIR__ . '/apps/backoffice/backend/src', + __DIR__ . '/apps/backoffice/frontend/src', + __DIR__ . '/apps/mooc/backend/src', + __DIR__ . '/apps/mooc/frontend/src', + __DIR__ . '/apps/bootstrap.php', + ] + ); + + $parameters->set( + Option::EXCLUDE_PATHS, + [ + __DIR__ . '/src/Shared/Infrastructure/Bus/Event/RabbitMq', + __DIR__ . '/tests/Shared/Infrastructure/Bus/Event/RabbitMq', + ] + ); +}; diff --git a/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php b/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php index 87560ccc4..4a3b5df29 100644 --- a/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php +++ b/src/Analytics/DomainEvents/Application/Store/DomainEventStorer.php @@ -13,11 +13,8 @@ final class DomainEventStorer { - private DomainEventsRepository $repository; - - public function __construct(DomainEventsRepository $repository) + public function __construct(private DomainEventsRepository $repository) { - $this->repository = $repository; } public function store( diff --git a/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php b/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php index 60ff5b338..fe743fb0b 100644 --- a/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php +++ b/src/Analytics/DomainEvents/Application/Store/StoreDomainEventOnOccurred.php @@ -13,11 +13,8 @@ final class StoreDomainEventOnOccurred implements DomainEventSubscriber { - private DomainEventStorer $storer; - - public function __construct(DomainEventStorer $storer) + public function __construct(private DomainEventStorer $storer) { - $this->storer = $storer; } public static function subscribedTo(): array diff --git a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php index dfcb26545..fb869a6b9 100644 --- a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php +++ b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php @@ -6,21 +6,8 @@ final class AnalyticsDomainEvent { - private AnalyticsDomainEventId $id; - private AnalyticsDomainEventAggregateId $aggregateId; - private AnalyticsDomainEventName $name; - private AnalyticsDomainEventBody $body; - - public function __construct( - AnalyticsDomainEventId $id, - AnalyticsDomainEventAggregateId $aggregateId, - AnalyticsDomainEventName $name, - AnalyticsDomainEventBody $body - ) { - $this->id = $id; - $this->aggregateId = $aggregateId; - $this->name = $name; - $this->body = $body; + public function __construct(private AnalyticsDomainEventId $id, private AnalyticsDomainEventAggregateId $aggregateId, private AnalyticsDomainEventName $name, private AnalyticsDomainEventBody $body) + { } public function id(): AnalyticsDomainEventId diff --git a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php index 71b17d129..d33a5ff8d 100644 --- a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php +++ b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEventBody.php @@ -6,11 +6,8 @@ final class AnalyticsDomainEventBody { - private array $value; - - public function __construct(array $value) + public function __construct(private array $value) { - $this->value = $value; } public function value(): array diff --git a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php index 3545e20ec..1c450e14e 100644 --- a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php +++ b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommand.php @@ -8,13 +8,8 @@ final class AuthenticateUserCommand implements Command { - private string $username; - private string $password; - - public function __construct(string $username, string $password) + public function __construct(private string $username, private string $password) { - $this->username = $username; - $this->password = $password; } public function username(): string diff --git a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php index 8d1c63e0c..8d0595cc8 100644 --- a/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php +++ b/src/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandler.php @@ -10,11 +10,8 @@ final class AuthenticateUserCommandHandler implements CommandHandler { - private UserAuthenticator $authenticator; - - public function __construct(UserAuthenticator $authenticator) + public function __construct(private UserAuthenticator $authenticator) { - $this->authenticator = $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 edf944b7f..201efb1aa 100644 --- a/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php +++ b/src/Backoffice/Auth/Application/Authenticate/UserAuthenticator.php @@ -13,11 +13,8 @@ final class UserAuthenticator { - private AuthRepository $repository; - - public function __construct(AuthRepository $repository) + public function __construct(private AuthRepository $repository) { - $this->repository = $repository; } public function authenticate(AuthUsername $username, AuthPassword $password): void diff --git a/src/Backoffice/Auth/Domain/AuthUser.php b/src/Backoffice/Auth/Domain/AuthUser.php index c68b91269..07b3790dc 100644 --- a/src/Backoffice/Auth/Domain/AuthUser.php +++ b/src/Backoffice/Auth/Domain/AuthUser.php @@ -6,13 +6,8 @@ final class AuthUser { - private AuthUsername $username; - private AuthPassword $password; - - public function __construct(AuthUsername $username, AuthPassword $password) + public function __construct(private AuthUsername $username, private AuthPassword $password) { - $this->username = $username; - $this->password = $password; } public function passwordMatches(AuthPassword $password): bool diff --git a/src/Backoffice/Courses/Application/BackofficeCourseResponse.php b/src/Backoffice/Courses/Application/BackofficeCourseResponse.php index 041db61ae..ecac5661c 100644 --- a/src/Backoffice/Courses/Application/BackofficeCourseResponse.php +++ b/src/Backoffice/Courses/Application/BackofficeCourseResponse.php @@ -6,15 +6,8 @@ final class BackofficeCourseResponse { - private string $id; - private string $name; - private string $duration; - - public function __construct(string $id, string $name, string $duration) + public function __construct(private string $id, private string $name, private string $duration) { - $this->id = $id; - $this->name = $name; - $this->duration = $duration; } public function id(): string diff --git a/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php b/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php index 7ff1f3e2a..3897c5f0c 100644 --- a/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php +++ b/src/Backoffice/Courses/Application/Create/BackofficeCourseCreator.php @@ -9,11 +9,8 @@ final class BackofficeCourseCreator { - private BackofficeCourseRepository $repository; - - public function __construct(BackofficeCourseRepository $repository) + public function __construct(private BackofficeCourseRepository $repository) { - $this->repository = $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 bd29c7847..97695b94b 100644 --- a/src/Backoffice/Courses/Application/Create/CreateBackofficeCourseOnCourseCreated.php +++ b/src/Backoffice/Courses/Application/Create/CreateBackofficeCourseOnCourseCreated.php @@ -9,11 +9,8 @@ final class CreateBackofficeCourseOnCourseCreated implements DomainEventSubscriber { - private BackofficeCourseCreator $creator; - - public function __construct(BackofficeCourseCreator $creator) + public function __construct(private BackofficeCourseCreator $creator) { - $this->creator = $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 cab20e114..b06205057 100644 --- a/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php +++ b/src/Backoffice/Courses/Application/SearchAll/AllBackofficeCoursesSearcher.php @@ -12,11 +12,8 @@ final class AllBackofficeCoursesSearcher { - private BackofficeCourseRepository $repository; - - public function __construct(BackofficeCourseRepository $repository) + public function __construct(private BackofficeCourseRepository $repository) { - $this->repository = $repository; } public function searchAll(): BackofficeCoursesResponse diff --git a/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQueryHandler.php b/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQueryHandler.php index 3eee422b4..3cfb7b257 100644 --- a/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQueryHandler.php +++ b/src/Backoffice/Courses/Application/SearchAll/SearchAllBackofficeCoursesQueryHandler.php @@ -9,11 +9,8 @@ final class SearchAllBackofficeCoursesQueryHandler implements QueryHandler { - private AllBackofficeCoursesSearcher $searcher; - - public function __construct(AllBackofficeCoursesSearcher $searcher) + public function __construct(private AllBackofficeCoursesSearcher $searcher) { - $this->searcher = $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 0cd6bab36..365459a8d 100644 --- a/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php +++ b/src/Backoffice/Courses/Application/SearchByCriteria/BackofficeCoursesByCriteriaSearcher.php @@ -15,11 +15,8 @@ final class BackofficeCoursesByCriteriaSearcher { - private BackofficeCourseRepository $repository; - - public function __construct(BackofficeCourseRepository $repository) + public function __construct(private BackofficeCourseRepository $repository) { - $this->repository = $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 52383d38b..5c2d9a80d 100644 --- a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQuery.php +++ b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQuery.php @@ -8,24 +8,13 @@ final class SearchBackofficeCoursesByCriteriaQuery implements Query { - private array $filters; - private ?string $orderBy; - private ?string $order; - private ?int $limit; - private ?int $offset; - public function __construct( - array $filters, - string $orderBy = null, - string $order = null, - int $limit = null, - int $offset = null + private array $filters, + private ?string $orderBy, + private ?string $order, + private ?int $limit, + private ?int $offset ) { - $this->filters = $filters; - $this->orderBy = $orderBy; - $this->order = $order; - $this->limit = $limit; - $this->offset = $offset; } public function filters(): array diff --git a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php index 36577d51e..8b65f6a22 100644 --- a/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php +++ b/src/Backoffice/Courses/Application/SearchByCriteria/SearchBackofficeCoursesByCriteriaQueryHandler.php @@ -11,11 +11,8 @@ final class SearchBackofficeCoursesByCriteriaQueryHandler implements QueryHandler { - private BackofficeCoursesByCriteriaSearcher $searcher; - - public function __construct(BackofficeCoursesByCriteriaSearcher $searcher) + public function __construct(private BackofficeCoursesByCriteriaSearcher $searcher) { - $this->searcher = $searcher; } public function __invoke(SearchBackofficeCoursesByCriteriaQuery $query): BackofficeCoursesResponse diff --git a/src/Backoffice/Courses/Domain/BackofficeCourse.php b/src/Backoffice/Courses/Domain/BackofficeCourse.php index a9cadd0f0..877e20066 100644 --- a/src/Backoffice/Courses/Domain/BackofficeCourse.php +++ b/src/Backoffice/Courses/Domain/BackofficeCourse.php @@ -8,15 +8,8 @@ final class BackofficeCourse extends AggregateRoot { - private string $id; - private string $name; - private string $duration; - - public function __construct(string $id, string $name, string $duration) + public function __construct(private string $id, private string $name, private string $duration) { - $this->id = $id; - $this->name = $name; - $this->duration = $duration; } public static function fromPrimitives(array $primitives): BackofficeCourse diff --git a/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php b/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php index f6fa776f3..70498e140 100644 --- a/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php +++ b/src/Backoffice/Courses/Infrastructure/Persistence/InMemoryCacheBackofficeCourseRepository.php @@ -13,11 +13,9 @@ final class InMemoryCacheBackofficeCourseRepository implements BackofficeCourseR { private static array $allCoursesCache = []; private static array $matchingCache = []; - private BackofficeCourseRepository $repository; - public function __construct(BackofficeCourseRepository $repository) + public function __construct(private BackofficeCourseRepository $repository) { - $this->repository = $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 3c4227395..a8f7072fc 100644 --- a/src/Mooc/Courses/Application/Create/CourseCreator.php +++ b/src/Mooc/Courses/Application/Create/CourseCreator.php @@ -13,13 +13,8 @@ final class CourseCreator { - private CourseRepository $repository; - private EventBus $bus; - - public function __construct(CourseRepository $repository, EventBus $bus) + public function __construct(private CourseRepository $repository, private EventBus $bus) { - $this->repository = $repository; - $this->bus = $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 22e09e218..d8988305f 100644 --- a/src/Mooc/Courses/Application/Create/CreateCourseCommand.php +++ b/src/Mooc/Courses/Application/Create/CreateCourseCommand.php @@ -8,15 +8,8 @@ final class CreateCourseCommand implements Command { - private string $id; - private string $name; - private string $duration; - - public function __construct(string $id, string $name, string $duration) + public function __construct(private string $id, private string $name, private string $duration) { - $this->id = $id; - $this->name = $name; - $this->duration = $duration; } public function id(): string diff --git a/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php b/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php index 7365093e9..bd1963dfc 100644 --- a/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php +++ b/src/Mooc/Courses/Application/Create/CreateCourseCommandHandler.php @@ -11,11 +11,8 @@ final class CreateCourseCommandHandler implements CommandHandler { - private CourseCreator $creator; - - public function __construct(CourseCreator $creator) + public function __construct(private CourseCreator $creator) { - $this->creator = $creator; } public function __invoke(CreateCourseCommand $command): void diff --git a/src/Mooc/Courses/Application/Find/CourseFinder.php b/src/Mooc/Courses/Application/Find/CourseFinder.php index 7c5ec7c4f..82fb018c2 100644 --- a/src/Mooc/Courses/Application/Find/CourseFinder.php +++ b/src/Mooc/Courses/Application/Find/CourseFinder.php @@ -11,11 +11,8 @@ final class CourseFinder { - private CourseRepository $repository; - - public function __construct(CourseRepository $repository) + public function __construct(private CourseRepository $repository) { - $this->repository = $repository; } public function __invoke(CourseId $id): Course diff --git a/src/Mooc/Courses/Application/Update/CourseRenamer.php b/src/Mooc/Courses/Application/Update/CourseRenamer.php index c3f6b1c3e..39e1f82a7 100644 --- a/src/Mooc/Courses/Application/Update/CourseRenamer.php +++ b/src/Mooc/Courses/Application/Update/CourseRenamer.php @@ -12,15 +12,11 @@ final class CourseRenamer { - private CourseRepository $repository; private CourseFinder $finder; - private EventBus $bus; - public function __construct(CourseRepository $repository, EventBus $bus) + public function __construct(private CourseRepository $repository, private EventBus $bus) { - $this->repository = $repository; - $this->finder = new CourseFinder($repository); - $this->bus = $bus; + $this->finder = new CourseFinder($repository); } public function __invoke(CourseId $id, CourseName $newName): void diff --git a/src/Mooc/Courses/Domain/Course.php b/src/Mooc/Courses/Domain/Course.php index 01320f5db..940193bbc 100644 --- a/src/Mooc/Courses/Domain/Course.php +++ b/src/Mooc/Courses/Domain/Course.php @@ -9,15 +9,8 @@ final class Course extends AggregateRoot { - private CourseId $id; - private CourseName $name; - private CourseDuration $duration; - - public function __construct(CourseId $id, CourseName $name, CourseDuration $duration) + public function __construct(private CourseId $id, private CourseName $name, private CourseDuration $duration) { - $this->id = $id; - $this->name = $name; - $this->duration = $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 f7562e437..39b6d2181 100644 --- a/src/Mooc/Courses/Domain/CourseCreatedDomainEvent.php +++ b/src/Mooc/Courses/Domain/CourseCreatedDomainEvent.php @@ -8,20 +8,14 @@ final class CourseCreatedDomainEvent extends DomainEvent { - private string $name; - private string $duration; - public function __construct( string $id, - string $name, - string $duration, + private string $name, + private string $duration, string $eventId = null, string $occurredOn = null ) { parent::__construct($id, $eventId, $occurredOn); - - $this->name = $name; - $this->duration = $duration; } public static function eventName(): string diff --git a/src/Mooc/Courses/Domain/CourseNotExist.php b/src/Mooc/Courses/Domain/CourseNotExist.php index fe001bf40..fee90ff81 100644 --- a/src/Mooc/Courses/Domain/CourseNotExist.php +++ b/src/Mooc/Courses/Domain/CourseNotExist.php @@ -9,12 +9,8 @@ final class CourseNotExist extends DomainError { - private CourseId $id; - - public function __construct(CourseId $id) + public function __construct(private CourseId $id) { - $this->id = $id; - parent::__construct(); } diff --git a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php index bef89c7ad..1709f2b17 100644 --- a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php +++ b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterFinder.php @@ -9,11 +9,8 @@ final class CoursesCounterFinder { - private CoursesCounterRepository $repository; - - public function __construct(CoursesCounterRepository $repository) + public function __construct(private CoursesCounterRepository $repository) { - $this->repository = $repository; } public function __invoke(): CoursesCounterResponse diff --git a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php index f42f8f763..72580d4ae 100644 --- a/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php +++ b/src/Mooc/CoursesCounter/Application/Find/CoursesCounterResponse.php @@ -8,11 +8,8 @@ final class CoursesCounterResponse implements Response { - private int $total; - - public function __construct(int $total) + public function __construct(private int $total) { - $this->total = $total; } public function total(): int diff --git a/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php b/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php index 94b7185f0..666e3bbb5 100644 --- a/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php +++ b/src/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandler.php @@ -8,11 +8,8 @@ final class FindCoursesCounterQueryHandler implements QueryHandler { - private CoursesCounterFinder $finder; - - public function __construct(CoursesCounterFinder $finder) + public function __construct(private CoursesCounterFinder $finder) { - $this->finder = $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 a3d63de32..5e4dd2313 100644 --- a/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php +++ b/src/Mooc/CoursesCounter/Application/Increment/CoursesCounterIncrementer.php @@ -13,18 +13,11 @@ final class CoursesCounterIncrementer { - private CoursesCounterRepository $repository; - private UuidGenerator $uuidGenerator; - private EventBus $bus; - public function __construct( - CoursesCounterRepository $repository, - UuidGenerator $uuidGenerator, - EventBus $bus + private CoursesCounterRepository $repository, + private UuidGenerator $uuidGenerator, + private EventBus $bus ) { - $this->repository = $repository; - $this->uuidGenerator = $uuidGenerator; - $this->bus = $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 9a97be30f..13fd1e49e 100644 --- a/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php +++ b/src/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreated.php @@ -11,11 +11,8 @@ final class IncrementCoursesCounterOnCourseCreated implements DomainEventSubscriber { - private CoursesCounterIncrementer $incrementer; - - public function __construct(CoursesCounterIncrementer $incrementer) + public function __construct(private CoursesCounterIncrementer $incrementer) { - $this->incrementer = $incrementer; } public static function subscribedTo(): array diff --git a/src/Mooc/CoursesCounter/Domain/CoursesCounter.php b/src/Mooc/CoursesCounter/Domain/CoursesCounter.php index 6a6d62d59..5dc07366c 100644 --- a/src/Mooc/CoursesCounter/Domain/CoursesCounter.php +++ b/src/Mooc/CoursesCounter/Domain/CoursesCounter.php @@ -10,14 +10,13 @@ final class CoursesCounter extends AggregateRoot { - private CoursesCounterTotal $total; - private array $existingCourses; - private CoursesCounterId $id; + private array $existingCourses; - public function __construct(CoursesCounterId $id, CoursesCounterTotal $total, CourseId ...$existingCourses) - { - $this->id = $id; - $this->total = $total; + public function __construct( + private CoursesCounterId $id, + private CoursesCounterTotal $total, + CourseId ...$existingCourses + ) { $this->existingCourses = $existingCourses; } diff --git a/src/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEvent.php b/src/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEvent.php index 0cd06fbf3..7a40482f1 100644 --- a/src/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEvent.php +++ b/src/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEvent.php @@ -8,13 +8,13 @@ final class CoursesCounterIncrementedDomainEvent extends DomainEvent { - private int $total; - - public function __construct(string $aggregateId, int $total, string $eventId = null, string $occurredOn = null) - { + public function __construct( + string $aggregateId, + private int $total, + string $eventId = null, + string $occurredOn = null + ) { parent::__construct($aggregateId, $eventId, $occurredOn); - - $this->total = $total; } public static function eventName(): string diff --git a/src/Mooc/Shared/Infrastructure/Symfony/DependencyInjection/mooc_services.yaml b/src/Mooc/Shared/Infrastructure/Symfony/DependencyInjection/mooc_services.yaml index 014bbdf3c..fa4f5522b 100644 --- a/src/Mooc/Shared/Infrastructure/Symfony/DependencyInjection/mooc_services.yaml +++ b/src/Mooc/Shared/Infrastructure/Symfony/DependencyInjection/mooc_services.yaml @@ -1,13 +1,13 @@ services: # Databases Doctrine\ORM\EntityManager: - factory: [CodelyTv\Mooc\Shared\Infrastructure\Doctrine\MoocEntityManagerFactory, create] + factory: [ CodelyTv\Mooc\Shared\Infrastructure\Doctrine\MoocEntityManagerFactory, create ] arguments: - - driver: '%env(MOOC_DATABASE_DRIVER)%' - host: '%env(MOOC_DATABASE_HOST)%' - port: '%env(MOOC_DATABASE_PORT)%' - dbname: '%env(MOOC_DATABASE_NAME)%' - user: '%env(MOOC_DATABASE_USER)%' + - driver: '%env(MOOC_DATABASE_DRIVER)%' + host: '%env(MOOC_DATABASE_HOST)%' + port: '%env(MOOC_DATABASE_PORT)%' + dbname: '%env(MOOC_DATABASE_NAME)%' + user: '%env(MOOC_DATABASE_USER)%' password: '%env(MOOC_DATABASE_PASSWORD)%' - '%env(APP_ENV)%' tags: diff --git a/src/Mooc/Videos/Application/Create/CreateVideoCommand.php b/src/Mooc/Videos/Application/Create/CreateVideoCommand.php index a25e1dae5..b592a4c6d 100644 --- a/src/Mooc/Videos/Application/Create/CreateVideoCommand.php +++ b/src/Mooc/Videos/Application/Create/CreateVideoCommand.php @@ -8,19 +8,13 @@ final class CreateVideoCommand implements Command { - private string $id; - private string $type; - private string $title; - private string $url; - private string $courseId; - - public function __construct(string $id, string $type, string $title, string $url, string $courseId) - { - $this->id = $id; - $this->type = $type; - $this->title = $title; - $this->url = $url; - $this->courseId = $courseId; + public function __construct( + private string $id, + private string $type, + 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 9b0da1f71..b758be255 100644 --- a/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php +++ b/src/Mooc/Videos/Application/Create/CreateVideoCommandHandler.php @@ -13,11 +13,8 @@ final class CreateVideoCommandHandler implements CommandHandler { - private VideoCreator $creator; - - public function __construct(VideoCreator $creator) + public function __construct(private VideoCreator $creator) { - $this->creator = $creator; } public function __invoke(CreateVideoCommand $command) diff --git a/src/Mooc/Videos/Application/Create/VideoCreator.php b/src/Mooc/Videos/Application/Create/VideoCreator.php index 297d6e688..1901a3c7e 100644 --- a/src/Mooc/Videos/Application/Create/VideoCreator.php +++ b/src/Mooc/Videos/Application/Create/VideoCreator.php @@ -15,13 +15,8 @@ final class VideoCreator { - private VideoRepository $repository; - private EventBus $bus; - - public function __construct(VideoRepository $repository, EventBus $bus) + public function __construct(private VideoRepository $repository, private EventBus $bus) { - $this->repository = $repository; - $this->bus = $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 3a9238a2a..81e969160 100644 --- a/src/Mooc/Videos/Application/Find/FindVideoQuery.php +++ b/src/Mooc/Videos/Application/Find/FindVideoQuery.php @@ -8,11 +8,8 @@ final class FindVideoQuery implements Query { - private string $id; - - public function __construct(string $id) + public function __construct(private string $id) { - $this->id = $id; } public function id(): string diff --git a/src/Mooc/Videos/Application/Find/VideoResponse.php b/src/Mooc/Videos/Application/Find/VideoResponse.php index 1f9f2e739..a3798a3d8 100644 --- a/src/Mooc/Videos/Application/Find/VideoResponse.php +++ b/src/Mooc/Videos/Application/Find/VideoResponse.php @@ -8,19 +8,13 @@ final class VideoResponse implements Response { - private string $id; - private string $type; - private string $title; - private string $url; - private string $courseId; - - public function __construct(string $id, string $type, string $title, string $url, string $courseId) - { - $this->id = $id; - $this->type = $type; - $this->title = $title; - $this->url = $url; - $this->courseId = $courseId; + public function __construct( + private string $id, + private string $type, + private string $title, + private string $url, + private string $courseId + ) { } public function id(): string diff --git a/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php b/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php index e50bbc59a..c36c493a3 100644 --- a/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php +++ b/src/Mooc/Videos/Application/Trim/TrimVideoCommand.php @@ -8,15 +8,8 @@ final class TrimVideoCommand implements Command { - private string $videoId; - private int $keepFromSecond; - private int $keepToSecond; - - public function __construct(string $videoId, int $keepFromSecond, int $keepToSecond) + public function __construct(private string $videoId, private int $keepFromSecond, private int $keepToSecond) { - $this->videoId = $videoId; - $this->keepFromSecond = $keepFromSecond; - $this->keepToSecond = $keepToSecond; } public function videoId(): string diff --git a/src/Mooc/Videos/Application/Trim/TrimVideoCommandHandler.php b/src/Mooc/Videos/Application/Trim/TrimVideoCommandHandler.php index 9300617ff..8c5f910dd 100644 --- a/src/Mooc/Videos/Application/Trim/TrimVideoCommandHandler.php +++ b/src/Mooc/Videos/Application/Trim/TrimVideoCommandHandler.php @@ -9,11 +9,8 @@ final class TrimVideoCommandHandler { - private VideoTrimmer $trimmer; - - public function __construct(VideoTrimmer $trimmer) + public function __construct(private VideoTrimmer $trimmer) { - $this->trimmer = $trimmer; } public function __invoke(TrimVideoCommand $command) diff --git a/src/Mooc/Videos/Application/Update/VideoTitleUpdater.php b/src/Mooc/Videos/Application/Update/VideoTitleUpdater.php index 9f1c97e33..4f473cdab 100644 --- a/src/Mooc/Videos/Application/Update/VideoTitleUpdater.php +++ b/src/Mooc/Videos/Application/Update/VideoTitleUpdater.php @@ -12,12 +12,10 @@ final class VideoTitleUpdater { private VideoFinder $finder; - private VideoRepository $repository; - public function __construct(VideoRepository $repository) + public function __construct(private VideoRepository $repository) { - $this->finder = new VideoFinder($repository); - $this->repository = $repository; + $this->finder = new VideoFinder($repository); } public function __invoke(VideoId $id, VideoTitle $newTitle): void diff --git a/src/Mooc/Videos/Domain/Video.php b/src/Mooc/Videos/Domain/Video.php index 6ac261b40..8bdfdf7c4 100644 --- a/src/Mooc/Videos/Domain/Video.php +++ b/src/Mooc/Videos/Domain/Video.php @@ -10,19 +10,13 @@ final class Video extends AggregateRoot { - private VideoId $id; - private VideoType $type; - private VideoTitle $title; - private VideoUrl $url; - private CourseId $courseId; - - public function __construct(VideoId $id, VideoType $type, VideoTitle $title, VideoUrl $url, CourseId $courseId) - { - $this->id = $id; - $this->type = $type; - $this->title = $title; - $this->url = $url; - $this->courseId = $courseId; + public function __construct( + private VideoId $id, + private VideoType $type, + private VideoTitle $title, + private VideoUrl $url, + private CourseId $courseId + ) { } public static function create( diff --git a/src/Mooc/Videos/Domain/VideoCreatedDomainEvent.php b/src/Mooc/Videos/Domain/VideoCreatedDomainEvent.php index e131e5747..93458fdfa 100644 --- a/src/Mooc/Videos/Domain/VideoCreatedDomainEvent.php +++ b/src/Mooc/Videos/Domain/VideoCreatedDomainEvent.php @@ -8,26 +8,16 @@ final class VideoCreatedDomainEvent extends DomainEvent { - private string $type; - private string $title; - private string $url; - private string $courseId; - public function __construct( string $id, - string $type, - string $title, - string $url, - string $courseId, + private string $type, + private string $title, + private string $url, + private string $courseId, string $eventId = null, string $occurredOn = null ) { parent::__construct($id, $eventId, $occurredOn); - - $this->type = $type; - $this->title = $title; - $this->url = $url; - $this->courseId = $courseId; } public static function eventName(): string diff --git a/src/Mooc/Videos/Domain/VideoFinder.php b/src/Mooc/Videos/Domain/VideoFinder.php index 92d6f772f..e4b55157a 100644 --- a/src/Mooc/Videos/Domain/VideoFinder.php +++ b/src/Mooc/Videos/Domain/VideoFinder.php @@ -6,11 +6,8 @@ final class VideoFinder { - private VideoRepository $repository; - - public function __construct(VideoRepository $repository) + public function __construct(private VideoRepository $repository) { - $this->repository = $repository; } public function __invoke(VideoId $id): Video diff --git a/src/Mooc/Videos/Domain/VideoNotFound.php b/src/Mooc/Videos/Domain/VideoNotFound.php index d7b159438..a252dcd83 100644 --- a/src/Mooc/Videos/Domain/VideoNotFound.php +++ b/src/Mooc/Videos/Domain/VideoNotFound.php @@ -8,12 +8,8 @@ final class VideoNotFound extends DomainError { - private VideoId $id; - - public function __construct(VideoId $id) + public function __construct(private VideoId $id) { - $this->id = $id; - parent::__construct(); } diff --git a/src/Shared/Domain/Bus/Event/DomainEvent.php b/src/Shared/Domain/Bus/Event/DomainEvent.php index 0f7b80cf0..daafdf1ee 100644 --- a/src/Shared/Domain/Bus/Event/DomainEvent.php +++ b/src/Shared/Domain/Bus/Event/DomainEvent.php @@ -10,15 +10,13 @@ abstract class DomainEvent { - private string $aggregateId; private string $eventId; private string $occurredOn; - public function __construct(string $aggregateId, string $eventId = null, string $occurredOn = null) + public function __construct(private string $aggregateId, string $eventId = null, string $occurredOn = null) { - $this->aggregateId = $aggregateId; - $this->eventId = $eventId ?: Uuid::random()->value(); - $this->occurredOn = $occurredOn ?: Utils::dateToString(new DateTimeImmutable()); + $this->eventId = $eventId ?: Uuid::random()->value(); + $this->occurredOn = $occurredOn ?: Utils::dateToString(new DateTimeImmutable()); } abstract public static function fromPrimitives( diff --git a/src/Shared/Domain/Collection.php b/src/Shared/Domain/Collection.php index a3e581b0f..2eba59aaa 100644 --- a/src/Shared/Domain/Collection.php +++ b/src/Shared/Domain/Collection.php @@ -11,13 +11,9 @@ abstract class Collection implements Countable, IteratorAggregate { - private array $items; - - public function __construct(array $items) + public function __construct(private array $items) { Assert::arrayOf($this->type(), $items); - - $this->items = $items; } abstract protected function type(): string; diff --git a/src/Shared/Domain/Criteria/Criteria.php b/src/Shared/Domain/Criteria/Criteria.php index 649442dc6..e73ee933f 100644 --- a/src/Shared/Domain/Criteria/Criteria.php +++ b/src/Shared/Domain/Criteria/Criteria.php @@ -6,17 +6,12 @@ final class Criteria { - private Filters $filters; - private Order $order; - private ?int $offset; - private ?int $limit; - - public function __construct(Filters $filters, Order $order, ?int $offset, ?int $limit) - { - $this->filters = $filters; - $this->order = $order; - $this->offset = $offset; - $this->limit = $limit; + public function __construct( + private Filters $filters, + 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 3d77b1916..89e031132 100644 --- a/src/Shared/Domain/Criteria/Filter.php +++ b/src/Shared/Domain/Criteria/Filter.php @@ -6,15 +6,11 @@ final class Filter { - private FilterField $field; - private FilterOperator $operator; - private FilterValue $value; - - public function __construct(FilterField $field, FilterOperator $operator, FilterValue $value) - { - $this->field = $field; - $this->operator = $operator; - $this->value = $value; + 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/Order.php b/src/Shared/Domain/Criteria/Order.php index 2ab172180..08f342bd1 100644 --- a/src/Shared/Domain/Criteria/Order.php +++ b/src/Shared/Domain/Criteria/Order.php @@ -6,13 +6,8 @@ final class Order { - private OrderBy $orderBy; - private OrderType $orderType; - - public function __construct(OrderBy $orderBy, OrderType $orderType) + public function __construct(private OrderBy $orderBy, private OrderType $orderType) { - $this->orderBy = $orderBy; - $this->orderType = $orderType; } public static function createDesc(OrderBy $orderBy): Order diff --git a/src/Shared/Domain/Second.php b/src/Shared/Domain/Second.php index 30ec59f8d..6ed51277e 100644 --- a/src/Shared/Domain/Second.php +++ b/src/Shared/Domain/Second.php @@ -1,6 +1,6 @@ ensureIntervalEndsAfterStart($from, $to); - - $this->from = $from; - $this->to = $to; } public function from(): Second diff --git a/src/Shared/Domain/ValueObject/Enum.php b/src/Shared/Domain/ValueObject/Enum.php index 6d96dbe96..d3a754c02 100644 --- a/src/Shared/Domain/ValueObject/Enum.php +++ b/src/Shared/Domain/ValueObject/Enum.php @@ -6,19 +6,17 @@ use CodelyTv\Shared\Domain\Utils; use ReflectionClass; +use Stringable; use function in_array; use function Lambdish\Phunctional\reindex; -abstract class Enum +abstract class Enum implements Stringable { protected static array $cache = []; - protected $value; - public function __construct($value) + public function __construct(protected $value) { $this->ensureIsBetweenAcceptedValues($value); - - $this->value = $value; } abstract protected function throwExceptionForInvalidValue($value); diff --git a/src/Shared/Domain/ValueObject/IntValueObject.php b/src/Shared/Domain/ValueObject/IntValueObject.php index d7c15ac72..fa720a4ee 100644 --- a/src/Shared/Domain/ValueObject/IntValueObject.php +++ b/src/Shared/Domain/ValueObject/IntValueObject.php @@ -4,13 +4,10 @@ namespace CodelyTv\Shared\Domain\ValueObject; -abstract class IntValueObject +abstract class IntValueObject implements \Stringable { - protected int $value; - - public function __construct(int $value) + public function __construct(protected int $value) { - $this->value = $value; } public function value(): int diff --git a/src/Shared/Domain/ValueObject/StringValueObject.php b/src/Shared/Domain/ValueObject/StringValueObject.php index cda83c69d..59c2b2eab 100644 --- a/src/Shared/Domain/ValueObject/StringValueObject.php +++ b/src/Shared/Domain/ValueObject/StringValueObject.php @@ -4,13 +4,10 @@ namespace CodelyTv\Shared\Domain\ValueObject; -abstract class StringValueObject +abstract class StringValueObject implements \Stringable { - protected string $value; - - public function __construct(string $value) + public function __construct(protected string $value) { - $this->value = $value; } public function value(): string diff --git a/src/Shared/Domain/ValueObject/Uuid.php b/src/Shared/Domain/ValueObject/Uuid.php index a69a65c5e..192e722b3 100644 --- a/src/Shared/Domain/ValueObject/Uuid.php +++ b/src/Shared/Domain/ValueObject/Uuid.php @@ -6,16 +6,13 @@ use InvalidArgumentException; use Ramsey\Uuid\Uuid as RamseyUuid; +use Stringable; -class Uuid +class Uuid implements Stringable { - protected string $value; - - public function __construct(string $value) + public function __construct(protected string $value) { $this->ensureIsValidUuid($value); - - $this->value = $value; } public static function random(): self diff --git a/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php b/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php index 257b6fd3e..9dd461f0e 100644 --- a/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php +++ b/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php @@ -32,7 +32,7 @@ public function dispatch(Command $command): void { try { $this->bus->dispatch($command); - } catch (NoHandlerForMessageException $unused) { + } catch (NoHandlerForMessageException) { throw new CommandNotRegisteredError($command); } catch (HandlerFailedException $error) { throw $error->getPrevious(); diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php b/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php index c5e3a15ba..a50ba7db8 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventJsonDeserializer.php @@ -10,11 +10,8 @@ final class DomainEventJsonDeserializer { - private DomainEventMapping $mapping; - - public function __construct(DomainEventMapping $mapping) + public function __construct(private DomainEventMapping $mapping) { - $this->mapping = $mapping; } public function deserialize(string $domainEvent): DomainEvent diff --git a/src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php b/src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php index ecd59bc34..22d9941ef 100644 --- a/src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/InMemory/InMemorySymfonyEventBus.php @@ -34,7 +34,7 @@ public function publish(DomainEvent ...$events): void foreach ($events as $event) { try { $this->bus->dispatch($event); - } catch (NoHandlerForMessageException $error) { + } catch (NoHandlerForMessageException) { } } } diff --git a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php index 74e976547..e6793eb37 100644 --- a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php +++ b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php @@ -17,12 +17,10 @@ final class MySqlDoctrineDomainEventsConsumer { private Connection $connection; - private DomainEventMapping $eventMapping; - public function __construct(EntityManager $entityManager, DomainEventMapping $eventMapping) + public function __construct(EntityManager $entityManager, private DomainEventMapping $eventMapping) { $this->connection = $entityManager->getConnection(); - $this->eventMapping = $eventMapping; } public function consume(callable $subscribers, int $eventsToConsume): void @@ -53,7 +51,7 @@ private function executeSubscribers(callable $subscribers): callable ); $subscribers($domainEvent); - } catch (RuntimeException $error) { + } catch (RuntimeException) { } }; } diff --git a/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php b/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php index 206a9126b..594897b5f 100644 --- a/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php +++ b/src/Shared/Infrastructure/Bus/Event/WithMonitoring/WithPrometheusMonitoringEventBus.php @@ -11,15 +11,8 @@ final class WithPrometheusMonitoringEventBus implements EventBus { - private PrometheusMonitor $monitor; - private string $appName; - private EventBus $bus; - - public function __construct(PrometheusMonitor $monitor, string $appName, EventBus $bus) + public function __construct(private PrometheusMonitor $monitor, private string $appName, private EventBus $bus) { - $this->monitor = $monitor; - $this->appName = $appName; - $this->bus = $bus; } public function publish(DomainEvent ...$events): void diff --git a/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBus.php b/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBus.php index bf00586b9..31092cb53 100644 --- a/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBus.php +++ b/src/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBus.php @@ -36,7 +36,7 @@ public function ask(Query $query): ?Response $stamp = $this->bus->dispatch($query)->last(HandledStamp::class); return $stamp->getResult(); - } catch (NoHandlerForMessageException $unused) { + } catch (NoHandlerForMessageException) { throw new QueryNotRegisteredError($query); } } diff --git a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php index c3a99e2c3..5c3fdc859 100644 --- a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php +++ b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClient.php @@ -8,13 +8,8 @@ final class ElasticsearchClient { - private Client $client; - private string $indexPrefix; - - public function __construct(Client $client, string $indexPrefix) + public function __construct(private Client $client, private string $indexPrefix) { - $this->client = $client; - $this->indexPrefix = $indexPrefix; } public function persist(string $aggregateName, string $identifier, array $plainBody): void diff --git a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php index 1111c271c..fb1a92364 100644 --- a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php +++ b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php @@ -49,7 +49,7 @@ private function indexExists(Client $client, string $indexName): bool $client->indices()->getSettings(['index' => $indexName]); return true; - } catch (Missing404Exception $unused) { + } catch (Missing404Exception) { return false; } } diff --git a/src/Shared/Infrastructure/Logger/MonologLogger.php b/src/Shared/Infrastructure/Logger/MonologLogger.php index 46a8618d6..2235cc240 100644 --- a/src/Shared/Infrastructure/Logger/MonologLogger.php +++ b/src/Shared/Infrastructure/Logger/MonologLogger.php @@ -8,11 +8,8 @@ final class MonologLogger implements Logger { - private \Monolog\Logger $logger; - - public function __construct(\Monolog\Logger $logger) + public function __construct(private \Monolog\Logger $logger) { - $this->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 cea3bfd88..3b6f88173 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php @@ -14,15 +14,8 @@ final class DoctrineCriteriaConverter { - private Criteria $criteria; - private array $criteriaToDoctrineFields; - private array $hydrators; - - public function __construct(Criteria $criteria, array $criteriaToDoctrineFields = [], array $hydrators = []) + public function __construct(private Criteria $criteria, private array $criteriaToDoctrineFields = [], private array $hydrators = []) { - $this->criteria = $criteria; - $this->criteriaToDoctrineFields = $criteriaToDoctrineFields; - $this->hydrators = $hydrators; } public static function convert( diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php index 293903e93..8b785a09f 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php @@ -10,11 +10,8 @@ abstract class DoctrineRepository { - private EntityManager $entityManager; - - public function __construct(EntityManager $entityManager) + public function __construct(private EntityManager $entityManager) { - $this->entityManager = $entityManager; } protected function entityManager(): EntityManager diff --git a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php index 082d4cd4d..c6b5a5cd1 100644 --- a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php +++ b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticsearchRepository.php @@ -12,11 +12,8 @@ abstract class ElasticsearchRepository { - private ElasticsearchClient $client; - - public function __construct(ElasticsearchClient $client) + public function __construct(private ElasticsearchClient $client) { - $this->client = $client; } abstract protected function aggregateName(): string; @@ -48,7 +45,7 @@ protected function searchRawElasticsearchQuery(array $params): array $hits = get_in(['hits', 'hits'], $result, []); return map($this->elasticValuesExtractor(), $hits); - } catch (Missing404Exception $unused) { + } catch (Missing404Exception) { return []; } } diff --git a/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php b/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php index 4ab57a6cd..37692e791 100644 --- a/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php +++ b/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php @@ -35,6 +35,6 @@ public function onKernelRequest(RequestEvent $event): void private function containsHeader(Request $request, $name, $value): bool { - return 0 === strpos($request->headers->get($name), $value); + return str_starts_with($request->headers->get($name), $value); } } diff --git a/src/Shared/Infrastructure/Symfony/ApiController.php b/src/Shared/Infrastructure/Symfony/ApiController.php index eda372f9a..459c3eb6e 100644 --- a/src/Shared/Infrastructure/Symfony/ApiController.php +++ b/src/Shared/Infrastructure/Symfony/ApiController.php @@ -13,17 +13,11 @@ abstract class ApiController { - private QueryBus $queryBus; - private CommandBus $commandBus; - public function __construct( - QueryBus $queryBus, - CommandBus $commandBus, + private QueryBus $queryBus, + private CommandBus $commandBus, ApiExceptionsHttpStatusCodeMapping $exceptionHandler ) { - $this->queryBus = $queryBus; - $this->commandBus = $commandBus; - each( 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 4474cfb09..2ecf6e42f 100644 --- a/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php +++ b/src/Shared/Infrastructure/Symfony/ApiExceptionListener.php @@ -12,11 +12,8 @@ final class ApiExceptionListener { - private ApiExceptionsHttpStatusCodeMapping $exceptionHandler; - - public function __construct(ApiExceptionsHttpStatusCodeMapping $exceptionHandler) + public function __construct(private ApiExceptionsHttpStatusCodeMapping $exceptionHandler) { - $this->exceptionHandler = $exceptionHandler; } public function onException(ExceptionEvent $event): void diff --git a/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php b/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php index 8223a3a2b..36083593e 100644 --- a/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php +++ b/src/Shared/Infrastructure/Symfony/BasicHttpAuthMiddleware.php @@ -14,11 +14,8 @@ final class BasicHttpAuthMiddleware { - private CommandBus $bus; - - public function __construct(CommandBus $bus) + public function __construct(private CommandBus $bus) { - $this->bus = $bus; } public function onKernelRequest(RequestEvent $event): void @@ -46,7 +43,7 @@ private function authenticate(string $user, string $pass, RequestEvent $event): $this->bus->dispatch(new AuthenticateUserCommand($user, $pass)); $this->addUserDataToRequest($user, $event); - } catch (InvalidAuthUsername | InvalidAuthCredentials $error) { + } catch (InvalidAuthUsername | InvalidAuthCredentials) { $event->setResponse(new JsonResponse(['error' => 'Invalid credentials'], Response::HTTP_FORBIDDEN)); } } diff --git a/src/Shared/Infrastructure/Symfony/WebController.php b/src/Shared/Infrastructure/Symfony/WebController.php index 3448c9e2a..0265b7b31 100644 --- a/src/Shared/Infrastructure/Symfony/WebController.php +++ b/src/Shared/Infrastructure/Symfony/WebController.php @@ -16,23 +16,15 @@ abstract class WebController extends ApiController { - private Environment $twig; - private RouterInterface $router; - private SessionInterface $session; - public function __construct( - Environment $twig, - RouterInterface $router, - SessionInterface $session, + private Environment $twig, + private RouterInterface $router, + private SessionInterface $session, QueryBus $queryBus, CommandBus $commandBus, ApiExceptionsHttpStatusCodeMapping $exceptionHandler ) { parent::__construct($queryBus, $commandBus, $exceptionHandler); - - $this->twig = $twig; - $this->router = $router; - $this->session = $session; } public function render(string $templatePath, array $arguments = []): SymfonyResponse diff --git a/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeEnvironmentArranger.php b/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeEnvironmentArranger.php index f439dba8d..c042ffc2e 100644 --- a/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeEnvironmentArranger.php +++ b/tests/Backoffice/Shared/Infraestructure/PhpUnit/BackofficeEnvironmentArranger.php @@ -13,13 +13,8 @@ final class BackofficeEnvironmentArranger implements EnvironmentArranger { - private ElasticsearchClient $elasticsearchClient; - private EntityManager $entityManager; - - public function __construct(ElasticsearchClient $elasticsearchClient, EntityManager $entityManager) + public function __construct(private ElasticsearchClient $elasticsearchClient, private EntityManager $entityManager) { - $this->elasticsearchClient = $elasticsearchClient; - $this->entityManager = $entityManager; } public function arrange(): void diff --git a/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php b/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php index 0d3325ede..c6be3379d 100644 --- a/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php +++ b/tests/Mooc/Shared/Infrastructure/PhpUnit/MoocEnvironmentArranger.php @@ -11,11 +11,8 @@ final class MoocEnvironmentArranger implements EnvironmentArranger { - private EntityManager $entityManager; - - public function __construct(EntityManager $entityManager) + public function __construct(private EntityManager $entityManager) { - $this->entityManager = $entityManager; } public function arrange(): void diff --git a/tests/Shared/Infrastructure/Behat/ApiContext.php b/tests/Shared/Infrastructure/Behat/ApiContext.php index e979144ad..286401ec4 100644 --- a/tests/Shared/Infrastructure/Behat/ApiContext.php +++ b/tests/Shared/Infrastructure/Behat/ApiContext.php @@ -14,12 +14,10 @@ final class ApiContext extends RawMinkContext { private $sessionHelper; - private $minkSession; private $request; - public function __construct(Session $minkSession) + public function __construct(private Session $minkSession) { - $this->minkSession = $minkSession; $this->sessionHelper = new MinkHelper($this->minkSession); $this->request = new MinkSessionRequestHelper(new MinkHelper($minkSession)); } diff --git a/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php b/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php index 0c9ec4083..3ff1b2a93 100644 --- a/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php +++ b/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php @@ -12,18 +12,11 @@ final class ApplicationFeatureContext implements Context { - private $connections; - private $bus; - private $deserializer; - public function __construct( - DatabaseConnections $connections, - InMemorySymfonyEventBus $bus, - DomainEventJsonDeserializer $deserializer + private DatabaseConnections $connections, + private InMemorySymfonyEventBus $bus, + private DomainEventJsonDeserializer $deserializer ) { - $this->connections = $connections; - $this->bus = $bus; - $this->deserializer = $deserializer; } /** @BeforeScenario */ diff --git a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php index bd5f79401..a8cab73b1 100644 --- a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php @@ -129,6 +129,11 @@ public function it_should_send_events_to_dead_letter_after_retry_failed_domain_e $this->assertDeadLetterContainsEvent(1); } + protected function kernelClass(): string + { + return MoocBackendKernel::class; + } + private function assertConsumer(DomainEvent ...$expectedDomainEvents): callable { return function (DomainEvent $domainEvent) use ($expectedDomainEvents): void { @@ -176,9 +181,4 @@ private function assertDeadLetterContainsEvent(int $expectedNumberOfEvents): voi $this->assertSame($expectedNumberOfEvents, $totalEventsInDeadLetter); } - - protected function kernelClass(): string - { - return MoocBackendKernel::class; - } } diff --git a/tests/Shared/Infrastructure/Bus/Query/FakeResponse.php b/tests/Shared/Infrastructure/Bus/Query/FakeResponse.php index 611e7bc99..36b437b5e 100644 --- a/tests/Shared/Infrastructure/Bus/Query/FakeResponse.php +++ b/tests/Shared/Infrastructure/Bus/Query/FakeResponse.php @@ -8,11 +8,8 @@ final class FakeResponse implements Response { - private int $number; - - public function __construct(int $number) + public function __construct(private int $number) { - $this->number = $number; } public function number(): int diff --git a/tests/Shared/Infrastructure/Mink/MinkHelper.php b/tests/Shared/Infrastructure/Mink/MinkHelper.php index cdc478b66..81d4407c5 100644 --- a/tests/Shared/Infrastructure/Mink/MinkHelper.php +++ b/tests/Shared/Infrastructure/Mink/MinkHelper.php @@ -11,11 +11,8 @@ final class MinkHelper { - private Session $session; - - public function __construct(Session $session) + public function __construct(private Session $session) { - $this->session = $session; } public function sendRequest($method, $url, array $optionalParams = []): Crawler diff --git a/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php b/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php index af1cb25b9..9cc8525c6 100644 --- a/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php +++ b/tests/Shared/Infrastructure/Mink/MinkSessionRequestHelper.php @@ -9,12 +9,8 @@ final class MinkSessionRequestHelper { - /** @var MinkHelper */ - private $sessionHelper; - - public function __construct($sessionHelper) + public function __construct(private $sessionHelper) { - $this->sessionHelper = $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 056fe1e26..0455008d2 100644 --- a/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php +++ b/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php @@ -5,13 +5,15 @@ namespace CodelyTv\Tests\Shared\Infrastructure\Mockery; use CodelyTv\Tests\Shared\Infrastructure\PhpUnit\Constraint\CodelyTvConstraintIsSimilar; +use JetBrains\PhpStorm\Pure; use Mockery\Matcher\MatcherAbstract; +use Stringable; -final class CodelyTvMatcherIsSimilar extends MatcherAbstract +final class CodelyTvMatcherIsSimilar extends MatcherAbstract implements Stringable { private CodelyTvConstraintIsSimilar $constraint; - public function __construct($value, $delta = 0.0) + #[Pure] public function __construct($value, $delta = 0.0) { parent::__construct($value); diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php index babcc71a2..d0e05d24f 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootArraySimilarComparator.php @@ -16,10 +16,10 @@ 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)); + 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 diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php index 131362892..193793122 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php @@ -16,11 +16,11 @@ final class DateTimeStringSimilarComparator extends ObjectComparator { public function accepts($expected, $actual): bool { - return (null !== $actual) && - is_string($expected) && - is_string($actual) && - $this->isValidDateTimeString($expected) && - $this->isValidDateTimeString($actual); + return (null !== $actual) + && is_string($expected) + && is_string($actual) + && $this->isValidDateTimeString($expected) + && $this->isValidDateTimeString($actual); } public function assertEquals( @@ -37,8 +37,8 @@ public function assertEquals( $normalizedDelta = $delta === 0.0 ? 10 : $delta; $intervalWithDelta = new DateInterval(sprintf('PT%sS', abs($normalizedDelta))); - if ($actualDate < $expectedDate->sub($intervalWithDelta) || - $actualDate > $expectedDate->add($intervalWithDelta)) { + if ($actualDate < $expectedDate->sub($intervalWithDelta) + || $actualDate > $expectedDate->add($intervalWithDelta)) { throw new ComparisonFailure( $expectedDate, $actualDate, @@ -63,7 +63,7 @@ private function isValidDateTimeString($expected): bool try { new DateTimeImmutable($expected); - } catch (Throwable $throwable) { + } catch (Throwable) { $isValid = false; } diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php index 1802d24c0..3d90627e3 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventArraySimilarComparator.php @@ -16,10 +16,10 @@ 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)); + 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 diff --git a/tests/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php b/tests/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php index b98f7eff2..7a19a089c 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php +++ b/tests/Shared/Infrastructure/PhpUnit/Constraint/CodelyTvConstraintIsSimilar.php @@ -16,18 +16,12 @@ use SebastianBergmann\Comparator\Factory; use function is_string; use function sprintf; -use function strpos; // Based on \PHPUnit\Framework\Constraint\IsEqual final class CodelyTvConstraintIsSimilar extends Constraint { - private $value; - private $delta; - - public function __construct($value, float $delta = 0.0) + public function __construct(private $value, private float $delta = 0.0) { - $this->value = $value; - $this->delta = $delta; } public function evaluate($other, $description = '', $returnResult = false): bool @@ -69,7 +63,7 @@ public function toString(): string $delta = ''; if (is_string($this->value)) { - if (strpos($this->value, "\n") !== false) { + if (str_contains($this->value, "\n")) { return 'is equal to '; } From e5c48a67f84c2264d502f2e46f2f4c8d5b73335e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Wed, 11 Nov 2020 23:09:00 +0100 Subject: [PATCH 047/106] Add `match` example --- .../Elasticsearch/ElasticQueryGenerator.php | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php index ddcd78308..35aea009e 100644 --- a/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php +++ b/src/Shared/Infrastructure/Persistence/Elasticsearch/ElasticQueryGenerator.php @@ -6,7 +6,7 @@ use CodelyTv\Shared\Domain\Criteria\Filter; use CodelyTv\Shared\Domain\Criteria\FilterOperator; -use function Lambdish\Phunctional\get; +use Exception; final class ElasticQueryGenerator { @@ -15,14 +15,7 @@ final class ElasticQueryGenerator private const TERM_TERM = 'term'; private const TERM_RANGE = 'range'; private const TERM_WILDCARD = 'wildcard'; - private static array $termMapping = [ - FilterOperator::EQUAL => self::TERM_TERM, - FilterOperator::NOT_EQUAL => '!=', - FilterOperator::GT => self::TERM_RANGE, - FilterOperator::LT => self::TERM_RANGE, - FilterOperator::CONTAINS => self::TERM_WILDCARD, - FilterOperator::NOT_CONTAINS => self::TERM_WILDCARD, - ]; + private static array $mustNotFields = [FilterOperator::NOT_EQUAL, FilterOperator::NOT_CONTAINS]; public function __invoke(array $query, Filter $filter): array @@ -53,6 +46,12 @@ private function typeFor(FilterOperator $operator): string private function termLevelFor(FilterOperator $operator): string { - return get($operator->value(), self::$termMapping); + return match ($operator->value()) { + 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()}"), + }; } } From 03573dfe159779a6bb419369724657349b0d1e71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Wed, 11 Nov 2020 23:20:04 +0100 Subject: [PATCH 048/106] Add `named parameter` example --- .../CoursesCounterGetController.php | 2 +- .../Courses/Domain/BackofficeCourseMother.php | 15 +++++---------- ...lasticsearchBackofficeCourseRepositoryTest.php | 6 +++--- .../MySqlBackofficeCourseRepositoryTest.php | 6 +++--- 4 files changed, 12 insertions(+), 17 deletions(-) diff --git a/apps/mooc/backend/src/Controller/CoursesCounter/CoursesCounterGetController.php b/apps/mooc/backend/src/Controller/CoursesCounter/CoursesCounterGetController.php index 13d7ba3ad..22df95571 100644 --- a/apps/mooc/backend/src/Controller/CoursesCounter/CoursesCounterGetController.php +++ b/apps/mooc/backend/src/Controller/CoursesCounter/CoursesCounterGetController.php @@ -13,7 +13,7 @@ final class CoursesCounterGetController extends ApiController { - public function __invoke() + public function __invoke(): JsonResponse { /** @var CoursesCounterResponse $response */ $response = $this->ask(new FindCoursesCounterQuery()); diff --git a/tests/Backoffice/Courses/Domain/BackofficeCourseMother.php b/tests/Backoffice/Courses/Domain/BackofficeCourseMother.php index 38c73b74e..ccb71e7a0 100644 --- a/tests/Backoffice/Courses/Domain/BackofficeCourseMother.php +++ b/tests/Backoffice/Courses/Domain/BackofficeCourseMother.php @@ -11,17 +11,12 @@ final class BackofficeCourseMother { - public static function create(string $id, string $name, string $duration): BackofficeCourse + public static function create(?string $id = null, ?string $name = null, ?string $duration = null): BackofficeCourse { - return new BackofficeCourse($id, $name, $duration); - } - - public static function withName(string $name): BackofficeCourse - { - return self::create( - CourseIdMother::random()->value(), - $name, - CourseDurationMother::random()->value() + return new BackofficeCourse( + $id ?? CourseIdMother::random()->value(), + $name ?? CourseNameMother::random()->value(), + $duration ?? CourseDurationMother::random()->value() ); } diff --git a/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php b/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php index ad792b5ff..dc6b59133 100644 --- a/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php +++ b/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php @@ -51,9 +51,9 @@ public function it_should_search_all_existing_courses_with_an_empty_criteria(): /** @test */ public function it_should_filter_by_criteria(): void { - $dddInPhpCourse = BackofficeCourseMother::withName('DDD en PHP'); - $dddInJavaCourse = BackofficeCourseMother::withName('DDD en Java'); - $intellijCourse = BackofficeCourseMother::withName('Exprimiendo Intellij'); + $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'); diff --git a/tests/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php b/tests/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php index fbd6c2625..af4f67abb 100644 --- a/tests/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php +++ b/tests/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php @@ -47,9 +47,9 @@ public function it_should_search_all_existing_courses_with_an_empty_criteria(): /** @test */ public function it_should_filter_by_criteria(): void { - $dddInPhpCourse = BackofficeCourseMother::withName('DDD en PHP'); - $dddInJavaCourse = BackofficeCourseMother::withName('DDD en Java'); - $intellijCourse = BackofficeCourseMother::withName('Exprimiendo Intellij'); + $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'); From 53faf7396771e9e8d7298d9c7401c99db9bd0215 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Fri, 13 Nov 2020 12:21:34 +0100 Subject: [PATCH 049/106] Add psalm --- composer.json | 2 +- composer.lock | 2058 ++++++++++++++++--------------------------------- rector.php | 35 - 3 files changed, 658 insertions(+), 1437 deletions(-) delete mode 100644 rector.php diff --git a/composer.json b/composer.json index f963d2014..770c4a86b 100644 --- a/composer.json +++ b/composer.json @@ -48,7 +48,7 @@ "fzaninotto/faker": "^1.9", "symfony/debug": "^4.4", - "rector/rector": "^0.8.48" + "vimeo/psalm": "^4.1" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index 571d2d159..430369914 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": "106017a1e7c4074ef16fb931f33bcaee", + "content-hash": "e73c4b8720ee868df2177bf196ac0f66", "packages": [ { "name": "composer/package-versions-deprecated", @@ -5783,6 +5783,166 @@ } ], "packages-dev": [ + { + "name": "amphp/amp", + "version": "v2.5.1", + "source": { + "type": "git", + "url": "https://github.com/amphp/amp.git", + "reference": "ecdc3c476b3ccff02f8e5d5bcc04f7ccfd18751c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/amp/zipball/ecdc3c476b3ccff02f8e5d5bcc04f7ccfd18751c", + "reference": "ecdc3c476b3ccff02f8e5d5bcc04f7ccfd18751c", + "shasum": "" + }, + "require": { + "php": ">=7" + }, + "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", + "psalm/phar": "^3.11@dev", + "react/promise": "^2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Amp\\": "lib" + }, + "files": [ + "lib/functions.php", + "lib/Internal/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Lowrey", + "email": "rdlowrey@php.net" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A non-blocking concurrency framework for PHP applications.", + "homepage": "http://amphp.org/amp", + "keywords": [ + "async", + "asynchronous", + "awaitable", + "concurrency", + "event", + "event-loop", + "future", + "non-blocking", + "promise" + ], + "support": { + "irc": "irc://irc.freenode.org/amphp", + "issues": "https://github.com/amphp/amp/issues", + "source": "https://github.com/amphp/amp/tree/v2.5.1" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2020-11-03T16:23:45+00:00" + }, + { + "name": "amphp/byte-stream", + "version": "v1.8.0", + "source": { + "type": "git", + "url": "https://github.com/amphp/byte-stream.git", + "reference": "f0c20cf598a958ba2aa8c6e5a71c697d652c7088" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/f0c20cf598a958ba2aa8c6e5a71c697d652c7088", + "reference": "f0c20cf598a958ba2aa8c6e5a71c697d652c7088", + "shasum": "" + }, + "require": { + "amphp/amp": "^2", + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1.4", + "friendsofphp/php-cs-fixer": "^2.3", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^6 || ^7 || ^8", + "psalm/phar": "^3.11.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Amp\\ByteStream\\": "lib" + }, + "files": [ + "lib/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A stream abstraction to make working with non-blocking I/O simple.", + "homepage": "http://amphp.org/byte-stream", + "keywords": [ + "amp", + "amphp", + "async", + "io", + "non-blocking", + "stream" + ], + "support": { + "irc": "irc://irc.freenode.org/amphp", + "issues": "https://github.com/amphp/byte-stream/issues", + "source": "https://github.com/amphp/byte-stream/tree/master" + }, + "time": "2020-06-29T18:35:05+00:00" + }, { "name": "behat/behat", "version": "v3.8.1", @@ -6105,18 +6265,99 @@ }, "time": "2020-01-14T16:39:13+00:00" }, + { + "name": "composer/semver", + "version": "3.2.4", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "a02fdf930a3c1c3ed3a49b5f63859c0c20e10464" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/a02fdf930a3c1c3ed3a49b5f63859c0c20e10464", + "reference": "a02fdf930a3c1c3ed3a49b5f63859c0c20e10464", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.54", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.2.4" + }, + "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": "2020-11-13T08:59:24+00:00" + }, { "name": "composer/xdebug-handler", - "version": "1.4.4", + "version": "1.4.5", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "6e076a124f7ee146f2487554a94b6a19a74887ba" + "reference": "f28d44c286812c714741478d968104c5e604a1d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6e076a124f7ee146f2487554a94b6a19a74887ba", - "reference": "6e076a124f7ee146f2487554a94b6a19a74887ba", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/f28d44c286812c714741478d968104c5e604a1d4", + "reference": "f28d44c286812c714741478d968104c5e604a1d4", "shasum": "" }, "require": { @@ -6150,7 +6391,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/1.4.4" + "source": "https://github.com/composer/xdebug-handler/tree/1.4.5" }, "funding": [ { @@ -6166,7 +6407,145 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:39:10+00:00" + "time": "2020-11-13T08:04:11+00:00" + }, + { + "name": "dnoegel/php-xdg-base-dir", + "version": "v0.1.1", + "source": { + "type": "git", + "url": "https://github.com/dnoegel/php-xdg-base-dir.git", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "XdgBaseDir\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "implementation of xdg base directory specification for php", + "support": { + "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", + "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" + }, + "time": "2019-12-04T15:06:13+00:00" + }, + { + "name": "felixfbecker/advanced-json-rpc", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", + "reference": "0ed363f8de17d284d479ec813c9ad3f6834b5c40" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/0ed363f8de17d284d479ec813c9ad3f6834b5c40", + "reference": "0ed363f8de17d284d479ec813c9ad3f6834b5c40", + "shasum": "" + }, + "require": { + "netresearch/jsonmapper": "^1.0 || ^2.0", + "php": ">=7.0", + "phpdocumentor/reflection-docblock": "^4.0.0 || ^5.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "AdvancedJsonRpc\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Felix Becker", + "email": "felix.b@outlook.com" + } + ], + "description": "A more advanced JSONRPC implementation", + "support": { + "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", + "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/master" + }, + "time": "2020-03-11T15:21:41+00:00" + }, + { + "name": "felixfbecker/language-server-protocol", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/felixfbecker/php-language-server-protocol.git", + "reference": "85e83cacd2ed573238678c6875f8f0d7ec699541" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/85e83cacd2ed573238678c6875f8f0d7ec699541", + "reference": "85e83cacd2ed573238678c6875f8f0d7ec699541", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "phpstan/phpstan": "*", + "squizlabs/php_codesniffer": "^3.1", + "vimeo/psalm": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "LanguageServerProtocol\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Felix Becker", + "email": "felix.b@outlook.com" + } + ], + "description": "PHP classes for the Language Server Protocol", + "keywords": [ + "language", + "microsoft", + "php", + "server" + ], + "support": { + "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", + "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.0" + }, + "time": "2020-10-23T13:55:30+00:00" }, { "name": "friends-of-behat/mink-extension", @@ -6409,179 +6788,39 @@ "time": "2020-07-09T08:09:16+00:00" }, { - "name": "jean85/pretty-package-versions", - "version": "1.5.1", + "name": "mockery/mockery", + "version": "1.4.2", "source": { "type": "git", - "url": "https://github.com/Jean85/pretty-package-versions.git", - "reference": "a917488320c20057da87f67d0d40543dd9427f7a" + "url": "https://github.com/mockery/mockery.git", + "reference": "20cab678faed06fac225193be281ea0fddb43b93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/a917488320c20057da87f67d0d40543dd9427f7a", - "reference": "a917488320c20057da87f67d0d40543dd9427f7a", + "url": "https://api.github.com/repos/mockery/mockery/zipball/20cab678faed06fac225193be281ea0fddb43b93", + "reference": "20cab678faed06fac225193be281ea0fddb43b93", "shasum": "" }, "require": { - "composer/package-versions-deprecated": "^1.8.0", - "php": "^7.0|^8.0" + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": "^7.3 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^6.0|^8.5|^9.2" + "phpunit/phpunit": "^8.5 || ^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { - "psr-4": { - "Jean85\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alessandro Lai", - "email": "alessandro.lai85@gmail.com" - } - ], - "description": "A wrapper for ocramius/package-versions to get pretty versions strings", - "keywords": [ - "composer", - "package", - "release", - "versions" - ], - "support": { - "issues": "https://github.com/Jean85/pretty-package-versions/issues", - "source": "https://github.com/Jean85/pretty-package-versions/tree/1.5.1" - }, - "time": "2020-09-14T08:43:34+00:00" - }, - { - "name": "migrify/migrify-kernel", - "version": "0.3.52", - "source": { - "type": "git", - "url": "https://github.com/migrify/migrify-kernel.git", - "reference": "79c8015edeaeafc7d7d27ff0f528ab6165e5d10c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/migrify/migrify-kernel/zipball/79c8015edeaeafc7d7d27ff0f528ab6165e5d10c", - "reference": "79c8015edeaeafc7d7d27ff0f528ab6165e5d10c", - "shasum": "" - }, - "require": { - "php": ">=7.2", - "symfony/console": "^4.4|^5.1", - "symfony/dependency-injection": "^4.4|^5.1", - "symfony/http-kernel": "^4.4|^5.1", - "symplify/autowire-array-parameter": "^8.3.46", - "symplify/package-builder": "^8.3.46", - "symplify/smart-file-system": "^8.3.46" - }, - "require-dev": { - "tracy/tracy": "^2.7" - }, - "type": "library", - "autoload": { - "psr-4": { - "Migrify\\MigrifyKernel\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Kernel for small CLI applications", - "support": { - "issues": "https://github.com/migrify/migrify-kernel/issues", - "source": "https://github.com/migrify/migrify-kernel/tree/0.3.52" - }, - "time": "2020-10-25T12:09:47+00:00" - }, - { - "name": "migrify/php-config-printer", - "version": "0.3.52", - "source": { - "type": "git", - "url": "https://github.com/migrify/php-config-printer.git", - "reference": "1c840c83cfa8b738ab20e229e8254177d38df068" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/migrify/php-config-printer/zipball/1c840c83cfa8b738ab20e229e8254177d38df068", - "reference": "1c840c83cfa8b738ab20e229e8254177d38df068", - "shasum": "" - }, - "require": { - "migrify/migrify-kernel": "^0.3.52", - "nette/utils": "^3.1", - "nikic/php-parser": "^4.9", - "php": ">=7.2", - "symfony/http-kernel": "^4.4|^5.1" - }, - "require-dev": { - "phpunit/phpunit": "^8.5|^9.0", - "symplify/easy-testing": "^8.3.46" - }, - "type": "library", - "autoload": { - "psr-4": { - "Migrify\\PhpConfigPrinter\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Print Symfony services array with configuration to to plain PHP file format thanks to this simple php-parser wrapper", - "support": { - "issues": "https://github.com/migrify/php-config-printer/issues", - "source": "https://github.com/migrify/php-config-printer/tree/0.3.52" - }, - "time": "2020-10-30T10:33:25+00:00" - }, - { - "name": "mockery/mockery", - "version": "1.4.2", - "source": { - "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "20cab678faed06fac225193be281ea0fddb43b93" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/20cab678faed06fac225193be281ea0fddb43b93", - "reference": "20cab678faed06fac225193be281ea0fddb43b93", - "shasum": "" - }, - "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", - "php": "^7.3 || ^8.0" - }, - "conflict": { - "phpunit/phpunit": "<8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Mockery": "library/" + "psr-0": { + "Mockery": "library/" } }, "notification-url": "https://packagist.org/downloads/", @@ -6679,220 +6918,55 @@ "time": "2020-06-29T13:22:24+00:00" }, { - "name": "nette/finder", - "version": "v2.5.2", - "source": { - "type": "git", - "url": "https://github.com/nette/finder.git", - "reference": "4ad2c298eb8c687dd0e74ae84206a4186eeaed50" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/finder/zipball/4ad2c298eb8c687dd0e74ae84206a4186eeaed50", - "reference": "4ad2c298eb8c687dd0e74ae84206a4186eeaed50", - "shasum": "" - }, - "require": { - "nette/utils": "^2.4 || ^3.0", - "php": ">=7.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "^2.0", - "phpstan/phpstan": "^0.12", - "tracy/tracy": "^2.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.5-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🔍 Nette Finder: find files and directories with an intuitive API.", - "homepage": "https://nette.org", - "keywords": [ - "filesystem", - "glob", - "iterator", - "nette" - ], - "support": { - "issues": "https://github.com/nette/finder/issues", - "source": "https://github.com/nette/finder/tree/v2.5.2" - }, - "time": "2020-01-03T20:35:40+00:00" - }, - { - "name": "nette/robot-loader", - "version": "v3.3.1", + "name": "netresearch/jsonmapper", + "version": "v2.1.0", "source": { "type": "git", - "url": "https://github.com/nette/robot-loader.git", - "reference": "15c1ecd0e6e69e8d908dfc4cca7b14f3b850a96b" + "url": "https://github.com/cweiske/jsonmapper.git", + "reference": "e0f1e33a71587aca81be5cffbb9746510e1fe04e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/robot-loader/zipball/15c1ecd0e6e69e8d908dfc4cca7b14f3b850a96b", - "reference": "15c1ecd0e6e69e8d908dfc4cca7b14f3b850a96b", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/e0f1e33a71587aca81be5cffbb9746510e1fe04e", + "reference": "e0f1e33a71587aca81be5cffbb9746510e1fe04e", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "nette/finder": "^2.5 || ^3.0", - "nette/utils": "^3.0", - "php": ">=7.1" + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.6" }, "require-dev": { - "nette/tester": "^2.0", - "phpstan/phpstan": "^0.12", - "tracy/tracy": "^2.3" + "phpunit/phpunit": "~4.8.35 || ~5.7 || ~6.4 || ~7.0", + "squizlabs/php_codesniffer": "~3.5" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🍀 Nette RobotLoader: high performance and comfortable autoloader that will search and autoload classes within your application.", - "homepage": "https://nette.org", - "keywords": [ - "autoload", - "class", - "interface", - "nette", - "trait" - ], - "support": { - "issues": "https://github.com/nette/robot-loader/issues", - "source": "https://github.com/nette/robot-loader/tree/v3.3.1" - }, - "time": "2020-09-15T15:14:17+00:00" - }, - { - "name": "nette/utils", - "version": "v3.1.3", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "c09937fbb24987b2a41c6022ebe84f4f1b8eec0f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/c09937fbb24987b2a41c6022ebe84f4f1b8eec0f", - "reference": "c09937fbb24987b2a41c6022ebe84f4f1b8eec0f", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "nette/tester": "~2.0", - "phpstan/phpstan": "^0.12", - "tracy/tracy": "^2.3" - }, - "suggest": { - "ext-gd": "to use Image", - "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", - "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", - "ext-json": "to use Nette\\Utils\\Json", - "ext-mbstring": "to use Strings::lower() etc...", - "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", - "ext-xml": "to use Strings::length() etc. when mbstring is not available" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" + "psr-0": { + "JsonMapper": "src/" } }, - "autoload": { - "classmap": [ - "src/" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" + "OSL-3.0" ], "authors": [ { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" + "name": "Christian Weiske", + "email": "cweiske@cweiske.de", + "homepage": "http://github.com/cweiske/jsonmapper/", + "role": "Developer" } ], - "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", - "homepage": "https://nette.org", - "keywords": [ - "array", - "core", - "datetime", - "images", - "json", - "nette", - "paginator", - "password", - "slugify", - "string", - "unicode", - "utf-8", - "utility", - "validation" - ], + "description": "Map nested JSON structures onto PHP classes", "support": { - "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v3.1.3" + "email": "cweiske@cweiske.de", + "issues": "https://github.com/cweiske/jsonmapper/issues", + "source": "https://github.com/cweiske/jsonmapper/tree/master" }, - "time": "2020-08-07T10:34:21+00:00" + "time": "2020-04-16T18:48:43+00:00" }, { "name": "nikic/php-parser", @@ -6951,76 +7025,57 @@ "time": "2020-09-26T10:30:38+00:00" }, { - "name": "ondram/ci-detector", - "version": "3.5.1", + "name": "openlss/lib-array2xml", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/OndraM/ci-detector.git", - "reference": "594e61252843b68998bddd48078c5058fe9028bd" + "url": "https://github.com/nullivex/lib-array2xml.git", + "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/OndraM/ci-detector/zipball/594e61252843b68998bddd48078c5058fe9028bd", - "reference": "594e61252843b68998bddd48078c5058fe9028bd", + "url": "https://api.github.com/repos/nullivex/lib-array2xml/zipball/a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", + "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "ergebnis/composer-normalize": "^2.2", - "lmc/coding-standard": "^1.3 || ^2.0", - "php-parallel-lint/php-parallel-lint": "^1.1", - "phpstan/extension-installer": "^1.0.3", - "phpstan/phpstan": "^0.12.0", - "phpstan/phpstan-phpunit": "^0.12.1", - "phpunit/phpunit": "^7.1 || ^8.0 || ^9.0" + "php": ">=5.3.2" }, "type": "library", "autoload": { - "psr-4": { - "OndraM\\CiDetector\\": "src/" + "psr-0": { + "LSS": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "Apache-2.0" ], "authors": [ { - "name": "Ondřej Machulda", - "email": "ondrej.machulda@gmail.com" + "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": "Detect continuous integration environment and provide unified access to properties of current build", + "description": "Array2XML conversion library credit to lalit.org", + "homepage": "https://www.nullivex.com", "keywords": [ - "CircleCI", - "Codeship", - "Wercker", - "adapter", - "appveyor", - "aws", - "aws codebuild", - "bamboo", - "bitbucket", - "buddy", - "ci-info", - "codebuild", - "continuous integration", - "continuousphp", - "drone", - "github", - "gitlab", - "interface", - "jenkins", - "teamcity", - "travis" - ], - "support": { - "issues": "https://github.com/OndraM/ci-detector/issues", - "source": "https://github.com/OndraM/ci-detector/tree/main" - }, - "time": "2020-09-04T11:21:14+00:00" + "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" }, { "name": "phar-io/manifest", @@ -7359,228 +7414,55 @@ "time": "2020-09-29T09:10:42+00:00" }, { - "name": "phpstan/phpdoc-parser", - "version": "0.4.9", + "name": "phpunit/php-code-coverage", + "version": "9.2.3", "source": { "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "98a088b17966bdf6ee25c8a4b634df313d8aa531" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "6b20e2055f7c29b56cb3870b3de7cc463d7add41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/98a088b17966bdf6ee25c8a4b634df313d8aa531", - "reference": "98a088b17966bdf6ee25c8a4b634df313d8aa531", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6b20e2055f7c29b56cb3870b3de7cc463d7add41", + "reference": "6b20e2055f7c29b56cb3870b3de7cc463d7add41", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.10.2", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "consistence/coding-standard": "^3.5", - "ergebnis/composer-normalize": "^2.0.2", - "jakub-onderka/php-parallel-lint": "^0.9.2", - "phing/phing": "^2.16.0", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.26", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^6.3", - "slevomat/coding-standard": "^4.7.2", - "symfony/process": "^4.0" + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.4-dev" + "dev-master": "9.2-dev" } }, "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } + "classmap": [ + "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/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/master" - }, - "time": "2020-08-03T20:32:43+00:00" - }, - { - "name": "phpstan/phpstan", - "version": "0.12.54", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "45c7b999a4b7dd9ac5558bdaaf23dcebbef88223" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/45c7b999a4b7dd9ac5558bdaaf23dcebbef88223", - "reference": "45c7b999a4b7dd9ac5558bdaaf23dcebbef88223", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0" - }, - "conflict": { - "phpstan/phpstan-shim": "*" - }, - "bin": [ - "phpstan", - "phpstan.phar" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.12-dev" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPStan - PHP Static Analysis Tool", - "support": { - "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/0.12.54" - }, - "funding": [ - { - "url": "https://github.com/ondrejmirtes", - "type": "github" - }, - { - "url": "https://www.patreon.com/phpstan", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", - "type": "tidelift" - } - ], - "time": "2020-11-05T13:36:26+00:00" - }, - { - "name": "phpstan/phpstan-phpunit", - "version": "0.12.16", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan-phpunit.git", - "reference": "1dd916d181b0539dea5cd37e91546afb8b107e17" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/1dd916d181b0539dea5cd37e91546afb8b107e17", - "reference": "1dd916d181b0539dea5cd37e91546afb8b107e17", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "phpstan/phpstan": "^0.12.33" - }, - "conflict": { - "phpunit/phpunit": "<7.0" - }, - "require-dev": { - "consistence/coding-standard": "^3.5", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "ergebnis/composer-normalize": "^2.0.2", - "jakub-onderka/php-parallel-lint": "^1.0", - "phing/phing": "^2.16.0", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "satooshi/php-coveralls": "^1.0", - "slevomat/coding-standard": "^4.7.2" - }, - "type": "phpstan-extension", - "extra": { - "branch-alias": { - "dev-master": "0.12-dev" - }, - "phpstan": { - "includes": [ - "extension.neon", - "rules.neon" - ] - } - }, - "autoload": { - "psr-4": { - "PHPStan\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPUnit extensions and rules for PHPStan", - "support": { - "issues": "https://github.com/phpstan/phpstan-phpunit/issues", - "source": "https://github.com/phpstan/phpstan-phpunit/tree/0.12.16" - }, - "time": "2020-08-05T13:28:50+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6b20e2055f7c29b56cb3870b3de7cc463d7add41" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6b20e2055f7c29b56cb3870b3de7cc463d7add41", - "reference": "6b20e2055f7c29b56cb3870b3de7cc463d7add41", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.10.2", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" + "BSD-3-Clause" ], "authors": [ { @@ -7952,276 +7834,6 @@ ], "time": "2020-11-10T12:53:30+00:00" }, - { - "name": "psr/simple-cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "support": { - "source": "https://github.com/php-fig/simple-cache/tree/master" - }, - "time": "2017-10-23T01:57:42+00:00" - }, - { - "name": "rector/rector", - "version": "0.8.48", - "source": { - "type": "git", - "url": "https://github.com/rectorphp/rector.git", - "reference": "84d2cc41d2526d84ef40e0faccbaf0bf0cbf38b9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/84d2cc41d2526d84ef40e0faccbaf0bf0cbf38b9", - "reference": "84d2cc41d2526d84ef40e0faccbaf0bf0cbf38b9", - "shasum": "" - }, - "require": { - "composer/xdebug-handler": "^1.4", - "doctrine/annotations": "^1.11", - "doctrine/inflector": "^1.4|^2.0", - "ext-json": "*", - "jean85/pretty-package-versions": "^1.5.1", - "migrify/php-config-printer": "^0.3.52", - "nette/robot-loader": "^3.2", - "nette/utils": "^3.1", - "nikic/php-parser": "4.10.2", - "ondram/ci-detector": "^3.4", - "php": "^7.2.4|^8.0", - "phpstan/phpdoc-parser": "^0.4.9", - "phpstan/phpstan": "^0.12.52", - "phpstan/phpstan-phpunit": "^0.12.16", - "psr/simple-cache": "^1.0", - "sebastian/diff": "^3.0|^4.0", - "symfony/cache": "^4.4.8|^5.1", - "symfony/console": "^4.4.8|^5.1", - "symfony/dependency-injection": "^4.4.8|^5.1", - "symfony/finder": "^4.4.8|^5.1", - "symfony/http-kernel": "^4.4.8|^5.1", - "symfony/process": "^4.4.8|^5.1", - "symplify/autowire-array-parameter": "^8.3.48", - "symplify/composer-json-manipulator": "^8.3.48", - "symplify/console-color-diff": "^8.3.48", - "symplify/easy-testing": "^8.3.48", - "symplify/package-builder": "^8.3.48", - "symplify/set-config-resolver": "^8.3.48", - "symplify/smart-file-system": "^8.3.48", - "webmozart/assert": "^1.9" - }, - "replace": { - "rector/rector-prefixed": "self.version", - "rector/simple-php-doc-parser": "self.version", - "rector/symfony-php-config": "self.version" - }, - "require-dev": { - "cweagans/composer-patches": "^1.7", - "friendsofphp/php-cs-fixer": "^2.16", - "migrify/vendor-patches": "^0.3.52", - "nette/application": "^3.0", - "nette/di": "^3.0", - "nette/forms": "^3.0", - "ocramius/package-versions": "^1.9", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpunit/phpunit": "^8.5|^9.2", - "psr/event-dispatcher": "^1.0", - "symplify/changelog-linker": "^8.3.48", - "symplify/easy-coding-standard": "^8.3.48", - "symplify/easy-testing": "^8.3.48", - "symplify/monorepo-builder": "^8.3.48", - "symplify/phpstan-extensions": "^8.3.48", - "tracy/tracy": "^2.7" - }, - "bin": [ - "bin/rector" - ], - "type": "library", - "extra": { - "patches": { - "nette/application": [ - "patches/nette-application-src-application-ui-presenter-php.patch" - ] - } - }, - "autoload": { - "files": [ - "packages/symfony-php-config/functions/functions.php", - "rules/restoration/tests/Rector/Use_/RestoreFullyQualifiedNameRector/Source/ShortClassOnly.php" - ], - "psr-4": { - "Rector\\Testing\\": "packages/testing/src", - "Rector\\Architecture\\": "rules/architecture/src", - "Rector\\AttributeAwarePhpDoc\\": "packages/attribute-aware-php-doc/src", - "Rector\\Autodiscovery\\": "rules/autodiscovery/src", - "Rector\\BetterPhpDocParser\\": "packages/better-php-doc-parser/src", - "Rector\\Caching\\": "packages/caching/src", - "Rector\\CakePHP\\": "rules/cakephp/src", - "Rector\\ChangesReporting\\": "packages/changes-reporting/src", - "Rector\\CodeQuality\\": "rules/code-quality/src", - "Rector\\CodingStyle\\": "rules/coding-style/src", - "Rector\\ConsoleDiffer\\": "packages/console-differ/src", - "Rector\\Core\\": "src", - "Rector\\DeadCode\\": "rules/dead-code/src", - "Rector\\DoctrineAnnotationGenerated\\": "packages/doctrine-annotation-generated/src", - "Rector\\DoctrineCodeQuality\\": "rules/doctrine-code-quality/src", - "Rector\\DoctrineGedmoToKnplabs\\": "rules/doctrine-gedmo-to-knplabs/src", - "Rector\\Doctrine\\": "rules/doctrine/src", - "Rector\\DocumentationGenerator\\": "packages/documentation-generator/src", - "Rector\\DowngradePhp71\\": "rules/downgrade-php71/src", - "Rector\\DowngradePhp72\\": "rules/downgrade-php72/src", - "Rector\\DowngradePhp73\\": "rules/downgrade-php73/src", - "Rector\\ReadWrite\\": "packages/read-write/src", - "Rector\\DowngradePhp74\\": "rules/downgrade-php74/src", - "Rector\\DowngradePhp80\\": "rules/downgrade-php80/src", - "Rector\\FamilyTree\\": "packages/family-tree/src", - "Rector\\FileSystemRector\\": "packages/file-system-rector/src", - "Rector\\Generic\\": "rules/generic/src", - "Rector\\JMS\\": "rules/jms/src", - "Rector\\Laravel\\": "rules/laravel/src", - "Rector\\Legacy\\": "rules/legacy/src", - "Rector\\MagicDisclosure\\": "rules/magic-disclosure/src", - "Rector\\MockeryToProphecy\\": "rules/mockery-to-prophecy/src", - "Rector\\MockistaToMockery\\": "rules/mockista-to-mockery/src", - "Rector\\MysqlToMysqli\\": "rules/mysql-to-mysqli/src", - "Rector\\Naming\\": "rules/naming/src", - "Rector\\NetteCodeQuality\\": "rules/nette-code-quality/src", - "Rector\\NetteKdyby\\": "rules/nette-kdyby/src", - "Rector\\NetteTesterToPHPUnit\\": "rules/nette-tester-to-phpunit/src", - "Rector\\NetteToSymfony\\": "rules/nette-to-symfony/src", - "Rector\\NetteUtilsCodeQuality\\": "rules/nette-utils-code-quality/src", - "Rector\\Nette\\": "rules/nette/src", - "Rector\\Defluent\\": "rules/defluent/src", - "Rector\\NodeCollector\\": "packages/node-collector/src", - "Rector\\NodeNameResolver\\": "packages/node-name-resolver/src", - "Rector\\NodeNestingScope\\": "packages/node-nesting-scope/src", - "Rector\\NodeRemoval\\": "packages/node-removal/src", - "Rector\\NodeTypeResolver\\": "packages/node-type-resolver/src", - "Rector\\Order\\": "rules/order/src", - "Rector\\PHPOffice\\": "rules/php-office/src", - "Rector\\PHPStanStaticTypeMapper\\": "packages/phpstan-static-type-mapper/src", - "Rector\\PHPStan\\": "rules/phpstan/src", - "Rector\\PHPUnitSymfony\\": "rules/phpunit-symfony/src", - "Rector\\PHPUnit\\": "rules/phpunit/src", - "Rector\\PSR4\\": "rules/psr4/src", - "Rector\\Performance\\": "rules/performance/src", - "Rector\\Phalcon\\": "rules/phalcon/src", - "Rector\\Php52\\": "rules/php52/src", - "Rector\\Php53\\": "rules/php53/src", - "Rector\\Php54\\": "rules/php54/src", - "Rector\\Php55\\": "rules/php55/src", - "Rector\\Php56\\": "rules/php56/src", - "Rector\\Php70\\": "rules/php70/src", - "Rector\\Php71\\": "rules/php71/src", - "Rector\\Php72\\": "rules/php72/src", - "Rector\\Php73\\": "rules/php73/src", - "Rector\\Php74\\": "rules/php74/src", - "Rector\\Php80\\": "rules/php80/src", - "Rector\\PhpAttribute\\": "packages/php-attribute/src", - "Rector\\PhpDeglobalize\\": "rules/php-deglobalize/src", - "Rector\\PhpSpecToPHPUnit\\": "rules/php-spec-to-phpunit/src", - "Rector\\Polyfill\\": "rules/polyfill/src", - "Rector\\PostRector\\": "packages/post-rector/src", - "Rector\\Privatization\\": "rules/privatization/src", - "Rector\\RectorGenerator\\": "packages/rector-generator/src", - "Rector\\RemovingStatic\\": "rules/removing-static/src", - "Rector\\Renaming\\": "rules/renaming/src", - "Rector\\Reporting\\": "packages/reporting/src", - "Rector\\Restoration\\": "rules/restoration/src", - "Rector\\SOLID\\": "rules/solid/src", - "Rector\\Sensio\\": "rules/sensio/src", - "Rector\\Set\\": "packages/set/src", - "Rector\\SimplePhpDocParser\\": "packages/simple-php-doc-parser/src", - "Rector\\StaticTypeMapper\\": "packages/static-type-mapper/src", - "Rector\\StrictCodeQuality\\": "rules/strict-code-quality/src", - "Rector\\SymfonyCodeQuality\\": "rules/symfony-code-quality/src", - "Rector\\SymfonyPHPUnit\\": "rules/symfony-phpunit/src", - "Rector\\SymfonyPhpConfig\\": [ - "packages/symfony-php-config/src", - "rules/symfony-php-config/src" - ], - "Rector\\Symfony\\": "rules/symfony/src", - "Rector\\Transform\\": "rules/transform/src", - "Rector\\Twig\\": "rules/twig/src", - "Rector\\TypeDeclaration\\": "rules/type-declaration/src", - "Rector\\VendorLocker\\": "packages/vendor-locker/src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Tomas Votruba", - "email": "tomas.vot@gmail.com", - "homepage": "https://tomasvotruba.com" - }, - { - "name": "Jan Mikes", - "email": "j.mikes@me.com", - "homepage": "https://janmikes.cz" - } - ], - "description": "Instant upgrade and refactoring of your PHP code", - "homepage": "https://getrector.org", - "keywords": [ - "ast", - "automated refactoring", - "instant refactoring", - "instant upgrades" - ], - "support": { - "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/0.8.48" - }, - "funding": [ - { - "url": "https://github.com/tomasvotruba", - "type": "github" - } - ], - "time": "2020-11-02T19:01:31+00:00" - }, { "name": "roave/security-advisories", "version": "dev-master", @@ -9780,27 +9392,35 @@ "time": "2020-10-24T11:50:19+00:00" }, { - "name": "symfony/process", + "name": "symfony/proxy-manager-bridge", "version": "v5.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "240e74140d4d956265048f3025c0aecbbc302d54" + "url": "https://github.com/symfony/proxy-manager-bridge.git", + "reference": "a200b07f24a3b473dbe0d38bc8bff87414866801" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/240e74140d4d956265048f3025c0aecbbc302d54", - "reference": "240e74140d4d956265048f3025c0aecbbc302d54", + "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/a200b07f24a3b473dbe0d38bc8bff87414866801", + "reference": "a200b07f24a3b473dbe0d38bc8bff87414866801", "shasum": "" }, "require": { + "composer/package-versions-deprecated": "^1.8", + "ocramius/proxy-manager": "~2.1", "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.15" + "symfony/dependency-injection": "^5.0" }, - "type": "library", + "conflict": { + "zendframework/zend-eventmanager": "2.6.0" + }, + "require-dev": { + "symfony/config": "^4.4|^5.0" + }, + "type": "symfony-bridge", "autoload": { "psr-4": { - "Symfony\\Component\\Process\\": "" + "Symfony\\Bridge\\ProxyManager\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -9820,10 +9440,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Process Component", + "description": "Symfony ProxyManager Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.2.0-RC1" + "source": "https://github.com/symfony/proxy-manager-bridge/tree/v5.2.0-RC1" }, "funding": [ { @@ -9839,107 +9459,37 @@ "type": "tidelift" } ], - "time": "2020-11-02T15:47:15+00:00" + "time": "2020-11-07T13:01:26+00:00" }, { - "name": "symfony/proxy-manager-bridge", + "name": "symfony/translation", "version": "v5.2.0-RC1", "source": { "type": "git", - "url": "https://github.com/symfony/proxy-manager-bridge.git", - "reference": "a200b07f24a3b473dbe0d38bc8bff87414866801" + "url": "https://github.com/symfony/translation.git", + "reference": "331974aae89a1337fdde974339e822fb734a650e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/a200b07f24a3b473dbe0d38bc8bff87414866801", - "reference": "a200b07f24a3b473dbe0d38bc8bff87414866801", + "url": "https://api.github.com/repos/symfony/translation/zipball/331974aae89a1337fdde974339e822fb734a650e", + "reference": "331974aae89a1337fdde974339e822fb734a650e", "shasum": "" }, "require": { - "composer/package-versions-deprecated": "^1.8", - "ocramius/proxy-manager": "~2.1", "php": ">=7.2.5", - "symfony/dependency-injection": "^5.0" + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/translation-contracts": "^2.3" }, "conflict": { - "zendframework/zend-eventmanager": "2.6.0" + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" }, - "require-dev": { - "symfony/config": "^4.4|^5.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": "Symfony ProxyManager Bridge", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/proxy-manager-bridge/tree/v5.2.0-RC1" - }, - "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": "2020-11-07T13:01:26+00:00" - }, - { - "name": "symfony/translation", - "version": "v5.2.0-RC1", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "331974aae89a1337fdde974339e822fb734a650e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/331974aae89a1337fdde974339e822fb734a650e", - "reference": "331974aae89a1337fdde974339e822fb734a650e", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15", - "symfony/translation-contracts": "^2.3" - }, - "conflict": { - "symfony/config": "<4.4", - "symfony/dependency-injection": "<5.0", - "symfony/http-kernel": "<5.0", - "symfony/twig-bundle": "<5.0", - "symfony/yaml": "<4.4" - }, - "provide": { - "symfony/translation-implementation": "2.0" + "provide": { + "symfony/translation-implementation": "2.0" }, "require-dev": { "psr/log": "~1.0", @@ -10005,533 +9555,244 @@ "time": "2020-10-28T21:46:03+00:00" }, { - "name": "symplify/autowire-array-parameter", - "version": "8.3.48", + "name": "theseer/tokenizer", + "version": "1.2.0", "source": { "type": "git", - "url": "https://github.com/symplify/autowire-array-parameter.git", - "reference": "721e29f2e656cc3cf1101fcc0dbb4f4a44d9309b" + "url": "https://github.com/theseer/tokenizer.git", + "reference": "75a63c33a8577608444246075ea0af0d052e452a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symplify/autowire-array-parameter/zipball/721e29f2e656cc3cf1101fcc0dbb4f4a44d9309b", - "reference": "721e29f2e656cc3cf1101fcc0dbb4f4a44d9309b", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", + "reference": "75a63c33a8577608444246075ea0af0d052e452a", "shasum": "" }, "require": { - "nette/utils": "^3.0", - "php": ">=7.2", - "symfony/dependency-injection": "^4.4|^5.1", - "symplify/package-builder": "^8.3.48" - }, - "require-dev": { - "phpunit/phpunit": "^8.5|^9.0" + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.4-dev" - } - }, "autoload": { - "psr-4": { - "Symplify\\AutowireArrayParameter\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "description": "Autowire array parameters for your Symfony applications", - "support": { - "source": "https://github.com/symplify/autowire-array-parameter/tree/8.3.48" - }, - "funding": [ - { - "url": "https://www.paypal.me/rectorphp", - "type": "custom" - }, + "authors": [ { - "url": "https://github.com/tomasvotruba", - "type": "github" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" } ], - "time": "2020-10-26T10:38:48+00:00" - }, - { - "name": "symplify/composer-json-manipulator", - "version": "8.3.48", - "source": { - "type": "git", - "url": "https://github.com/symplify/composer-json-manipulator.git", - "reference": "44346fecb95fd0f435ab43d6603995d1e0796353" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symplify/composer-json-manipulator/zipball/44346fecb95fd0f435ab43d6603995d1e0796353", - "reference": "44346fecb95fd0f435ab43d6603995d1e0796353", - "shasum": "" - }, - "require": { - "nette/utils": "^3.0", - "php": ">=7.2", - "symfony/config": "^4.4|^5.1", - "symfony/dependency-injection": "^4.4|^5.1", - "symfony/filesystem": "^4.4|^5.1", - "symfony/http-kernel": "^4.4|^5.1", - "symplify/package-builder": "^8.3.48", - "symplify/smart-file-system": "^8.3.48" - }, - "require-dev": { - "phpunit/phpunit": "^8.5|^9.0" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "8.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symplify\\ComposerJsonManipulator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Package to load, merge and save composer.json file(s)", + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { - "source": "https://github.com/symplify/composer-json-manipulator/tree/8.3.48" + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/master" }, "funding": [ { - "url": "https://www.paypal.me/rectorphp", - "type": "custom" - }, - { - "url": "https://github.com/tomasvotruba", + "url": "https://github.com/theseer", "type": "github" } ], - "time": "2020-10-26T10:38:48+00:00" + "time": "2020-07-12T23:59:07+00:00" }, { - "name": "symplify/console-color-diff", - "version": "8.3.48", + "name": "vimeo/psalm", + "version": "4.1.1", "source": { "type": "git", - "url": "https://github.com/symplify/console-color-diff.git", - "reference": "6cae4c121271da963698a9f0a50717a7d2ee9567" + "url": "https://github.com/vimeo/psalm.git", + "reference": "16bfbd9224698bd738c665f33039fade2a1a3977" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symplify/console-color-diff/zipball/6cae4c121271da963698a9f0a50717a7d2ee9567", - "reference": "6cae4c121271da963698a9f0a50717a7d2ee9567", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/16bfbd9224698bd738c665f33039fade2a1a3977", + "reference": "16bfbd9224698bd738c665f33039fade2a1a3977", "shasum": "" }, "require": { - "nette/utils": "^3.0", - "php": ">=7.2", - "sebastian/diff": "^3.0|^4.0", - "symfony/console": "^4.4|^5.1", - "symfony/dependency-injection": "^4.4|^5.1", - "symfony/http-kernel": "^4.4|^5.1", - "symplify/package-builder": "^8.3.48" - }, - "require-dev": { - "phpunit/phpunit": "^8.5|^9.0" + "amphp/amp": "^2.1", + "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", + "dnoegel/php-xdg-base-dir": "^0.1.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-tokenizer": "*", + "felixfbecker/advanced-json-rpc": "^3.0.3", + "felixfbecker/language-server-protocol": "^1.4", + "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0", + "nikic/php-parser": "^4.10.1", + "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", + "webmozart/path-util": "^2.3" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.4-dev" - } + "provide": { + "psalm/psalm": "self.version" }, - "autoload": { - "psr-4": { - "Symplify\\ConsoleColorDiff\\": "src" - } + "require-dev": { + "amphp/amp": "^2.4.2", + "bamarni/composer-bin-plugin": "^1.2", + "brianium/paratest": "^4.0.0", + "ext-curl": "*", + "php": "^7.3|^8", + "phpdocumentor/reflection-docblock": "^5", + "phpmyadmin/sql-parser": "5.1.0", + "phpspec/prophecy": ">=1.9.0", + "phpunit/phpunit": "^9.0", + "psalm/plugin-phpunit": "^0.13", + "slevomat/coding-standard": "^5.0", + "squizlabs/php_codesniffer": "^3.5", + "symfony/process": "^4.3", + "weirdan/prophecy-shim": "^1.0 || ^2.0" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Package to print diffs in console with colors", - "support": { - "source": "https://github.com/symplify/console-color-diff/tree/8.3.48" + "suggest": { + "ext-igbinary": "^2.0.5" }, - "funding": [ - { - "url": "https://www.paypal.me/rectorphp", - "type": "custom" - }, - { - "url": "https://github.com/tomasvotruba", - "type": "github" - } + "bin": [ + "psalm", + "psalm-language-server", + "psalm-plugin", + "psalm-refactor", + "psalter" ], - "time": "2020-10-26T10:38:48+00:00" - }, - { - "name": "symplify/easy-testing", - "version": "8.3.48", - "source": { - "type": "git", - "url": "https://github.com/symplify/easy-testing.git", - "reference": "cc3f78487655764a2e9b2488731aabf4025628cd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symplify/easy-testing/zipball/cc3f78487655764a2e9b2488731aabf4025628cd", - "reference": "cc3f78487655764a2e9b2488731aabf4025628cd", - "shasum": "" - }, - "require": { - "nette/utils": "^3.0", - "php": ">=7.2", - "symfony/finder": "^4.4|^5.1", - "symplify/package-builder": "^8.3.48", - "symplify/smart-file-system": "^8.3.48", - "symplify/symplify-kernel": "^8.3.48" - }, - "require-dev": { - "phpunit/phpunit": "^8.5|^9.0" - }, - "type": "symfony-bundle", + "type": "library", "extra": { "branch-alias": { - "dev-master": "8.4-dev" + "dev-master": "4.x-dev", + "dev-3.x": "3.x-dev", + "dev-2.x": "2.x-dev", + "dev-1.x": "1.x-dev" } }, "autoload": { "psr-4": { - "Symplify\\EasyTesting\\": "src" - } + "Psalm\\": "src/Psalm/" + }, + "files": [ + "src/functions.php", + "src/spl_object_id.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Testing made easy", - "support": { - "source": "https://github.com/symplify/easy-testing/tree/8.3.48" - }, - "funding": [ - { - "url": "https://www.paypal.me/rectorphp", - "type": "custom" - }, + "authors": [ { - "url": "https://github.com/tomasvotruba", - "type": "github" + "name": "Matthew Brown" } ], - "time": "2020-10-26T10:38:48+00:00" - }, - { - "name": "symplify/package-builder", - "version": "8.3.48", - "source": { - "type": "git", - "url": "https://github.com/symplify/package-builder.git", - "reference": "d262d5c2043c669f145d3eabf7d8114ae64cf169" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symplify/package-builder/zipball/d262d5c2043c669f145d3eabf7d8114ae64cf169", - "reference": "d262d5c2043c669f145d3eabf7d8114ae64cf169", - "shasum": "" - }, - "require": { - "nette/finder": "^2.5", - "nette/utils": "^3.0", - "php": ">=7.2", - "symfony/config": "^4.4|^5.1", - "symfony/console": "^4.4|^5.1", - "symfony/dependency-injection": "^4.4|^5.1", - "symfony/finder": "^4.4|^5.1", - "symfony/http-kernel": "^4.4|^5.1", - "symfony/yaml": "^4.4|^5.1", - "symplify/autowire-array-parameter": "^8.3.48", - "symplify/symplify-kernel": "^8.3.48" - }, - "require-dev": { - "phpunit/phpunit": "^8.5|^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symplify\\PackageBuilder\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" + "description": "A static analysis tool for finding errors in PHP applications", + "keywords": [ + "code", + "inspection", + "php" ], - "description": "Dependency Injection, Console and Kernel toolkit for Symplify packages.", "support": { - "source": "https://github.com/symplify/package-builder/tree/8.3.48" + "issues": "https://github.com/vimeo/psalm/issues", + "source": "https://github.com/vimeo/psalm/tree/4.1.1" }, - "funding": [ - { - "url": "https://www.paypal.me/rectorphp", - "type": "custom" - }, - { - "url": "https://github.com/tomasvotruba", - "type": "github" - } - ], - "time": "2020-10-26T10:38:48+00:00" + "time": "2020-11-02T05:54:12+00:00" }, { - "name": "symplify/set-config-resolver", - "version": "8.3.48", + "name": "webmozart/assert", + "version": "1.9.1", "source": { "type": "git", - "url": "https://github.com/symplify/set-config-resolver.git", - "reference": "1333995e30b7acfa7c4378c5f85de1dd96226c93" + "url": "https://github.com/webmozart/assert.git", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symplify/set-config-resolver/zipball/1333995e30b7acfa7c4378c5f85de1dd96226c93", - "reference": "1333995e30b7acfa7c4378c5f85de1dd96226c93", + "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", "shasum": "" }, "require": { - "nette/utils": "^3.0", - "php": ">=7.2", - "symfony/config": "^4.4|^5.1", - "symfony/console": "^4.4|^5.1", - "symfony/dependency-injection": "^4.4|^5.1", - "symfony/filesystem": "^4.4|^5.1", - "symfony/finder": "^4.4|^5.1", - "symfony/yaml": "^4.4|^5.1", - "symplify/smart-file-system": "^8.3.48", - "symplify/symplify-kernel": "^8.3.48" + "php": "^5.3.3 || ^7.0 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" }, "require-dev": { - "phpunit/phpunit": "^8.5|^9.0" + "phpunit/phpunit": "^4.8.36 || ^7.5.13" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.4-dev" - } - }, "autoload": { "psr-4": { - "Symplify\\SetConfigResolver\\": "src" + "Webmozart\\Assert\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Resolve config and sets from configs and cli opptions for CLI applications", - "support": { - "issues": "https://github.com/symplify/set-config-resolver/issues", - "source": "https://github.com/symplify/set-config-resolver/tree/8.3.48" - }, - "funding": [ - { - "url": "https://www.paypal.me/rectorphp", - "type": "custom" - }, + "authors": [ { - "url": "https://github.com/tomasvotruba", - "type": "github" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "time": "2020-10-26T10:38:48+00:00" - }, - { - "name": "symplify/smart-file-system", - "version": "8.3.48", - "source": { - "type": "git", - "url": "https://github.com/symplify/smart-file-system.git", - "reference": "4146069c725b7c6e2f53924a151286f1e26c132f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symplify/smart-file-system/zipball/4146069c725b7c6e2f53924a151286f1e26c132f", - "reference": "4146069c725b7c6e2f53924a151286f1e26c132f", - "shasum": "" - }, - "require": { - "nette/utils": "^3.0", - "php": ">=7.2", - "symfony/filesystem": "^4.4|^5.1", - "symfony/finder": "^4.4|^5.1" - }, - "require-dev": { - "nette/finder": "^2.5", - "phpunit/phpunit": "^8.5|^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symplify\\SmartFileSystem\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" ], - "description": "Sanitized FileInfo with safe getRealPath() and other handy methods", "support": { - "source": "https://github.com/symplify/smart-file-system/tree/8.3.48" + "issues": "https://github.com/webmozart/assert/issues", + "source": "https://github.com/webmozart/assert/tree/master" }, - "funding": [ - { - "url": "https://www.paypal.me/rectorphp", - "type": "custom" - }, - { - "url": "https://github.com/tomasvotruba", - "type": "github" - } - ], - "time": "2020-10-26T10:38:48+00:00" + "time": "2020-07-08T17:02:28+00:00" }, { - "name": "symplify/symplify-kernel", - "version": "8.3.48", + "name": "webmozart/path-util", + "version": "2.3.0", "source": { "type": "git", - "url": "https://github.com/symplify/symplify-kernel.git", - "reference": "c79dc6ce559b408c08e9fbc044f59cbb64961cf9" + "url": "https://github.com/webmozart/path-util.git", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symplify/symplify-kernel/zipball/c79dc6ce559b408c08e9fbc044f59cbb64961cf9", - "reference": "c79dc6ce559b408c08e9fbc044f59cbb64961cf9", + "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725", "shasum": "" }, "require": { - "php": ">=7.2", - "symfony/console": "^4.4|^5.1", - "symfony/dependency-injection": "^4.4|^5.1", - "symfony/http-kernel": "^4.4|^5.1", - "symplify/package-builder": "^8.3.48", - "symplify/smart-file-system": "^8.3.48" + "php": ">=5.3.3", + "webmozart/assert": "~1.0" }, "require-dev": { - "phpunit/phpunit": "^8.5|^9.0" + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "8.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symplify\\SymplifyKernel\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Internal Kernel for Symplify packages", - "support": { - "issues": "https://github.com/symplify/symplify-kernel/issues", - "source": "https://github.com/symplify/symplify-kernel/tree/8.3.48" - }, - "time": "2020-10-26T10:38:48+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "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" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" + "dev-master": "2.3-dev" } - ], - "time": "2020-07-12T23:59:07+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.9.1", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" - }, - "type": "library", "autoload": { "psr-4": { - "Webmozart\\Assert\\": "src/" + "Webmozart\\PathUtil\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -10544,17 +9805,12 @@ "email": "bschussek@gmail.com" } ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], + "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", "support": { - "issues": "https://github.com/webmozart/assert/issues", - "source": "https://github.com/webmozart/assert/tree/master" + "issues": "https://github.com/webmozart/path-util/issues", + "source": "https://github.com/webmozart/path-util/tree/2.3.0" }, - "time": "2020-07-08T17:02:28+00:00" + "time": "2015-12-17T08:42:14+00:00" } ], "aliases": [], diff --git a/rector.php b/rector.php deleted file mode 100644 index a0384e9ad..000000000 --- a/rector.php +++ /dev/null @@ -1,35 +0,0 @@ -parameters(); - $parameters->set(Option::SETS, [SetList::PHP_80]); - - $parameters->set( - Option::PATHS, - [ - __DIR__ . '/src', - __DIR__ . '/tests', - __DIR__ . '/apps/backoffice/backend/src', - __DIR__ . '/apps/backoffice/frontend/src', - __DIR__ . '/apps/mooc/backend/src', - __DIR__ . '/apps/mooc/frontend/src', - __DIR__ . '/apps/bootstrap.php', - ] - ); - - $parameters->set( - Option::EXCLUDE_PATHS, - [ - __DIR__ . '/src/Shared/Infrastructure/Bus/Event/RabbitMq', - __DIR__ . '/tests/Shared/Infrastructure/Bus/Event/RabbitMq', - ] - ); -}; From f6c8b6c69741d70fe58032a02851685f8e7f1888 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Fri, 13 Nov 2020 12:24:48 +0100 Subject: [PATCH 050/106] Add psalm --- psalm.xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 psalm.xml diff --git a/psalm.xml b/psalm.xml new file mode 100644 index 000000000..3e4e3d085 --- /dev/null +++ b/psalm.xml @@ -0,0 +1,15 @@ + + + + + + + + + From d4ffe68550e8d72b99841e6f461f1d6a0d912536 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Fri, 13 Nov 2020 12:40:34 +0100 Subject: [PATCH 051/106] Fix all psalm src errors --- psalm.xml | 1 + src/Mooc/Videos/Domain/VideoFinder.php | 9 ++------- .../Bus/CallableFirstParameterExtractor.php | 2 +- .../Bus/Command/InMemorySymfonyCommandBus.php | 6 +++++- .../Infrastructure/Doctrine/DatabaseConnections.php | 2 +- .../Symfony/ApiExceptionsHttpStatusCodeMapping.php | 8 +++++++- src/Shared/Infrastructure/Symfony/FlashSession.php | 4 ++-- src/Shared/Infrastructure/Symfony/WebController.php | 4 ++-- 8 files changed, 21 insertions(+), 15 deletions(-) diff --git a/psalm.xml b/psalm.xml index 3e4e3d085..629472fd3 100644 --- a/psalm.xml +++ b/psalm.xml @@ -10,6 +10,7 @@ + diff --git a/src/Mooc/Videos/Domain/VideoFinder.php b/src/Mooc/Videos/Domain/VideoFinder.php index e4b55157a..1a07f8403 100644 --- a/src/Mooc/Videos/Domain/VideoFinder.php +++ b/src/Mooc/Videos/Domain/VideoFinder.php @@ -14,15 +14,10 @@ public function __invoke(VideoId $id): Video { $video = $this->repository->search($id); - $this->ensureVideoExists($id, $video); - - return $video; - } - - private function ensureVideoExists(VideoId $id, Video $video = null): void - { if (null === $video) { throw new VideoNotFound($id); } + + return $video; } } diff --git a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php index be5132c3c..3753542f4 100644 --- a/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php +++ b/src/Shared/Infrastructure/Bus/CallableFirstParameterExtractor.php @@ -25,7 +25,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 diff --git a/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php b/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php index 9dd461f0e..544af7a3d 100644 --- a/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php +++ b/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php @@ -35,7 +35,11 @@ public function dispatch(Command $command): void } catch (NoHandlerForMessageException) { throw new CommandNotRegisteredError($command); } catch (HandlerFailedException $error) { - throw $error->getPrevious(); + if (null !== $error->getPrevious()) { + throw $error->getPrevious(); + } + + throw $error; } } } diff --git a/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php b/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php index 4b9ca7b90..074617c47 100644 --- a/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php +++ b/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php @@ -15,7 +15,7 @@ final class DatabaseConnections public function __construct(iterable $connections) { - $this->connections = iterator_to_array($connections); + $this->connections = iterator_to_array(yield from $connections); } public function clear(): void diff --git a/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php b/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php index c3591a0f7..889695bde 100644 --- a/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php +++ b/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php @@ -29,6 +29,12 @@ public function exists($exceptionClass): bool public function statusCodeFor($exceptionClass): int { - return get($exceptionClass, $this->exceptions, self::DEFAULT_STATUS_CODE); + $statusCode = get($exceptionClass, $this->exceptions, self::DEFAULT_STATUS_CODE); + + if (null === $statusCode) { + throw new InvalidArgumentException("There are no status code mapping for <$exceptionClass>"); + } + + return $statusCode; } } diff --git a/src/Shared/Infrastructure/Symfony/FlashSession.php b/src/Shared/Infrastructure/Symfony/FlashSession.php index 5a45b43f7..0adfa59e1 100644 --- a/src/Shared/Infrastructure/Symfony/FlashSession.php +++ b/src/Shared/Infrastructure/Symfony/FlashSession.php @@ -5,13 +5,13 @@ namespace CodelyTv\Shared\Infrastructure\Symfony; use CodelyTv\Shared\Domain\Utils; -use Symfony\Component\HttpFoundation\Session\SessionInterface; +use Symfony\Component\HttpFoundation\Session\Session; final class FlashSession { private static array $flashes = []; - public function __construct(SessionInterface $session) + public function __construct(Session $session) { self::$flashes = Utils::dot($session->getFlashBag()->all()); } diff --git a/src/Shared/Infrastructure/Symfony/WebController.php b/src/Shared/Infrastructure/Symfony/WebController.php index 0265b7b31..8884e3e15 100644 --- a/src/Shared/Infrastructure/Symfony/WebController.php +++ b/src/Shared/Infrastructure/Symfony/WebController.php @@ -9,7 +9,7 @@ use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response as SymfonyResponse; -use Symfony\Component\HttpFoundation\Session\SessionInterface; +use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\Routing\RouterInterface; use Symfony\Component\Validator\ConstraintViolationListInterface; use Twig\Environment; @@ -19,7 +19,7 @@ abstract class WebController extends ApiController public function __construct( private Environment $twig, private RouterInterface $router, - private SessionInterface $session, + private Session $session, QueryBus $queryBus, CommandBus $commandBus, ApiExceptionsHttpStatusCodeMapping $exceptionHandler From af35ce637c8d600a505af79804a8e23ee6c83e39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Fri, 13 Nov 2020 12:53:28 +0100 Subject: [PATCH 052/106] Fix all psalm test errors --- psalm.xml | 4 ++++ tests/Backoffice/Auth/AuthModuleUnitTestCase.php | 7 +++---- tests/Mooc/Courses/CoursesModuleUnitTestCase.php | 7 +++---- .../CoursesCounterModuleUnitTestCase.php | 7 +++---- .../Mockery/CodelyTvMatcherIsSimilar.php | 6 ++---- .../Comparator/AggregateRootSimilarComparator.php | 4 ---- .../Comparator/DomainEventSimilarComparator.php | 4 ---- .../Shared/Infrastructure/PhpUnit/UnitTestCase.php | 14 ++++++-------- 8 files changed, 21 insertions(+), 32 deletions(-) diff --git a/psalm.xml b/psalm.xml index 629472fd3..501b627c6 100644 --- a/psalm.xml +++ b/psalm.xml @@ -8,9 +8,13 @@ > + + + + diff --git a/tests/Backoffice/Auth/AuthModuleUnitTestCase.php b/tests/Backoffice/Auth/AuthModuleUnitTestCase.php index eb8b5d207..547d8e93c 100644 --- a/tests/Backoffice/Auth/AuthModuleUnitTestCase.php +++ b/tests/Backoffice/Auth/AuthModuleUnitTestCase.php @@ -12,7 +12,7 @@ abstract class AuthModuleUnitTestCase extends UnitTestCase { - private $repository; + private AuthRepository|MockInterface|null $repository; protected function shouldSearch(AuthUsername $username, AuthUser $authUser = null): void { @@ -23,9 +23,8 @@ protected function shouldSearch(AuthUsername $username, AuthUser $authUser = nul ->andReturn($authUser); } - /** @return AuthRepository|MockInterface */ - protected function repository(): MockInterface + protected function repository(): AuthRepository|MockInterface { - return $this->repository = $this->repository ?: $this->mock(AuthRepository::class); + return $this->repository = $this->repository ?? $this->mock(AuthRepository::class); } } diff --git a/tests/Mooc/Courses/CoursesModuleUnitTestCase.php b/tests/Mooc/Courses/CoursesModuleUnitTestCase.php index d66c7fdc6..99aec4245 100644 --- a/tests/Mooc/Courses/CoursesModuleUnitTestCase.php +++ b/tests/Mooc/Courses/CoursesModuleUnitTestCase.php @@ -12,7 +12,7 @@ abstract class CoursesModuleUnitTestCase extends UnitTestCase { - private $repository; + private CourseRepository|MockInterface|null $repository; protected function shouldSave(Course $course): void { @@ -32,9 +32,8 @@ protected function shouldSearch(CourseId $id, ?Course $course): void ->andReturn($course); } - /** @return CourseRepository|MockInterface */ - protected function repository(): MockInterface + protected function repository(): CourseRepository|MockInterface { - return $this->repository = $this->repository ?: $this->mock(CourseRepository::class); + return $this->repository = $this->repository ?? $this->mock(CourseRepository::class); } } diff --git a/tests/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php b/tests/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php index 4ca746727..d990439dd 100644 --- a/tests/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php +++ b/tests/Mooc/CoursesCounter/CoursesCounterModuleUnitTestCase.php @@ -11,7 +11,7 @@ abstract class CoursesCounterModuleUnitTestCase extends UnitTestCase { - private $repository; + private CoursesCounterRepository|MockInterface|null $repository; protected function shouldSave(CoursesCounter $course): void { @@ -30,9 +30,8 @@ protected function shouldSearch(?CoursesCounter $counter): void ->andReturn($counter); } - /** @return CoursesCounterRepository|MockInterface */ - protected function repository(): MockInterface + protected function repository(): CoursesCounterRepository|MockInterface { - return $this->repository = $this->repository ?: $this->mock(CoursesCounterRepository::class); + return $this->repository = $this->repository ?? $this->mock(CoursesCounterRepository::class); } } diff --git a/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php b/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php index 0455008d2..056fe1e26 100644 --- a/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php +++ b/tests/Shared/Infrastructure/Mockery/CodelyTvMatcherIsSimilar.php @@ -5,15 +5,13 @@ namespace CodelyTv\Tests\Shared\Infrastructure\Mockery; use CodelyTv\Tests\Shared\Infrastructure\PhpUnit\Constraint\CodelyTvConstraintIsSimilar; -use JetBrains\PhpStorm\Pure; use Mockery\Matcher\MatcherAbstract; -use Stringable; -final class CodelyTvMatcherIsSimilar extends MatcherAbstract implements Stringable +final class CodelyTvMatcherIsSimilar extends MatcherAbstract { private CodelyTvConstraintIsSimilar $constraint; - #[Pure] public function __construct($value, $delta = 0.0) + public function __construct($value, $delta = 0.0) { parent::__construct($value); diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php index ab83e3045..a795b0188 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/AggregateRootSimilarComparator.php @@ -19,10 +19,6 @@ public function accepts($expected, $actual): bool return $expected instanceof $aggregateRootClass && $actual instanceof $aggregateRootClass; } - /** - * @param AggregateRoot $expected - * @param AggregateRoot $actual - */ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false): void { $actualEntity = clone $actual; diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php index 72b724673..76939421c 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php @@ -21,10 +21,6 @@ public function accepts($expected, $actual): bool return $expected instanceof $domainEventRootClass && $actual instanceof $domainEventRootClass; } - /** - * @param DomainEvent $expected - * @param DomainEvent $actual - */ public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false): void { if (!$this->areSimilar($expected, $actual)) { diff --git a/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php b/tests/Shared/Infrastructure/PhpUnit/UnitTestCase.php index 3a0d8d901..ce26b3a80 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; - private $uuidGenerator; + private EventBus|MockInterface|null $eventBus; + private UuidGenerator|MockInterface|null $uuidGenerator; protected function mock(string $className): MockInterface { @@ -42,10 +42,9 @@ protected function shouldNotPublishDomainEvent(): void ->andReturnNull(); } - /** @return EventBus|MockInterface */ - protected function eventBus(): MockInterface + protected function eventBus(): EventBus|MockInterface { - return $this->eventBus = $this->eventBus ?: $this->mock(EventBus::class); + return $this->eventBus = $this->eventBus ?? $this->mock(EventBus::class); } protected function shouldGenerateUuid(string $uuid): void @@ -57,10 +56,9 @@ protected function shouldGenerateUuid(string $uuid): void ->andReturn($uuid); } - /** @return UuidGenerator|MockInterface */ - protected function uuidGenerator(): MockInterface + protected function uuidGenerator(): UuidGenerator|MockInterface { - return $this->uuidGenerator = $this->uuidGenerator ?: $this->mock(UuidGenerator::class); + return $this->uuidGenerator = $this->uuidGenerator ?? $this->mock(UuidGenerator::class); } protected function notify(DomainEvent $event, callable $subscriber): void From e6d63b3be72a5fd1ef270cc5a57d2f77e805cea7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Fri, 13 Nov 2020 13:42:07 +0100 Subject: [PATCH 053/106] Fix all psalm apps errors --- .../src/Command/ImportCoursesToElasticsearchCommand.php | 4 +++- .../DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php | 4 +++- .../DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php | 4 +++- .../RabbitMq/ConsumeRabbitMqDomainEventsCommand.php | 4 +++- .../GenerateSupervisorRabbitMqConsumerFilesCommand.php | 4 +++- psalm.xml | 5 +++++ .../Bus/Event/DomainEventSubscriberLocator.php | 2 +- 7 files changed, 21 insertions(+), 6 deletions(-) diff --git a/apps/backoffice/frontend/src/Command/ImportCoursesToElasticsearchCommand.php b/apps/backoffice/frontend/src/Command/ImportCoursesToElasticsearchCommand.php index 314214864..21bc0f4c6 100644 --- a/apps/backoffice/frontend/src/Command/ImportCoursesToElasticsearchCommand.php +++ b/apps/backoffice/frontend/src/Command/ImportCoursesToElasticsearchCommand.php @@ -19,12 +19,14 @@ public function __construct( parent::__construct(); } - public function execute(InputInterface $input, OutputInterface $output): void + public function execute(InputInterface $input, OutputInterface $output): int { $courses = $this->mySqlRepository->searchAll(); foreach ($courses as $course) { $this->elasticRepository->save($course); } + + return 0; } } diff --git a/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php b/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php index 5460fb312..ff6ba13d6 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/MySql/ConsumeMySqlDomainEventsCommand.php @@ -33,13 +33,15 @@ protected function configure(): void ->addArgument('quantity', InputArgument::REQUIRED, 'Quantity of events to process'); } - protected function execute(InputInterface $input, OutputInterface $output): void + 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 diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php index 9037653a2..3055c60a6 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConfigureRabbitMqCommand.php @@ -27,8 +27,10 @@ protected function configure(): void $this->setDescription('Configure the RabbitMQ to allow publish & consume domain events'); } - protected function execute(InputInterface $input, OutputInterface $output): void + 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 d8ab4347a..b37d2b3ae 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/ConsumeRabbitMqDomainEventsCommand.php @@ -33,12 +33,14 @@ protected function configure(): void ->addArgument('quantity', InputArgument::REQUIRED, 'Quantity of events to process'); } - protected function execute(InputInterface $input, OutputInterface $output): void + protected function execute(InputInterface $input, OutputInterface $output): int { $queueName = (string) $input->getArgument('queue'); $eventsToProcess = (int) $input->getArgument('quantity'); repeat($this->consumer($queueName), $eventsToProcess); + + return 0; } private function consumer(string $queueName): callable diff --git a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php index 6c9ea3038..ffe98f634 100644 --- a/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php +++ b/apps/mooc/backend/src/Command/DomainEvents/RabbitMq/GenerateSupervisorRabbitMqConsumerFilesCommand.php @@ -32,11 +32,13 @@ protected function configure(): void ->addArgument('command-path', InputArgument::OPTIONAL, 'Path on this is gonna be deployed', '/var/www'); } - protected function execute(InputInterface $input, OutputInterface $output): void + protected function execute(InputInterface $input, OutputInterface $output): int { $path = (string) $input->getArgument('command-path'); each($this->configCreator($path), $this->locator->all()); + + return 0; } private function configCreator(string $path): callable diff --git a/psalm.xml b/psalm.xml index 501b627c6..3b2b87605 100644 --- a/psalm.xml +++ b/psalm.xml @@ -7,10 +7,15 @@ xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd" > + + + + + diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php b/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php index 192ab8650..ba3e24abb 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventSubscriberLocator.php @@ -27,7 +27,7 @@ public function allSubscribedTo(string $eventClass): array return $formatted[$eventClass]; } - public function withRabbitMqQueueNamed(string $queueName): DomainEventSubscriber + public function withRabbitMqQueueNamed(string $queueName): DomainEventSubscriber|callable { $subscriber = search( static fn(DomainEventSubscriber $subscriber) => RabbitMqQueueNameFormatter::format($subscriber) === From 33391f1d8392fff2176bf3059c81e0c45ca4b3f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Fri, 13 Nov 2020 13:44:01 +0100 Subject: [PATCH 054/106] Add static analysis to CI --- .github/workflows/ci.yml | 3 +++ Makefile | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a7f12e1ff..dfeac35e0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,3 +29,6 @@ jobs: - name: Run the tests run: make test + + - name: Static analysis + run: make static-analysis diff --git a/Makefile b/Makefile index cee162bc9..f0eb5be93 100644 --- a/Makefile +++ b/Makefile @@ -43,6 +43,10 @@ test: composer-env-file 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 +.PHONY: static-analysis +test: composer-env-file + docker exec codelytv-php_ddd_skeleton-mooc_backend-php ./vendor/bin/psalm + .PHONY: run-tests run-tests: composer-env-file mkdir -p build/test_results/phpunit From f7e7bed9c0596e4a5587559604c8731bc69a19cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Fri, 13 Nov 2020 14:00:42 +0100 Subject: [PATCH 055/106] Simplify code --- .../src/Controller/Courses/CoursesGetController.php | 9 ++++++--- .../src/Controller/Courses/CoursesPostWebController.php | 8 ++++---- .../src/Controller/Courses/CoursesPutController.php | 4 ++-- psalm.xml | 1 - .../Bus/Command/InMemorySymfonyCommandBus.php | 6 +----- .../RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php | 3 +-- 6 files changed, 14 insertions(+), 17 deletions(-) diff --git a/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php b/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php index c1cfed9af..0f57df285 100644 --- a/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php +++ b/apps/backoffice/backend/src/Controller/Courses/CoursesGetController.php @@ -20,14 +20,17 @@ public function __construct(private QueryBus $queryBus) public function __invoke(Request $request): JsonResponse { + $limit = $request->query->get('limit'); + $offset = $request->query->get('offset'); + /** @var BackofficeCoursesResponse $response */ $response = $this->queryBus->ask( new SearchBackofficeCoursesByCriteriaQuery( - $request->query->get('filters', []), + (array) $request->query->get('filters'), $request->query->get('order_by'), $request->query->get('order'), - $request->query->get('limit'), - $request->query->get('offset') + null === $limit ? null : (int) $limit, + null === $offset ? null : (int) $offset ) ); diff --git a/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php b/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php index 073b9a448..d77b9633b 100644 --- a/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php +++ b/apps/backoffice/frontend/src/Controller/Courses/CoursesPostWebController.php @@ -47,15 +47,15 @@ private function createCourse(Request $request): RedirectResponse { $this->dispatch( new CreateCourseCommand( - $request->request->get('id'), - $request->request->get('name'), - $request->request->get('duration') + $request->request->getAlpha('id'), + $request->request->getAlpha('name'), + $request->request->getAlpha('duration') ) ); return $this->redirectWithMessage( 'courses_get', - sprintf('Feliciades, el curso %s ha sido creado!', $request->request->get('name')) + sprintf('Feliciades, el curso %s ha sido creado!', $request->request->getAlpha('name')) ); } } diff --git a/apps/mooc/backend/src/Controller/Courses/CoursesPutController.php b/apps/mooc/backend/src/Controller/Courses/CoursesPutController.php index 88f36ea51..6cc34a3d0 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->get('name'), - $request->request->get('duration') + $request->request->getAlpha('name'), + $request->request->getAlpha('duration') ) ); diff --git a/psalm.xml b/psalm.xml index 3b2b87605..012629468 100644 --- a/psalm.xml +++ b/psalm.xml @@ -15,7 +15,6 @@ - diff --git a/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php b/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php index 544af7a3d..bd7e659a8 100644 --- a/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php +++ b/src/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBus.php @@ -35,11 +35,7 @@ public function dispatch(Command $command): void } catch (NoHandlerForMessageException) { throw new CommandNotRegisteredError($command); } catch (HandlerFailedException $error) { - if (null !== $error->getPrevious()) { - throw $error->getPrevious(); - } - - throw $error; + throw $error->getPrevious() ?? $error; } } } diff --git a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php index 0287731a6..4e15c5296 100644 --- a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php +++ b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/TestAllWorksOnRabbitMqEventsPublished.php @@ -18,8 +18,7 @@ public static function subscribedTo(): array ]; } - /** @param CourseCreatedDomainEvent|CoursesCounterIncrementedDomainEvent $event */ - public function __invoke($event) + public function __invoke(CourseCreatedDomainEvent|CoursesCounterIncrementedDomainEvent $event) { } } From c7b55389df4880d1770769ed277eaef7d803e05d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Fri, 13 Nov 2020 14:38:31 +0100 Subject: [PATCH 056/106] Add missed types --- Makefile | 2 +- .../Domain/AnalyticsDomainEvent.php | 20 --------------- .../Doctrine/DoctrinePrefixesSearcher.php | 2 +- .../Videos/Application/Find/VideoResponse.php | 25 ------------------- src/Shared/Domain/Assert.php | 2 +- src/Shared/Domain/Collection.php | 5 ---- src/Shared/Domain/Criteria/FilterOperator.php | 5 ---- src/Shared/Domain/SecondsInterval.php | 10 -------- src/Shared/Domain/Utils.php | 13 ++++++++-- src/Shared/Domain/ValueObject/Uuid.php | 2 +- .../Bus/Event/DomainEventMapping.php | 5 ---- .../Doctrine/DatabaseConnections.php | 3 ++- .../ElasticsearchClientFactory.php | 2 +- .../Doctrine/DoctrineCriteriaConverter.php | 2 +- .../Doctrine/DoctrineRepository.php | 2 +- .../Symfony/AddJsonBodyToRequestListener.php | 2 +- .../ApiExceptionsHttpStatusCodeMapping.php | 9 ++----- .../AuthenticateUserCommandHandlerTest.php | 2 +- .../Backoffice/Auth/Domain/AuthUserMother.php | 5 ---- .../Create/CreateCourseCommandHandlerTest.php | 2 +- .../Application/Update/CourseRenamerTest.php | 2 +- .../Find/CoursesCounterResponseMother.php | 5 ---- .../FindCoursesCounterQueryHandlerTest.php | 2 +- ...ementCoursesCounterOnCourseCreatedTest.php | 2 +- .../Shared/Domain/Criteria/CriteriaMother.php | 10 -------- .../Domain/Criteria/FilterFieldMother.php | 2 +- tests/Shared/Domain/Criteria/FilterMother.php | 3 ++- .../Domain/Criteria/FilterValueMother.php | 2 +- .../Shared/Domain/Criteria/OrderByMother.php | 2 +- tests/Shared/Domain/Criteria/OrderMother.php | 5 ---- tests/Shared/Domain/DuplicatorMother.php | 2 +- tests/Shared/Domain/IntegerMother.php | 9 ++----- tests/Shared/Domain/RandomElementPicker.php | 2 +- tests/Shared/Domain/Repeater.php | 7 +----- .../Infrastructure/Behat/ApiContext.php | 6 ++--- .../Behat/ApplicationFeatureContext.php | 2 +- .../Command/InMemorySymfonyCommandBusTest.php | 12 ++++++--- .../Event/MySql/MySqlDoctrineEventBusTest.php | 4 +-- .../Bus/Query/InMemorySymfonyQueryBusTest.php | 12 ++++++--- .../DateTimeStringSimilarComparator.php | 2 +- .../DomainEventSimilarComparator.php | 2 +- .../PhpUnit/InfrastructureTestCase.php | 6 ++--- 42 files changed, 66 insertions(+), 155 deletions(-) diff --git a/Makefile b/Makefile index f0eb5be93..c2121d083 100644 --- a/Makefile +++ b/Makefile @@ -44,7 +44,7 @@ test: composer-env-file docker exec codelytv-php_ddd_skeleton-backoffice_backend-php ./vendor/bin/phpunit --testsuite backoffice .PHONY: static-analysis -test: composer-env-file +static-analysis: composer-env-file docker exec codelytv-php_ddd_skeleton-mooc_backend-php ./vendor/bin/psalm .PHONY: run-tests diff --git a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php index fb869a6b9..525830551 100644 --- a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php +++ b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php @@ -9,24 +9,4 @@ final class AnalyticsDomainEvent public function __construct(private AnalyticsDomainEventId $id, private AnalyticsDomainEventAggregateId $aggregateId, private AnalyticsDomainEventName $name, private AnalyticsDomainEventBody $body) { } - - public function id(): AnalyticsDomainEventId - { - return $this->id; - } - - public function aggregateId(): AnalyticsDomainEventAggregateId - { - return $this->aggregateId; - } - - public function name(): AnalyticsDomainEventName - { - return $this->name; - } - - public function body(): AnalyticsDomainEventBody - { - return $this->body; - } } diff --git a/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php b/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php index 9900a15be..1f421b199 100644 --- a/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php +++ b/src/Mooc/Shared/Infrastructure/Doctrine/DoctrinePrefixesSearcher.php @@ -45,7 +45,7 @@ private static function isExistingMappingPath(): callable return static fn(string $path) => !empty($path); } - private static function namespaceFormatter($baseNamespace): callable + private static function namespaceFormatter(string $baseNamespace): callable { return static fn(string $path, string $module) => "$baseNamespace\\$module\Domain"; } diff --git a/src/Mooc/Videos/Application/Find/VideoResponse.php b/src/Mooc/Videos/Application/Find/VideoResponse.php index a3798a3d8..b7961687d 100644 --- a/src/Mooc/Videos/Application/Find/VideoResponse.php +++ b/src/Mooc/Videos/Application/Find/VideoResponse.php @@ -16,29 +16,4 @@ public function __construct( 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/Shared/Domain/Assert.php b/src/Shared/Domain/Assert.php index 92817d74a..8b4eaee9c 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($class, $item): void + public static function instanceOf(string $class, $item): void { if (!$item instanceof $class) { throw new InvalidArgumentException( diff --git a/src/Shared/Domain/Collection.php b/src/Shared/Domain/Collection.php index 2eba59aaa..cd5f06d15 100644 --- a/src/Shared/Domain/Collection.php +++ b/src/Shared/Domain/Collection.php @@ -28,11 +28,6 @@ public function count(): int return count($this->items()); } - protected function each(callable $fn): void - { - each($fn, $this->items()); - } - protected function items(): array { return $this->items; diff --git a/src/Shared/Domain/Criteria/FilterOperator.php b/src/Shared/Domain/Criteria/FilterOperator.php index 319318590..4567997a2 100644 --- a/src/Shared/Domain/Criteria/FilterOperator.php +++ b/src/Shared/Domain/Criteria/FilterOperator.php @@ -22,11 +22,6 @@ final class FilterOperator extends Enum public const NOT_CONTAINS = 'NOT_CONTAINS'; private static array $containing = [self::CONTAINS, self::NOT_CONTAINS]; - public static function equal(): self - { - return new self('='); - } - public function isContaining(): bool { return in_array($this->value(), self::$containing, true); diff --git a/src/Shared/Domain/SecondsInterval.php b/src/Shared/Domain/SecondsInterval.php index 91b09e0f4..ba1d37c3b 100644 --- a/src/Shared/Domain/SecondsInterval.php +++ b/src/Shared/Domain/SecondsInterval.php @@ -13,16 +13,6 @@ public function __construct(private Second $from, private Second $to) $this->ensureIntervalEndsAfterStart($from, $to); } - public function from(): Second - { - return $this->from; - } - - public function to(): Second - { - return $this->to; - } - public static function fromValues(int $from, int $to): SecondsInterval { return new self(new Second($from), new Second($to)); diff --git a/src/Shared/Domain/Utils.php b/src/Shared/Domain/Utils.php index 34a3c48ca..854db5f25 100644 --- a/src/Shared/Domain/Utils.php +++ b/src/Shared/Domain/Utils.php @@ -58,7 +58,7 @@ public static function toCamelCase(string $text): string return lcfirst(str_replace('_', '', ucwords($text, '_'))); } - public static function dot($array, $prepend = ''): array + public static function dot(array $array, string $prepend = ''): array { $results = []; foreach ($array as $key => $value) { @@ -72,7 +72,7 @@ public static function dot($array, $prepend = ''): array return $results; } - public static function filesIn(string $path, $fileType): array + public static function filesIn(string $path, string $fileType): array { return filter( static fn(string $possibleModule) => strstr($possibleModule, $fileType), @@ -86,4 +86,13 @@ public static function extractClassName(object $object): string return $reflect->getShortName(); } + + public static function iterableToArray(iterable $iterable): array + { + if (is_array($iterable)) { + return $iterable; + } + + return iterator_to_array($iterable); + } } diff --git a/src/Shared/Domain/ValueObject/Uuid.php b/src/Shared/Domain/ValueObject/Uuid.php index 192e722b3..7bf9e9c00 100644 --- a/src/Shared/Domain/ValueObject/Uuid.php +++ b/src/Shared/Domain/ValueObject/Uuid.php @@ -35,7 +35,7 @@ public function __toString(): string return $this->value(); } - private function ensureIsValidUuid($id): void + private function ensureIsValidUuid(string $id): void { if (!RamseyUuid::isValid($id)) { throw new InvalidArgumentException(sprintf('<%s> does not allow the value <%s>.', static::class, $id)); diff --git a/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php b/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php index 687551d19..5542a5c7d 100644 --- a/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php +++ b/src/Shared/Infrastructure/Bus/Event/DomainEventMapping.php @@ -27,11 +27,6 @@ public function for(string $name) return $this->mapping[$name]; } - public function all() - { - return $this->mapping; - } - private function eventsExtractor(): callable { return fn(array $mapping, DomainEventSubscriber $subscriber) => array_merge( diff --git a/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php b/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php index 074617c47..349295901 100644 --- a/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php +++ b/src/Shared/Infrastructure/Doctrine/DatabaseConnections.php @@ -4,6 +4,7 @@ namespace CodelyTv\Shared\Infrastructure\Doctrine; +use CodelyTv\Shared\Domain\Utils; use CodelyTv\Tests\Shared\Infrastructure\Doctrine\MySqlDatabaseCleaner; use Doctrine\ORM\EntityManager; use function Lambdish\Phunctional\apply; @@ -15,7 +16,7 @@ final class DatabaseConnections public function __construct(iterable $connections) { - $this->connections = iterator_to_array(yield from $connections); + $this->connections = Utils::iterableToArray($connections); } public function clear(): void diff --git a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php index fb1a92364..4510b051c 100644 --- a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php +++ b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php @@ -28,7 +28,7 @@ private function generateIndexIfNotExists( Client $client, string $indexPrefix, string $schemasFolder, - $environment + string $environment ): void { $indexes = Utils::filesIn($schemasFolder, '.json'); diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php index 3b6f88173..25b7f1a6d 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php @@ -90,7 +90,7 @@ private function existsHydratorFor($field): bool return array_key_exists($field, $this->hydrators); } - private function hydrate($field, $value) + private function hydrate($field, string $value) { return $this->hydrators[$field]($value); } diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php index 8b785a09f..d6210ee63 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineRepository.php @@ -31,7 +31,7 @@ protected function remove(AggregateRoot $entity): void $this->entityManager()->flush($entity); } - protected function repository($entityClass): EntityRepository + protected function repository(string $entityClass): EntityRepository { return $this->entityManager->getRepository($entityClass); } diff --git a/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php b/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php index 37692e791..9d835decb 100644 --- a/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php +++ b/src/Shared/Infrastructure/Symfony/AddJsonBodyToRequestListener.php @@ -33,7 +33,7 @@ public function onKernelRequest(RequestEvent $event): void } } - private function containsHeader(Request $request, $name, $value): bool + private function containsHeader(Request $request, string $name, string $value): bool { return str_starts_with($request->headers->get($name), $value); } diff --git a/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php b/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php index 889695bde..31a8b0586 100644 --- a/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php +++ b/src/Shared/Infrastructure/Symfony/ApiExceptionsHttpStatusCodeMapping.php @@ -17,17 +17,12 @@ final class ApiExceptionsHttpStatusCodeMapping NotFoundHttpException::class => Response::HTTP_NOT_FOUND, ]; - public function register($exceptionClass, $statusCode): void + public function register(string $exceptionClass, int $statusCode): void { $this->exceptions[$exceptionClass] = $statusCode; } - public function exists($exceptionClass): bool - { - return array_key_exists($exceptionClass, $this->exceptions); - } - - public function statusCodeFor($exceptionClass): int + public function statusCodeFor(string $exceptionClass): int { $statusCode = get($exceptionClass, $this->exceptions, self::DEFAULT_STATUS_CODE); diff --git a/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php b/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php index 6e002f524..8555267f0 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 $handler; + private AuthenticateUserCommandHandler|null $handler; protected function setUp(): void { diff --git a/tests/Backoffice/Auth/Domain/AuthUserMother.php b/tests/Backoffice/Auth/Domain/AuthUserMother.php index 97f1847ca..3238ac542 100644 --- a/tests/Backoffice/Auth/Domain/AuthUserMother.php +++ b/tests/Backoffice/Auth/Domain/AuthUserMother.php @@ -28,9 +28,4 @@ public static function withUsername(AuthUsername $username): AuthUser { return self::create($username, AuthPasswordMother::random()); } - - public static function random(): AuthUser - { - return self::create(AuthUsernameMother::random(), AuthPasswordMother::random()); - } } diff --git a/tests/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php b/tests/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php index 46267619c..ba6db6151 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 $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 2edcf64f1..ef68cd5f2 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 $renamer; + private CourseRenamer|null $renamer; protected function setUp(): void { diff --git a/tests/Mooc/CoursesCounter/Application/Find/CoursesCounterResponseMother.php b/tests/Mooc/CoursesCounter/Application/Find/CoursesCounterResponseMother.php index 4b3996d7c..400221d64 100644 --- a/tests/Mooc/CoursesCounter/Application/Find/CoursesCounterResponseMother.php +++ b/tests/Mooc/CoursesCounter/Application/Find/CoursesCounterResponseMother.php @@ -14,9 +14,4 @@ public static function create(CoursesCounterTotal $total): CoursesCounterRespons { return new CoursesCounterResponse($total->value()); } - - public static function random(): CoursesCounterResponse - { - return self::create(CoursesCounterTotalMother::random()); - } } diff --git a/tests/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php b/tests/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php index 5da009538..6b5501fd0 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 $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 cf577b8e4..ed01dac2c 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 $subscriber; + private IncrementCoursesCounterOnCourseCreated|null $subscriber; protected function setUp(): void { diff --git a/tests/Shared/Domain/Criteria/CriteriaMother.php b/tests/Shared/Domain/Criteria/CriteriaMother.php index 5c0f8c35f..c23a549ba 100644 --- a/tests/Shared/Domain/Criteria/CriteriaMother.php +++ b/tests/Shared/Domain/Criteria/CriteriaMother.php @@ -24,14 +24,4 @@ public static function empty(): Criteria { return self::create(FiltersMother::blank(), OrderMother::none()); } - - public static function random(): Criteria - { - return self::create( - FiltersMother::random(), - OrderMother::random(), - IntegerMother::random(), - IntegerMother::random() - ); - } } diff --git a/tests/Shared/Domain/Criteria/FilterFieldMother.php b/tests/Shared/Domain/Criteria/FilterFieldMother.php index dc5cbbdd1..90403d21f 100644 --- a/tests/Shared/Domain/Criteria/FilterFieldMother.php +++ b/tests/Shared/Domain/Criteria/FilterFieldMother.php @@ -9,7 +9,7 @@ final class FilterFieldMother { - public static function create($fieldName): FilterField + public static function create(string $fieldName): FilterField { return new FilterField($fieldName); } diff --git a/tests/Shared/Domain/Criteria/FilterMother.php b/tests/Shared/Domain/Criteria/FilterMother.php index 80a6ecdbc..22d687383 100644 --- a/tests/Shared/Domain/Criteria/FilterMother.php +++ b/tests/Shared/Domain/Criteria/FilterMother.php @@ -16,7 +16,8 @@ public static function create(FilterField $field, FilterOperator $operator, Filt return new Filter($field, $operator, $value); } - public static function fromValues($values): Filter + /** @param string[] $values */ + public static function fromValues(array $values): Filter { return Filter::fromValues($values); } diff --git a/tests/Shared/Domain/Criteria/FilterValueMother.php b/tests/Shared/Domain/Criteria/FilterValueMother.php index dd412835d..701f5a86b 100644 --- a/tests/Shared/Domain/Criteria/FilterValueMother.php +++ b/tests/Shared/Domain/Criteria/FilterValueMother.php @@ -9,7 +9,7 @@ final class FilterValueMother { - public static function create($value): FilterValue + public static function create(string $value): FilterValue { return new FilterValue($value); } diff --git a/tests/Shared/Domain/Criteria/OrderByMother.php b/tests/Shared/Domain/Criteria/OrderByMother.php index 38b534c97..552e72b3f 100644 --- a/tests/Shared/Domain/Criteria/OrderByMother.php +++ b/tests/Shared/Domain/Criteria/OrderByMother.php @@ -9,7 +9,7 @@ final class OrderByMother { - public static function create($fieldName): OrderBy + public static function create(string $fieldName): OrderBy { return new OrderBy($fieldName); } diff --git a/tests/Shared/Domain/Criteria/OrderMother.php b/tests/Shared/Domain/Criteria/OrderMother.php index 08b2c72e6..0b1f94a27 100644 --- a/tests/Shared/Domain/Criteria/OrderMother.php +++ b/tests/Shared/Domain/Criteria/OrderMother.php @@ -15,11 +15,6 @@ public static function create(OrderBy $orderBy, OrderType $orderType): Order return new Order($orderBy, $orderType); } - public static function createDesc(string $orderBy): Order - { - return Order::createDesc(OrderByMother::create($orderBy)); - } - public static function none(): Order { return Order::none(); diff --git a/tests/Shared/Domain/DuplicatorMother.php b/tests/Shared/Domain/DuplicatorMother.php index 93891ac0d..4a74f61c8 100644 --- a/tests/Shared/Domain/DuplicatorMother.php +++ b/tests/Shared/Domain/DuplicatorMother.php @@ -10,7 +10,7 @@ final class DuplicatorMother { - public static function with($object, array $newParams) + public static function with($object, array $newParams): mixed { $duplicated = clone $object; $reflection = new ReflectionObject($duplicated); diff --git a/tests/Shared/Domain/IntegerMother.php b/tests/Shared/Domain/IntegerMother.php index 8e88f4896..faa83a9b6 100644 --- a/tests/Shared/Domain/IntegerMother.php +++ b/tests/Shared/Domain/IntegerMother.php @@ -6,21 +6,16 @@ final class IntegerMother { - public static function between($min, $max = PHP_INT_MAX): int + public static function between(int $min, $max = PHP_INT_MAX): int { return MotherCreator::random()->numberBetween($min, $max); } - public static function lessThan($max): int + public static function lessThan(int $max): int { return self::between(1, $max); } - public static function moreThan($min): int - { - return self::between($min); - } - public static function random(): int { return self::between(1); diff --git a/tests/Shared/Domain/RandomElementPicker.php b/tests/Shared/Domain/RandomElementPicker.php index df1d1eccf..baf41ecc8 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) + public static function from(...$elements): mixed { return MotherCreator::random()->randomElement($elements); } diff --git a/tests/Shared/Domain/Repeater.php b/tests/Shared/Domain/Repeater.php index 7ad63e527..eef4fdbc2 100644 --- a/tests/Shared/Domain/Repeater.php +++ b/tests/Shared/Domain/Repeater.php @@ -8,16 +8,11 @@ final class Repeater { - public static function repeat(callable $function, $quantity): array + public static function repeat(callable $function, int $quantity): array { return repeat($function, $quantity); } - public static function repeatLessThan(callable $function, $max): array - { - return self::repeat($function, IntegerMother::lessThan($max)); - } - public static function random(callable $function): array { return self::repeat($function, IntegerMother::lessThan(5)); diff --git a/tests/Shared/Infrastructure/Behat/ApiContext.php b/tests/Shared/Infrastructure/Behat/ApiContext.php index 286401ec4..272d31ef7 100644 --- a/tests/Shared/Infrastructure/Behat/ApiContext.php +++ b/tests/Shared/Infrastructure/Behat/ApiContext.php @@ -13,8 +13,8 @@ final class ApiContext extends RawMinkContext { - private $sessionHelper; - private $request; + private MinkHelper $sessionHelper; + private MinkSessionRequestHelper $request; public function __construct(private Session $minkSession) { @@ -99,7 +99,7 @@ public function theResponseStatusCodeShouldBe($expectedResponseCode): void } } - private function sanitizeOutput(string $output) + private function sanitizeOutput(string $output): false|string { return json_encode(json_decode(trim($output), true)); } diff --git a/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php b/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php index 3ff1b2a93..2d70452cb 100644 --- a/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php +++ b/tests/Shared/Infrastructure/Behat/ApplicationFeatureContext.php @@ -29,7 +29,7 @@ public function cleanEnvironment(): void /** * @Given /^I send an event to the event bus:$/ */ - public function iSendAnEventToTheEventBus(PyStringNode $event) + public function iSendAnEventToTheEventBus(PyStringNode $event): void { $domainEvent = $this->deserializer->deserialize($event->getRaw()); diff --git a/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php b/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php index 80629cad8..cfd5187c2 100644 --- a/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Command/InMemorySymfonyCommandBusTest.php @@ -8,11 +8,12 @@ use CodelyTv\Shared\Infrastructure\Bus\Command\CommandNotRegisteredError; use CodelyTv\Shared\Infrastructure\Bus\Command\InMemorySymfonyCommandBus; use CodelyTv\Tests\Shared\Infrastructure\PhpUnit\UnitTestCase; +use Mockery\MockInterface; use RuntimeException; final class InMemorySymfonyCommandBusTest extends UnitTestCase { - private $commandBus; + private InMemorySymfonyCommandBus|null $commandBus; protected function setUp(): void { @@ -34,10 +35,10 @@ public function it_should_raise_an_exception_dispatching_a_non_registered_comman { $this->expectException(CommandNotRegisteredError::class); - $this->commandBus->dispatch($this->mock(Command::class)); + $this->commandBus->dispatch($this->command()); } - private function commandHandler() + private function commandHandler(): object { return new class { public function __invoke(FakeCommand $command) @@ -46,4 +47,9 @@ public function __invoke(FakeCommand $command) } }; } + + 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 e15f13cf1..a8721d14a 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 $bus; - private $consumer; + private MySqlDoctrineEventBus|null $bus; + private MySqlDoctrineDomainEventsConsumer|null $consumer; protected function setUp(): void { diff --git a/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php b/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php index 8a1a06c90..820c6eb3d 100644 --- a/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Query/InMemorySymfonyQueryBusTest.php @@ -8,11 +8,12 @@ use CodelyTv\Shared\Infrastructure\Bus\Query\InMemorySymfonyQueryBus; use CodelyTv\Shared\Infrastructure\Bus\Query\QueryNotRegisteredError; use CodelyTv\Tests\Shared\Infrastructure\PhpUnit\UnitTestCase; +use Mockery\MockInterface; use RuntimeException; final class InMemorySymfonyQueryBusTest extends UnitTestCase { - private $queryBus; + private InMemorySymfonyQueryBus|null $queryBus; protected function setUp(): void { @@ -34,10 +35,10 @@ public function it_should_raise_an_exception_dispatching_a_non_registered_query( { $this->expectException(QueryNotRegisteredError::class); - $this->queryBus->ask($this->mock(Query::class)); + $this->queryBus->ask($this->query()); } - private function queryHandler() + private function queryHandler(): object { return new class { public function __invoke(FakeQuery $query) @@ -46,4 +47,9 @@ public function __invoke(FakeQuery $query) } }; } + + private function query(): Query|MockInterface + { + return $this->mock(Query::class); + } } diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php index 193793122..4e1ea83ff 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/DateTimeStringSimilarComparator.php @@ -57,7 +57,7 @@ protected function dateTimeToString(DateTimeInterface $datetime): string return $string ?: 'Invalid DateTime object'; } - private function isValidDateTimeString($expected): bool + private function isValidDateTimeString(string $expected): bool { $isValid = true; diff --git a/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php index 76939421c..e3f5d3675 100644 --- a/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php +++ b/tests/Shared/Infrastructure/PhpUnit/Comparator/DomainEventSimilarComparator.php @@ -12,7 +12,7 @@ final class DomainEventSimilarComparator extends Comparator { - private static $ignoredAttributes = ['eventId', 'occurredOn']; + private static array $ignoredAttributes = ['eventId', 'occurredOn']; public function accepts($expected, $actual): bool { diff --git a/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php b/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php index bb2b969fe..7b7a2e92f 100644 --- a/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php +++ b/tests/Shared/Infrastructure/PhpUnit/InfrastructureTestCase.php @@ -27,14 +27,12 @@ protected function assertSimilar($expected, $actual): void TestUtils::assertSimilar($expected, $actual); } - /** @return mixed */ - protected function service($id) + protected function service(string $id): mixed { return self::$container->get($id); } - /** @return mixed */ - protected function parameter($parameter) + protected function parameter($parameter): mixed { return self::$container->getParameter($parameter); } From f3eb51d5afb133c538c7151d5b6c6ac76bf5ac94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Fri, 13 Nov 2020 14:51:28 +0100 Subject: [PATCH 057/106] Apply code style --- .../DomainEvents/Domain/AnalyticsDomainEvent.php | 8 ++++++-- .../DependencyInjection/backoffice_services.yaml | 12 ++++++------ src/Shared/Domain/Collection.php | 1 - src/Shared/Domain/SecondsInterval.php | 2 +- src/Shared/Domain/ValueObject/IntValueObject.php | 7 +------ src/Shared/Domain/ValueObject/StringValueObject.php | 7 +------ .../MySql/MySqlDoctrineDomainEventsConsumer.php | 2 +- .../Doctrine/DoctrineCriteriaConverter.php | 7 +++++-- .../Infrastructure/Persistence/Doctrine/UuidType.php | 8 ++++---- src/Shared/Infrastructure/Symfony/FlashSession.php | 6 +++--- .../Find/CoursesCounterResponseMother.php | 1 - tests/Shared/Domain/Criteria/CriteriaMother.php | 1 - 12 files changed, 28 insertions(+), 34 deletions(-) diff --git a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php index 525830551..c21447421 100644 --- a/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php +++ b/src/Analytics/DomainEvents/Domain/AnalyticsDomainEvent.php @@ -6,7 +6,11 @@ final 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/Backoffice/Shared/Infrastructure/Symfony/DependencyInjection/backoffice_services.yaml b/src/Backoffice/Shared/Infrastructure/Symfony/DependencyInjection/backoffice_services.yaml index 77b0c6a55..3260a112e 100644 --- a/src/Backoffice/Shared/Infrastructure/Symfony/DependencyInjection/backoffice_services.yaml +++ b/src/Backoffice/Shared/Infrastructure/Symfony/DependencyInjection/backoffice_services.yaml @@ -2,13 +2,13 @@ services: # Databases # @todo this should be from backoffice, no mooc Doctrine\ORM\EntityManager: - factory: [CodelyTv\Mooc\Shared\Infrastructure\Doctrine\MoocEntityManagerFactory, create] + factory: [ CodelyTv\Mooc\Shared\Infrastructure\Doctrine\MoocEntityManagerFactory, create ] arguments: - - driver: '%env(MOOC_DATABASE_DRIVER)%' - host: '%env(MOOC_DATABASE_HOST)%' - port: '%env(MOOC_DATABASE_PORT)%' - dbname: '%env(MOOC_DATABASE_NAME)%' - user: '%env(MOOC_DATABASE_USER)%' + - driver: '%env(MOOC_DATABASE_DRIVER)%' + host: '%env(MOOC_DATABASE_HOST)%' + port: '%env(MOOC_DATABASE_PORT)%' + dbname: '%env(MOOC_DATABASE_NAME)%' + user: '%env(MOOC_DATABASE_USER)%' password: '%env(MOOC_DATABASE_PASSWORD)%' - '%env(APP_ENV)%' tags: diff --git a/src/Shared/Domain/Collection.php b/src/Shared/Domain/Collection.php index cd5f06d15..8975e05ea 100644 --- a/src/Shared/Domain/Collection.php +++ b/src/Shared/Domain/Collection.php @@ -7,7 +7,6 @@ use ArrayIterator; use Countable; use IteratorAggregate; -use function Lambdish\Phunctional\each; abstract class Collection implements Countable, IteratorAggregate { diff --git a/src/Shared/Domain/SecondsInterval.php b/src/Shared/Domain/SecondsInterval.php index ba1d37c3b..52f480f21 100644 --- a/src/Shared/Domain/SecondsInterval.php +++ b/src/Shared/Domain/SecondsInterval.php @@ -1,6 +1,6 @@ value() > $other->value(); } - - public function __toString(): string - { - return (string) $this->value(); - } } diff --git a/src/Shared/Domain/ValueObject/StringValueObject.php b/src/Shared/Domain/ValueObject/StringValueObject.php index 59c2b2eab..77acacd97 100644 --- a/src/Shared/Domain/ValueObject/StringValueObject.php +++ b/src/Shared/Domain/ValueObject/StringValueObject.php @@ -4,7 +4,7 @@ namespace CodelyTv\Shared\Domain\ValueObject; -abstract class StringValueObject implements \Stringable +abstract class StringValueObject { public function __construct(protected string $value) { @@ -14,9 +14,4 @@ public function value(): string { return $this->value; } - - public function __toString(): string - { - return $this->value(); - } } diff --git a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php index e6793eb37..127cc1715 100644 --- a/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php +++ b/src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineDomainEventsConsumer.php @@ -20,7 +20,7 @@ final class MySqlDoctrineDomainEventsConsumer public function __construct(EntityManager $entityManager, private DomainEventMapping $eventMapping) { - $this->connection = $entityManager->getConnection(); + $this->connection = $entityManager->getConnection(); } public function consume(callable $subscribers, int $eventsToConsume): void diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php index 25b7f1a6d..73a03f66e 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/DoctrineCriteriaConverter.php @@ -14,8 +14,11 @@ final class DoctrineCriteriaConverter { - public function __construct(private Criteria $criteria, private array $criteriaToDoctrineFields = [], private array $hydrators = []) - { + public function __construct( + private Criteria $criteria, + private array $criteriaToDoctrineFields = [], + private array $hydrators = [] + ) { } public static function convert( diff --git a/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php b/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php index 5353a8716..e116edbd2 100644 --- a/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php +++ b/src/Shared/Infrastructure/Persistence/Doctrine/UuidType.php @@ -15,14 +15,14 @@ abstract class UuidType extends StringType implements DoctrineCustomType { abstract protected function typeClassName(): string; - public function getName(): string + public static function customTypeName(): string { - return self::customTypeName(); + return Utils::toSnakeCase(str_replace('Type', '', last(explode('\\', static::class)))); } - public static function customTypeName(): string + public function getName(): string { - return Utils::toSnakeCase(str_replace('Type', '', last(explode('\\', static::class)))); + return self::customTypeName(); } public function convertToPHPValue($value, AbstractPlatform $platform) diff --git a/src/Shared/Infrastructure/Symfony/FlashSession.php b/src/Shared/Infrastructure/Symfony/FlashSession.php index 0adfa59e1..869ce8800 100644 --- a/src/Shared/Infrastructure/Symfony/FlashSession.php +++ b/src/Shared/Infrastructure/Symfony/FlashSession.php @@ -35,8 +35,8 @@ public function get(string $key, $default = null) 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); + 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/tests/Mooc/CoursesCounter/Application/Find/CoursesCounterResponseMother.php b/tests/Mooc/CoursesCounter/Application/Find/CoursesCounterResponseMother.php index 400221d64..f3b3c8b2b 100644 --- a/tests/Mooc/CoursesCounter/Application/Find/CoursesCounterResponseMother.php +++ b/tests/Mooc/CoursesCounter/Application/Find/CoursesCounterResponseMother.php @@ -6,7 +6,6 @@ use CodelyTv\Mooc\CoursesCounter\Application\Find\CoursesCounterResponse; use CodelyTv\Mooc\CoursesCounter\Domain\CoursesCounterTotal; -use CodelyTv\Tests\Mooc\CoursesCounter\Domain\CoursesCounterTotalMother; final class CoursesCounterResponseMother { diff --git a/tests/Shared/Domain/Criteria/CriteriaMother.php b/tests/Shared/Domain/Criteria/CriteriaMother.php index c23a549ba..4fe2bb6b6 100644 --- a/tests/Shared/Domain/Criteria/CriteriaMother.php +++ b/tests/Shared/Domain/Criteria/CriteriaMother.php @@ -7,7 +7,6 @@ use CodelyTv\Shared\Domain\Criteria\Criteria; use CodelyTv\Shared\Domain\Criteria\Filters; use CodelyTv\Shared\Domain\Criteria\Order; -use CodelyTv\Tests\Shared\Domain\IntegerMother; final class CriteriaMother { From e0b66b11cdf1158e18575b462cb4230389f23e26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Fri, 13 Nov 2020 15:21:53 +0100 Subject: [PATCH 058/106] Simplify all ObjectMothers --- src/Shared/Domain/ValueObject/Enum.php | 2 +- .../AuthenticateUserCommandHandlerTest.php | 8 +++---- .../AuthenticateUserCommandMother.php | 16 +++++++------- .../Auth/Domain/AuthPasswordMother.php | 9 ++------ .../Backoffice/Auth/Domain/AuthUserMother.php | 9 ++------ .../Auth/Domain/AuthUsernameMother.php | 9 ++------ .../Courses/Domain/BackofficeCourseMother.php | 15 +++---------- ...icsearchBackofficeCourseRepositoryTest.php | 10 ++++----- .../MySqlBackofficeCourseRepositoryTest.php | 10 ++++----- .../Create/CreateCourseCommandHandlerTest.php | 2 +- .../Create/CreateCourseCommandMother.php | 18 +++++++++------- .../Application/Update/CourseRenamerTest.php | 8 +++---- .../Domain/CourseCreatedDomainEventMother.php | 18 +++++++++------- .../Courses/Domain/CourseDurationMother.php | 16 +++++++------- tests/Mooc/Courses/Domain/CourseIdMother.php | 14 ++----------- tests/Mooc/Courses/Domain/CourseMother.php | 18 +++++++++------- .../Mooc/Courses/Domain/CourseNameMother.php | 9 ++------ .../Persistence/CourseRepositoryTest.php | 6 +++--- .../Find/CoursesCounterResponseMother.php | 5 +++-- .../FindCoursesCounterQueryHandlerTest.php | 2 +- ...ementCoursesCounterOnCourseCreatedTest.php | 8 +++---- .../Domain/CoursesCounterIdMother.php | 9 ++------ ...sesCounterIncrementedDomainEventMother.php | 14 ++++++------- .../Domain/CoursesCounterMother.php | 21 +++++++------------ .../Domain/CoursesCounterTotalMother.php | 6 +++--- .../Domain/Criteria/FilterFieldMother.php | 9 ++------ tests/Shared/Domain/Criteria/FilterMother.php | 18 +++++++++------- .../Domain/Criteria/FilterValueMother.php | 9 ++------ .../Shared/Domain/Criteria/FiltersMother.php | 5 ----- .../Shared/Domain/Criteria/OrderByMother.php | 9 ++------ tests/Shared/Domain/Criteria/OrderMother.php | 9 ++------ tests/Shared/Domain/IntegerMother.php | 10 ++++----- tests/Shared/Domain/MotherCreator.php | 4 ++-- tests/Shared/Domain/UuidMother.php | 2 +- tests/Shared/Domain/WordMother.php | 2 +- .../Event/MySql/MySqlDoctrineEventBusTest.php | 4 ++-- .../Event/RabbitMq/RabbitMqEventBusTest.php | 8 +++---- 37 files changed, 141 insertions(+), 210 deletions(-) diff --git a/src/Shared/Domain/ValueObject/Enum.php b/src/Shared/Domain/ValueObject/Enum.php index d3a754c02..18afa4d3f 100644 --- a/src/Shared/Domain/ValueObject/Enum.php +++ b/src/Shared/Domain/ValueObject/Enum.php @@ -48,7 +48,7 @@ public static function randomValue() return self::values()[array_rand(self::values())]; } - public static function random(): self + public static function random(): static { return new static(self::randomValue()); } diff --git a/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php b/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandHandlerTest.php index 8555267f0..0d83c9376 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::random(); + $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::random(); + $command = AuthenticateUserCommandMother::create(); $username = AuthUsernameMother::create($command->username()); $this->shouldSearch($username); @@ -52,8 +52,8 @@ public function it_should_throw_an_exception_when_the_password_does_not_math(): { $this->expectException(InvalidAuthCredentials::class); - $command = AuthenticateUserCommandMother::random(); - $authUser = AuthUserMother::withUsername(AuthUsernameMother::create($command->username())); + $command = AuthenticateUserCommandMother::create(); + $authUser = AuthUserMother::create(username: AuthUsernameMother::create($command->username())); $this->shouldSearch($authUser->username(), $authUser); diff --git a/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandMother.php b/tests/Backoffice/Auth/Application/Authenticate/AuthenticateUserCommandMother.php index c58631ea2..d42c37d95 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, AuthPassword $password): AuthenticateUserCommand - { - return new AuthenticateUserCommand($username->value(), $password->value()); - } - - public static function random(): AuthenticateUserCommand - { - return self::create(AuthUsernameMother::random(), AuthPasswordMother::random()); + 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/Domain/AuthPasswordMother.php b/tests/Backoffice/Auth/Domain/AuthPasswordMother.php index d88d293d0..6b344f818 100644 --- a/tests/Backoffice/Auth/Domain/AuthPasswordMother.php +++ b/tests/Backoffice/Auth/Domain/AuthPasswordMother.php @@ -9,13 +9,8 @@ final class AuthPasswordMother { - public static function create(string $value): AuthPassword + public static function create(?string $value = null): AuthPassword { - return new AuthPassword($value); - } - - public static function random(): AuthPassword - { - return self::create(UuidMother::random()); + return new AuthPassword($value ?? UuidMother::create()); } } diff --git a/tests/Backoffice/Auth/Domain/AuthUserMother.php b/tests/Backoffice/Auth/Domain/AuthUserMother.php index 3238ac542..0776c4838 100644 --- a/tests/Backoffice/Auth/Domain/AuthUserMother.php +++ b/tests/Backoffice/Auth/Domain/AuthUserMother.php @@ -11,9 +11,9 @@ final class AuthUserMother { - public static function create(AuthUsername $username, AuthPassword $password): AuthUser + public static function create(?AuthUsername $username = null, ?AuthPassword $password = null): AuthUser { - return new AuthUser($username, $password); + return new AuthUser($username ?? AuthUsernameMother::create(), $password ?? AuthPasswordMother::create()); } public static function fromCommand(AuthenticateUserCommand $command): AuthUser @@ -23,9 +23,4 @@ public static function fromCommand(AuthenticateUserCommand $command): AuthUser AuthPasswordMother::create($command->password()) ); } - - public static function withUsername(AuthUsername $username): AuthUser - { - return self::create($username, AuthPasswordMother::random()); - } } diff --git a/tests/Backoffice/Auth/Domain/AuthUsernameMother.php b/tests/Backoffice/Auth/Domain/AuthUsernameMother.php index fc87619b0..128f15382 100644 --- a/tests/Backoffice/Auth/Domain/AuthUsernameMother.php +++ b/tests/Backoffice/Auth/Domain/AuthUsernameMother.php @@ -9,13 +9,8 @@ final class AuthUsernameMother { - public static function create(string $value): AuthUsername + public static function create(?string $value = null): AuthUsername { - return new AuthUsername($value); - } - - public static function random(): AuthUsername - { - return self::create(WordMother::random()); + return new AuthUsername($value ?? WordMother::create()); } } diff --git a/tests/Backoffice/Courses/Domain/BackofficeCourseMother.php b/tests/Backoffice/Courses/Domain/BackofficeCourseMother.php index ccb71e7a0..a28a35032 100644 --- a/tests/Backoffice/Courses/Domain/BackofficeCourseMother.php +++ b/tests/Backoffice/Courses/Domain/BackofficeCourseMother.php @@ -14,18 +14,9 @@ final class BackofficeCourseMother public static function create(?string $id = null, ?string $name = null, ?string $duration = null): BackofficeCourse { return new BackofficeCourse( - $id ?? CourseIdMother::random()->value(), - $name ?? CourseNameMother::random()->value(), - $duration ?? CourseDurationMother::random()->value() - ); - } - - public static function random(): BackofficeCourse - { - return self::create( - CourseIdMother::random()->value(), - CourseNameMother::random()->value(), - CourseDurationMother::random()->value() + $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 dc6b59133..3a54c1407 100644 --- a/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php +++ b/tests/Backoffice/Courses/Infrastructure/Persistence/ElasticsearchBackofficeCourseRepositoryTest.php @@ -14,14 +14,14 @@ final class ElasticsearchBackofficeCourseRepositoryTest extends BackofficeCourse /** @test */ public function it_should_save_a_valid_course(): void { - $this->elasticRepository()->save(BackofficeCourseMother::random()); + $this->elasticRepository()->save(BackofficeCourseMother::create()); } /** @test */ public function it_should_search_all_existing_courses(): void { - $existingCourse = BackofficeCourseMother::random(); - $anotherExistingCourse = BackofficeCourseMother::random(); + $existingCourse = BackofficeCourseMother::create(); + $anotherExistingCourse = BackofficeCourseMother::create(); $existingCourses = [$existingCourse, $anotherExistingCourse]; $this->elasticRepository()->save($existingCourse); @@ -33,8 +33,8 @@ 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::random(); - $anotherExistingCourse = BackofficeCourseMother::random(); + $existingCourse = BackofficeCourseMother::create(); + $anotherExistingCourse = BackofficeCourseMother::create(); $existingCourses = [$existingCourse, $anotherExistingCourse]; $this->elasticRepository()->save($existingCourse); diff --git a/tests/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php b/tests/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php index af4f67abb..bb35da789 100644 --- a/tests/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php +++ b/tests/Backoffice/Courses/Infrastructure/Persistence/MySqlBackofficeCourseRepositoryTest.php @@ -14,14 +14,14 @@ final class MySqlBackofficeCourseRepositoryTest extends BackofficeCoursesModuleI /** @test */ public function it_should_save_a_valid_course(): void { - $this->mySqlRepository()->save(BackofficeCourseMother::random()); + $this->mySqlRepository()->save(BackofficeCourseMother::create()); } /** @test */ public function it_should_search_all_existing_courses(): void { - $existingCourse = BackofficeCourseMother::random(); - $anotherExistingCourse = BackofficeCourseMother::random(); + $existingCourse = BackofficeCourseMother::create(); + $anotherExistingCourse = BackofficeCourseMother::create(); $existingCourses = [$existingCourse, $anotherExistingCourse]; $this->mySqlRepository()->save($existingCourse); @@ -33,8 +33,8 @@ 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::random(); - $anotherExistingCourse = BackofficeCourseMother::random(); + $existingCourse = BackofficeCourseMother::create(); + $anotherExistingCourse = BackofficeCourseMother::create(); $existingCourses = [$existingCourse, $anotherExistingCourse]; $this->mySqlRepository()->save($existingCourse); diff --git a/tests/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php b/tests/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php index ba6db6151..6a85c1f1a 100644 --- a/tests/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php +++ b/tests/Mooc/Courses/Application/Create/CreateCourseCommandHandlerTest.php @@ -24,7 +24,7 @@ protected function setUp(): void /** @test */ public function it_should_create_a_valid_course(): void { - $command = CreateCourseCommandMother::random(); + $command = CreateCourseCommandMother::create(); $course = CourseMother::fromRequest($command); $domainEvent = CourseCreatedDomainEventMother::fromCourse($course); diff --git a/tests/Mooc/Courses/Application/Create/CreateCourseCommandMother.php b/tests/Mooc/Courses/Application/Create/CreateCourseCommandMother.php index ed22076ae..a1ba53fe2 100644 --- a/tests/Mooc/Courses/Application/Create/CreateCourseCommandMother.php +++ b/tests/Mooc/Courses/Application/Create/CreateCourseCommandMother.php @@ -14,13 +14,15 @@ final class CreateCourseCommandMother { - public static function create(CourseId $id, CourseName $name, CourseDuration $duration): CreateCourseCommand - { - return new CreateCourseCommand($id->value(), $name->value(), $duration->value()); - } - - public static function random(): CreateCourseCommand - { - return self::create(CourseIdMother::random(), CourseNameMother::random(), CourseDurationMother::random()); + 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 ef68cd5f2..2815aa7fe 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::random(); - $newName = CourseNameMother::random(); + $course = CourseMother::create(); + $newName = CourseNameMother::create(); $renamedCourse = DuplicatorMother::with($course, ['name' => $newName]); $this->shouldSearch($course->id(), $course); @@ -42,10 +42,10 @@ public function it_should_throw_an_exception_when_the_course_not_exist(): void { $this->expectException(CourseNotExist::class); - $id = CourseIdMother::random(); + $id = CourseIdMother::create(); $this->shouldSearch($id, null); - $this->renamer->__invoke($id, CourseNameMother::random()); + $this->renamer->__invoke($id, CourseNameMother::create()); } } diff --git a/tests/Mooc/Courses/Domain/CourseCreatedDomainEventMother.php b/tests/Mooc/Courses/Domain/CourseCreatedDomainEventMother.php index 33776136f..00044f5fe 100644 --- a/tests/Mooc/Courses/Domain/CourseCreatedDomainEventMother.php +++ b/tests/Mooc/Courses/Domain/CourseCreatedDomainEventMother.php @@ -12,18 +12,20 @@ final class CourseCreatedDomainEventMother { - public static function create(CourseId $id, CourseName $name, CourseDuration $duration): CourseCreatedDomainEvent - { - return new CourseCreatedDomainEvent($id->value(), $name->value(), $duration->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 random(): CourseCreatedDomainEvent - { - return self::create(CourseIdMother::random(), CourseNameMother::random(), CourseDurationMother::random()); - } } diff --git a/tests/Mooc/Courses/Domain/CourseDurationMother.php b/tests/Mooc/Courses/Domain/CourseDurationMother.php index 14c279a7c..a3b78ae84 100644 --- a/tests/Mooc/Courses/Domain/CourseDurationMother.php +++ b/tests/Mooc/Courses/Domain/CourseDurationMother.php @@ -10,19 +10,17 @@ final class CourseDurationMother { - public static function create(string $value): CourseDuration + public static function create(?string $value = null): CourseDuration { - return new CourseDuration($value); + return new CourseDuration($value ?? self::random()); } - public static function random(): CourseDuration + private static function random(): string { - return self::create( - sprintf( - '%s %s', - IntegerMother::lessThan(100), - RandomElementPicker::from('months', 'years', 'days', 'hours', 'minutes', 'seconds') - ) + 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 a84fee05a..f80119695 100644 --- a/tests/Mooc/Courses/Domain/CourseIdMother.php +++ b/tests/Mooc/Courses/Domain/CourseIdMother.php @@ -9,18 +9,8 @@ final class CourseIdMother { - public static function create(string $value): CourseId + public static function create(?string $value = null): CourseId { - return new CourseId($value); - } - - public static function creator(): callable - { - return static fn() => self::random(); - } - - public static function random(): CourseId - { - return self::create(UuidMother::random()); + return new CourseId($value ?? UuidMother::create()); } } diff --git a/tests/Mooc/Courses/Domain/CourseMother.php b/tests/Mooc/Courses/Domain/CourseMother.php index f56953dfa..31a622989 100644 --- a/tests/Mooc/Courses/Domain/CourseMother.php +++ b/tests/Mooc/Courses/Domain/CourseMother.php @@ -12,9 +12,16 @@ final class CourseMother { - public static function create(CourseId $id, CourseName $name, CourseDuration $duration): Course - { - return new Course($id, $name, $duration); + 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 @@ -25,9 +32,4 @@ public static function fromRequest(CreateCourseCommand $request): Course CourseDurationMother::create($request->duration()) ); } - - public static function random(): Course - { - return self::create(CourseIdMother::random(), CourseNameMother::random(), CourseDurationMother::random()); - } } diff --git a/tests/Mooc/Courses/Domain/CourseNameMother.php b/tests/Mooc/Courses/Domain/CourseNameMother.php index 6a01e95aa..210496b49 100644 --- a/tests/Mooc/Courses/Domain/CourseNameMother.php +++ b/tests/Mooc/Courses/Domain/CourseNameMother.php @@ -9,13 +9,8 @@ final class CourseNameMother { - public static function create(string $value): CourseName + public static function create(?string $value = null): CourseName { - return new CourseName($value); - } - - public static function random(): CourseName - { - return self::create(WordMother::random()); + 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 f15356a87..25b23b6b9 100644 --- a/tests/Mooc/Courses/Infrastructure/Persistence/CourseRepositoryTest.php +++ b/tests/Mooc/Courses/Infrastructure/Persistence/CourseRepositoryTest.php @@ -13,7 +13,7 @@ final class CourseRepositoryTest extends CoursesModuleInfrastructureTestCase /** @test */ public function it_should_save_a_course(): void { - $course = CourseMother::random(); + $course = CourseMother::create(); $this->repository()->save($course); } @@ -21,7 +21,7 @@ public function it_should_save_a_course(): void /** @test */ public function it_should_return_an_existing_course(): void { - $course = CourseMother::random(); + $course = CourseMother::create(); $this->repository()->save($course); @@ -31,6 +31,6 @@ public function it_should_return_an_existing_course(): void /** @test */ public function it_should_not_return_a_non_existing_course(): void { - $this->assertNull($this->repository()->search(CourseIdMother::random())); + $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 f3b3c8b2b..7abaed048 100644 --- a/tests/Mooc/CoursesCounter/Application/Find/CoursesCounterResponseMother.php +++ b/tests/Mooc/CoursesCounter/Application/Find/CoursesCounterResponseMother.php @@ -6,11 +6,12 @@ use CodelyTv\Mooc\CoursesCounter\Application\Find\CoursesCounterResponse; use CodelyTv\Mooc\CoursesCounter\Domain\CoursesCounterTotal; +use CodelyTv\Tests\Mooc\CoursesCounter\Domain\CoursesCounterTotalMother; final class CoursesCounterResponseMother { - public static function create(CoursesCounterTotal $total): CoursesCounterResponse + public static function create(?CoursesCounterTotal $total = null): CoursesCounterResponse { - return new CoursesCounterResponse($total->value()); + 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 6b5501fd0..630137874 100644 --- a/tests/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php +++ b/tests/Mooc/CoursesCounter/Application/Find/FindCoursesCounterQueryHandlerTest.php @@ -25,7 +25,7 @@ protected function setUp(): void /** @test */ public function it_should_find_an_existing_courses_counter(): void { - $counter = CoursesCounterMother::random(); + $counter = CoursesCounterMother::create(); $query = new FindCoursesCounterQuery(); $response = CoursesCounterResponseMother::create($counter->total()); diff --git a/tests/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php b/tests/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php index ed01dac2c..9074bb70d 100644 --- a/tests/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php +++ b/tests/Mooc/CoursesCounter/Application/Increment/IncrementCoursesCounterOnCourseCreatedTest.php @@ -32,7 +32,7 @@ protected function setUp(): void /** @test */ public function it_should_initialize_a_new_counter(): void { - $event = CourseCreatedDomainEventMother::random(); + $event = CourseCreatedDomainEventMother::create(); $courseId = CourseIdMother::create($event->aggregateId()); $newCounter = CoursesCounterMother::withOne($courseId); @@ -49,10 +49,10 @@ public function it_should_initialize_a_new_counter(): void /** @test */ public function it_should_increment_an_existing_counter(): void { - $event = CourseCreatedDomainEventMother::random(); + $event = CourseCreatedDomainEventMother::create(); $courseId = CourseIdMother::create($event->aggregateId()); - $existingCounter = CoursesCounterMother::random(); + $existingCounter = CoursesCounterMother::create(); $incrementedCounter = CoursesCounterMother::incrementing($existingCounter, $courseId); $domainEvent = CoursesCounterIncrementedDomainEventMother::fromCounter($incrementedCounter); @@ -66,7 +66,7 @@ public function it_should_increment_an_existing_counter(): void /** @test */ public function it_should_not_increment_an_already_incremented_course(): void { - $event = CourseCreatedDomainEventMother::random(); + $event = CourseCreatedDomainEventMother::create(); $courseId = CourseIdMother::create($event->aggregateId()); $existingCounter = CoursesCounterMother::withOne($courseId); diff --git a/tests/Mooc/CoursesCounter/Domain/CoursesCounterIdMother.php b/tests/Mooc/CoursesCounter/Domain/CoursesCounterIdMother.php index ce3089cc6..e0dfc9c57 100644 --- a/tests/Mooc/CoursesCounter/Domain/CoursesCounterIdMother.php +++ b/tests/Mooc/CoursesCounter/Domain/CoursesCounterIdMother.php @@ -9,13 +9,8 @@ final class CoursesCounterIdMother { - public static function create(string $value): CoursesCounterId + public static function create(?string $value = null): CoursesCounterId { - return new CoursesCounterId($value); - } - - public static function random(): CoursesCounterId - { - return self::create(UuidMother::random()); + return new CoursesCounterId($value ?? UuidMother::create()); } } diff --git a/tests/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEventMother.php b/tests/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEventMother.php index 8a3c60bba..f3fc1e4d3 100644 --- a/tests/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEventMother.php +++ b/tests/Mooc/CoursesCounter/Domain/CoursesCounterIncrementedDomainEventMother.php @@ -12,19 +12,17 @@ final class CoursesCounterIncrementedDomainEventMother { public static function create( - CoursesCounterId $id, - CoursesCounterTotal $total + ?CoursesCounterId $id = null, + ?CoursesCounterTotal $total = null ): CoursesCounterIncrementedDomainEvent { - return new CoursesCounterIncrementedDomainEvent($id->value(), $total->value()); + 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 random(): CoursesCounterIncrementedDomainEvent - { - return self::create(CoursesCounterIdMother::random(), CoursesCounterTotalMother::random()); - } } diff --git a/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php b/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php index b042dcb96..d05637331 100644 --- a/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php +++ b/tests/Mooc/CoursesCounter/Domain/CoursesCounterMother.php @@ -14,16 +14,20 @@ final class CoursesCounterMother { public static function create( - CoursesCounterId $id, - CoursesCounterTotal $total, + ?CoursesCounterId $id = null, + ?CoursesCounterTotal $total = null, CourseId ...$existingCourses ): CoursesCounter { - return new CoursesCounter($id, $total, ...$existingCourses); + return new CoursesCounter( + $id ?? CoursesCounterIdMother::create(), + $total ?? CoursesCounterTotalMother::create(), + ...count($existingCourses) ? $existingCourses : Repeater::random(fn() => CourseIdMother::create()) + ); } public static function withOne(CourseId $courseId): CoursesCounter { - return self::create(CoursesCounterIdMother::random(), CoursesCounterTotalMother::one(), $courseId); + return self::create(CoursesCounterIdMother::create(), CoursesCounterTotalMother::one(), $courseId); } public static function incrementing(CoursesCounter $existingCounter, CourseId $courseId): CoursesCounter @@ -34,13 +38,4 @@ public static function incrementing(CoursesCounter $existingCounter, CourseId $c ...array_merge($existingCounter->existingCourses(), [$courseId]) ); } - - public static function random(): CoursesCounter - { - return self::create( - CoursesCounterIdMother::random(), - CoursesCounterTotalMother::random(), - ...Repeater::random(CourseIdMother::creator()) - ); - } } diff --git a/tests/Mooc/CoursesCounter/Domain/CoursesCounterTotalMother.php b/tests/Mooc/CoursesCounter/Domain/CoursesCounterTotalMother.php index f151d5855..49115ea90 100644 --- a/tests/Mooc/CoursesCounter/Domain/CoursesCounterTotalMother.php +++ b/tests/Mooc/CoursesCounter/Domain/CoursesCounterTotalMother.php @@ -9,9 +9,9 @@ final class CoursesCounterTotalMother { - public static function create(int $value): CoursesCounterTotal + public static function create(?int $value = null): CoursesCounterTotal { - return new CoursesCounterTotal($value); + return new CoursesCounterTotal($value ?? IntegerMother::create()); } public static function one(): CoursesCounterTotal @@ -21,6 +21,6 @@ public static function one(): CoursesCounterTotal public static function random(): CoursesCounterTotal { - return self::create(IntegerMother::random()); + return self::create(IntegerMother::create()); } } diff --git a/tests/Shared/Domain/Criteria/FilterFieldMother.php b/tests/Shared/Domain/Criteria/FilterFieldMother.php index 90403d21f..01f35645e 100644 --- a/tests/Shared/Domain/Criteria/FilterFieldMother.php +++ b/tests/Shared/Domain/Criteria/FilterFieldMother.php @@ -9,13 +9,8 @@ final class FilterFieldMother { - public static function create(string $fieldName): FilterField + public static function create(?string $fieldName = null): FilterField { - return new FilterField($fieldName); - } - - public static function random(): FilterField - { - return self::create(WordMother::random()); + return new FilterField($fieldName ?? WordMother::create()); } } diff --git a/tests/Shared/Domain/Criteria/FilterMother.php b/tests/Shared/Domain/Criteria/FilterMother.php index 22d687383..9f3a6fcc5 100644 --- a/tests/Shared/Domain/Criteria/FilterMother.php +++ b/tests/Shared/Domain/Criteria/FilterMother.php @@ -11,9 +11,16 @@ final class FilterMother { - public static function create(FilterField $field, FilterOperator $operator, FilterValue $value): Filter - { - return new Filter($field, $operator, $value); + public static function create( + ?FilterField $field = null, + ?FilterOperator $operator = null, + ?FilterValue $value = null + ): Filter { + return new Filter( + $field ?? FilterFieldMother::create(), + $operator ?? FilterOperator::random(), + $value ?? FilterValueMother::create() + ); } /** @param string[] $values */ @@ -21,9 +28,4 @@ public static function fromValues(array $values): Filter { return Filter::fromValues($values); } - - public static function random(): Filter - { - return self::create(FilterFieldMother::random(), FilterOperator::random(), FilterValueMother::random()); - } } diff --git a/tests/Shared/Domain/Criteria/FilterValueMother.php b/tests/Shared/Domain/Criteria/FilterValueMother.php index 701f5a86b..aa78e74a0 100644 --- a/tests/Shared/Domain/Criteria/FilterValueMother.php +++ b/tests/Shared/Domain/Criteria/FilterValueMother.php @@ -9,13 +9,8 @@ final class FilterValueMother { - public static function create(string $value): FilterValue + public static function create(?string $value = null): FilterValue { - return new FilterValue($value); - } - - public static function random(): FilterValue - { - return self::create(WordMother::random()); + return new FilterValue($value ?? WordMother::create()); } } diff --git a/tests/Shared/Domain/Criteria/FiltersMother.php b/tests/Shared/Domain/Criteria/FiltersMother.php index 8d4b6de4e..fe0009f5f 100644 --- a/tests/Shared/Domain/Criteria/FiltersMother.php +++ b/tests/Shared/Domain/Criteria/FiltersMother.php @@ -24,9 +24,4 @@ public static function blank(): Filters { return self::create([]); } - - public static function random(): Filters - { - return self::create([FilterMother::random()]); - } } diff --git a/tests/Shared/Domain/Criteria/OrderByMother.php b/tests/Shared/Domain/Criteria/OrderByMother.php index 552e72b3f..457e35bf6 100644 --- a/tests/Shared/Domain/Criteria/OrderByMother.php +++ b/tests/Shared/Domain/Criteria/OrderByMother.php @@ -9,13 +9,8 @@ final class OrderByMother { - public static function create(string $fieldName): OrderBy + public static function create(?string $fieldName = null): OrderBy { - return new OrderBy($fieldName); - } - - public static function random(): OrderBy - { - return self::create(WordMother::random()); + return new OrderBy($fieldName ?? WordMother::create()); } } diff --git a/tests/Shared/Domain/Criteria/OrderMother.php b/tests/Shared/Domain/Criteria/OrderMother.php index 0b1f94a27..10e791440 100644 --- a/tests/Shared/Domain/Criteria/OrderMother.php +++ b/tests/Shared/Domain/Criteria/OrderMother.php @@ -10,18 +10,13 @@ final class OrderMother { - public static function create(OrderBy $orderBy, OrderType $orderType): Order + public static function create(?OrderBy $orderBy = null, ?OrderType $orderType = null): Order { - return new Order($orderBy, $orderType); + return new Order($orderBy ?? OrderByMother::create(), $orderType ?? OrderType::random()); } public static function none(): Order { return Order::none(); } - - public static function random(): Order - { - return self::create(OrderByMother::random(), OrderType::random()); - } } diff --git a/tests/Shared/Domain/IntegerMother.php b/tests/Shared/Domain/IntegerMother.php index faa83a9b6..ac6259f3b 100644 --- a/tests/Shared/Domain/IntegerMother.php +++ b/tests/Shared/Domain/IntegerMother.php @@ -6,6 +6,11 @@ final class IntegerMother { + public static function create(): int + { + return self::between(1); + } + public static function between(int $min, $max = PHP_INT_MAX): int { return MotherCreator::random()->numberBetween($min, $max); @@ -15,9 +20,4 @@ public static function lessThan(int $max): int { return self::between(1, $max); } - - public static function random(): int - { - return self::between(1); - } } diff --git a/tests/Shared/Domain/MotherCreator.php b/tests/Shared/Domain/MotherCreator.php index 26c4228fc..41eab9050 100644 --- a/tests/Shared/Domain/MotherCreator.php +++ b/tests/Shared/Domain/MotherCreator.php @@ -9,10 +9,10 @@ final class MotherCreator { - private static $faker; + private static ?Generator $faker; public static function random(): Generator { - return self::$faker = self::$faker ?: Factory::create(); + return self::$faker = self::$faker ?? Factory::create(); } } diff --git a/tests/Shared/Domain/UuidMother.php b/tests/Shared/Domain/UuidMother.php index 3ec353506..524e2f72e 100644 --- a/tests/Shared/Domain/UuidMother.php +++ b/tests/Shared/Domain/UuidMother.php @@ -6,7 +6,7 @@ final class UuidMother { - public static function random(): string + 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 5814eb85c..424fe1774 100644 --- a/tests/Shared/Domain/WordMother.php +++ b/tests/Shared/Domain/WordMother.php @@ -6,7 +6,7 @@ final class WordMother { - public static function random(): string + public static function create(): string { return MotherCreator::random()->word; } diff --git a/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php b/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php index a8721d14a..5cf3ff4ab 100644 --- a/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBusTest.php @@ -33,8 +33,8 @@ protected function setUp(): void /** @test */ public function it_should_publish_and_consume_domain_events_from_msql(): void { - $domainEvent = CourseCreatedDomainEventMother::random(); - $anotherDomainEvent = CoursesCounterIncrementedDomainEventMother::random(); + $domainEvent = CourseCreatedDomainEventMother::create(); + $anotherDomainEvent = CoursesCounterIncrementedDomainEventMother::create(); $this->bus->publish($domainEvent, $anotherDomainEvent); diff --git a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php index a8cab73b1..0934f42bc 100644 --- a/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php +++ b/tests/Shared/Infrastructure/Bus/Event/RabbitMq/RabbitMqEventBusTest.php @@ -57,7 +57,7 @@ protected function setUp(): void /** @test */ public function it_should_publish_and_consume_domain_events_from_rabbitmq(): void { - $domainEvent = CourseCreatedDomainEventMother::random(); + $domainEvent = CourseCreatedDomainEventMother::create(); $this->configurer->configure($this->exchangeName, $this->fakeSubscriber); @@ -76,7 +76,7 @@ public function it_should_throw_an_exception_consuming_non_existing_domain_event { $this->expectException(RuntimeException::class); - $domainEvent = CoursesCounterIncrementedDomainEventMother::random(); + $domainEvent = CoursesCounterIncrementedDomainEventMother::create(); $this->configurer->configure($this->exchangeName, $this->fakeSubscriber); @@ -93,7 +93,7 @@ public function it_should_throw_an_exception_consuming_non_existing_domain_event /** @test */ public function it_should_retry_failed_domain_events(): void { - $domainEvent = CourseCreatedDomainEventMother::random(); + $domainEvent = CourseCreatedDomainEventMother::create(); $this->configurer->configure($this->exchangeName, $this->fakeSubscriber); @@ -114,7 +114,7 @@ public function it_should_retry_failed_domain_events(): void /** @test */ public function it_should_send_events_to_dead_letter_after_retry_failed_domain_events(): void { - $domainEvent = CourseCreatedDomainEventMother::random(); + $domainEvent = CourseCreatedDomainEventMother::create(); $this->configurer->configure($this->exchangeName, $this->fakeSubscriber); From 51ffa79ce54b680a6046857b3cf442fa6e2c014f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=20G=C3=B3mez?= Date: Fri, 13 Nov 2020 15:30:59 +0100 Subject: [PATCH 059/106] [ci] Cache docker images --- .github/workflows/ci.yml | 7 ++++++- Makefile | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dfeac35e0..b79e59d32 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,12 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 + + - run: docker-compose pull + + - uses: satackey/action-docker-layer-caching@v0.0.8 + continue-on-error: true - name: Install dependencies run: make composer-install diff --git a/Makefile b/Makefile index c2121d083..5bc567cc2 100644 --- a/Makefile +++ b/Makefile @@ -57,7 +57,7 @@ run-tests: composer-env-file # 🐳 Docker Compose .PHONY: start -start: CMD=up -d +start: CMD=up --build -d .PHONY: stop stop: CMD=stop From 2b83c40bd7335688cc6ec85b3ed1a235fe57eb3f Mon Sep 17 00:00:00 2001 From: Leonardo Testa Date: Sun, 13 Dec 2020 20:05:45 +0100 Subject: [PATCH 060/106] fix php-amqp clone repository --- etc/infrastructure/php/extensions/amqp.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/infrastructure/php/extensions/amqp.sh b/etc/infrastructure/php/extensions/amqp.sh index 0a22cd53e..2531f08bc 100644 --- a/etc/infrastructure/php/extensions/amqp.sh +++ b/etc/infrastructure/php/extensions/amqp.sh @@ -1,4 +1,4 @@ -git clone --branch issue-php8 https://github.com/remicollet/php-amqp.git +git clone https://github.com/php-amqp/php-amqp.git cd php-amqp phpize ./configure From f653669901a4361ae4e1a1040644a5569ba2998e Mon Sep 17 00:00:00 2001 From: amfolgar Date: Wed, 16 Dec 2020 23:50:56 +0100 Subject: [PATCH 061/106] [ci] Parametrize cache (#221) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Updated amqp repository * Updated namespaces import * [ci] Decrease the psalm level * [ci] Ignore invalid psalm file * [ci] Ignore invalid psalm file * [ci] Parametrize cache version * [ci] Parametrize cache version Co-authored-by: dmaggio Co-authored-by: Rafa Gómez --- .github/workflows/ci.yml | 7 +++++-- Dockerfile | 4 ++-- etc/infrastructure/php/extensions/{amqp.sh => rabbitmq.sh} | 0 psalm.xml | 1 + src/Shared/Infrastructure/Symfony/FlashSession.php | 4 ++-- src/Shared/Infrastructure/Symfony/WebController.php | 4 ++-- 6 files changed, 12 insertions(+), 8 deletions(-) rename etc/infrastructure/php/extensions/{amqp.sh => rabbitmq.sh} (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b79e59d32..532975d45 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,9 +16,12 @@ jobs: - run: docker-compose pull - - uses: satackey/action-docker-layer-caching@v0.0.8 + - uses: satackey/action-docker-layer-caching@v0.0.11 continue-on-error: true - + with: + key: php_ddd_example-cache-${{ secrets.CACHE_VERSION }}-{hash} + restore-keys: | + php_ddd_example-cache-${{ secrets.CACHE_VERSION }}- - name: Install dependencies run: make composer-install diff --git a/Dockerfile b/Dockerfile index 0a015f565..b0a89582f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,10 +16,10 @@ RUN apk --update upgrade \ RUN pickle install apcu-5.1.19 -ADD etc/infrastructure/php/extensions/amqp.sh /root/install-amqp.sh +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-amqp.sh +RUN sh /root/install-rabbitmq.sh RUN sh /root/install-xdebug.sh RUN docker-php-ext-enable \ diff --git a/etc/infrastructure/php/extensions/amqp.sh b/etc/infrastructure/php/extensions/rabbitmq.sh similarity index 100% rename from etc/infrastructure/php/extensions/amqp.sh rename to etc/infrastructure/php/extensions/rabbitmq.sh diff --git a/psalm.xml b/psalm.xml index 012629468..383336980 100644 --- a/psalm.xml +++ b/psalm.xml @@ -16,6 +16,7 @@ + diff --git a/src/Shared/Infrastructure/Symfony/FlashSession.php b/src/Shared/Infrastructure/Symfony/FlashSession.php index 869ce8800..c19977faa 100644 --- a/src/Shared/Infrastructure/Symfony/FlashSession.php +++ b/src/Shared/Infrastructure/Symfony/FlashSession.php @@ -5,13 +5,13 @@ namespace CodelyTv\Shared\Infrastructure\Symfony; use CodelyTv\Shared\Domain\Utils; -use Symfony\Component\HttpFoundation\Session\Session; +use Symfony\Component\HttpFoundation\Session\SessionInterface; final class FlashSession { private static array $flashes = []; - public function __construct(Session $session) + public function __construct(SessionInterface $session) { self::$flashes = Utils::dot($session->getFlashBag()->all()); } diff --git a/src/Shared/Infrastructure/Symfony/WebController.php b/src/Shared/Infrastructure/Symfony/WebController.php index 8884e3e15..0265b7b31 100644 --- a/src/Shared/Infrastructure/Symfony/WebController.php +++ b/src/Shared/Infrastructure/Symfony/WebController.php @@ -9,7 +9,7 @@ use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response as SymfonyResponse; -use Symfony\Component\HttpFoundation\Session\Session; +use Symfony\Component\HttpFoundation\Session\SessionInterface; use Symfony\Component\Routing\RouterInterface; use Symfony\Component\Validator\ConstraintViolationListInterface; use Twig\Environment; @@ -19,7 +19,7 @@ abstract class WebController extends ApiController public function __construct( private Environment $twig, private RouterInterface $router, - private Session $session, + private SessionInterface $session, QueryBus $queryBus, CommandBus $commandBus, ApiExceptionsHttpStatusCodeMapping $exceptionHandler From 44db1d00fd88213fb434219112fa0d34c0005a53 Mon Sep 17 00:00:00 2001 From: David Garcia Date: Tue, 12 Jan 2021 12:05:23 +0100 Subject: [PATCH 062/106] Don't create elasticsearch indexes on prod (#225) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Little optimization. Save cpu cycles on prod environment. * Update src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php Co-authored-by: David Garcia Latorre Co-authored-by: Rafa Gómez --- .../Elasticsearch/ElasticsearchClientFactory.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php index 4510b051c..d18c90694 100644 --- a/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php +++ b/src/Shared/Infrastructure/Elasticsearch/ElasticsearchClientFactory.php @@ -30,12 +30,16 @@ private function generateIndexIfNotExists( string $schemasFolder, string $environment ): void { + if ('prod' !== $environment) { + return; + } + $indexes = Utils::filesIn($schemasFolder, '.json'); foreach ($indexes as $index) { $indexName = str_replace('.json', '', sprintf('%s_%s', $indexPrefix, $index)); - if ('prod' !== $environment && !$this->indexExists($client, $indexName)) { + if (!$this->indexExists($client, $indexName)) { $indexBody = Utils::jsonDecode(file_get_contents("$schemasFolder/$index")); $client->indices()->create(['index' => $indexName, 'body' => $indexBody]); From fcf0ba9ff9a132a62d6ffacbd59c8a45418ac9ff Mon Sep 17 00:00:00 2001 From: Laura Ferrando Date: Tue, 16 Feb 2021 14:21:40 +0100 Subject: [PATCH 063/106] Fix some typos in README.md (#232) --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f40d1c2cc..0d510980b 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@

Take a look, play and have fun with this. - Stars are welcomed 😊 + Stars are welcome 😊

View Demo @@ -63,12 +63,12 @@ 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 +* [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 -This repository follow the Hexagonal Architecture pattern. Also, it's structured using `modules`. +This repository follows the Hexagonal Architecture pattern. Also, it's structured using `modules`. With this, we can see that the current structure of a Bounded Context is: ```scala @@ -115,7 +115,7 @@ and its implementation [here](src/Mooc/Courses/Infrastructure/Persistence/Doctri ### Aggregates You can see an example of an aggregate [here](src/Mooc/Courses/Domain/Course.php). All aggregates should -extends the [AggregateRoot](src/Shared/Domain/Aggregate/AggregateRoot.php). +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). @@ -130,14 +130,14 @@ The [MySql Bus](src/Shared/Infrastructure/Bus/Event/MySql/MySqlDoctrineEventBus. 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/) +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 show 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 [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/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/) From 7a000fda8944fb64ba336edf5f59ba051e392024 Mon Sep 17 00:00:00 2001 From: Javier Ferrer Date: Mon, 10 May 2021 15:26:29 +0200 Subject: [PATCH 064/106] Update PHP stack (#254) * Stable PHP 8.0 image * Latest stable pickle version * Latest stable apcu version --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index b0a89582f..fa93e2597 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ -FROM php:8.0.0RC3-fpm-alpine +FROM php:8.0-fpm-alpine WORKDIR /app -RUN wget https://github.com/FriendsOfPHP/pickle/releases/download/v0.6.0/pickle.phar \ +RUN wget https://github.com/FriendsOfPHP/pickle/releases/download/v0.7.2/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.19 +RUN pickle install apcu-5.1.20 ADD etc/infrastructure/php/extensions/rabbitmq.sh /root/install-rabbitmq.sh ADD etc/infrastructure/php/extensions/xdebug.sh /root/install-xdebug.sh From e8adcc927d8d7ca360c2aae486a215abaea2eaae Mon Sep 17 00:00:00 2001 From: Javier Ferrer Date: Mon, 10 May 2021 17:35:57 +0200 Subject: [PATCH 065/106] Fix AMQP related errors while building the environment (#253) --- .github/workflows/ci.yml | 27 ++++++++++--------- Dockerfile | 2 +- Makefile | 4 +++ docker-compose.yml | 2 +- etc/infrastructure/php/extensions/rabbitmq.sh | 2 +- etc/infrastructure/php/extensions/xdebug.sh | 2 +- 6 files changed, 22 insertions(+), 17 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 532975d45..9af60fcdc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,27 +16,28 @@ jobs: - run: docker-compose pull - - uses: satackey/action-docker-layer-caching@v0.0.11 - continue-on-error: true - with: - key: php_ddd_example-cache-${{ secrets.CACHE_VERSION }}-{hash} - restore-keys: | - php_ddd_example-cache-${{ secrets.CACHE_VERSION }}- - - name: Install dependencies + - name: 🎻 Install dependencies run: make composer-install - - name: Start all the environment + - name: 🐳 Start all the environment run: make start - - name: Wait for the environment to get up + - name: 🏁 Static analysis + run: make static-analysis + + - name: 🦭 Wait for the database to get up run: | while ! make ping-mysql &>/dev/null; do echo "Waiting for database connection..." sleep 2 done - - name: Run the tests - run: make test + - name: 🐰 Wait for the message broker to get up + run: | + while ! make ping-rabbitmq &>/dev/null; do + echo "Waiting for RabbitMQ connection..." + sleep 2 + done - - name: Static analysis - run: make static-analysis + - name: ✅ Run the tests + run: make test diff --git a/Dockerfile b/Dockerfile index fa93e2597..f9d6048a3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,7 +14,7 @@ RUN apk --update upgrade \ zip \ pdo_mysql -RUN pickle install apcu-5.1.20 +RUN pickle install apcu@5.1.20 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 5bc567cc2..5508edf8f 100644 --- a/Makefile +++ b/Makefile @@ -81,6 +81,10 @@ rebuild: composer-env-file ping-mysql: @docker exec codelytv-php_ddd_skeleton-mooc-mysql mysqladmin --user=root --password= --host "127.0.0.1" ping --silent +.PHONY: ping-rabbitmq +ping-rabbitmq: + @docker exec codelytv-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 diff --git a/docker-compose.yml b/docker-compose.yml index 2af2539f2..5c6782794 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -27,7 +27,7 @@ services: mooc_mysql: container_name: codelytv-php_ddd_skeleton-mooc-mysql - image: mysql:8.0 + image: mariadb:10.6 ports: - 3360:3306 environment: diff --git a/etc/infrastructure/php/extensions/rabbitmq.sh b/etc/infrastructure/php/extensions/rabbitmq.sh index 2531f08bc..41fc6072f 100644 --- a/etc/infrastructure/php/extensions/rabbitmq.sh +++ b/etc/infrastructure/php/extensions/rabbitmq.sh @@ -1,4 +1,4 @@ -git clone https://github.com/php-amqp/php-amqp.git +git clone --depth 1 --branch v1.11.0beta https://github.com/php-amqp/php-amqp.git cd php-amqp phpize ./configure diff --git a/etc/infrastructure/php/extensions/xdebug.sh b/etc/infrastructure/php/extensions/xdebug.sh index 77f850a95..99dca7162 100644 --- a/etc/infrastructure/php/extensions/xdebug.sh +++ b/etc/infrastructure/php/extensions/xdebug.sh @@ -1,4 +1,4 @@ -git clone -n https://github.com/xdebug/xdebug.git +git clone --depth 1 --branch 3.0.4 https://github.com/xdebug/xdebug.git cd xdebug git checkout 592ab9fa10cfa132623489511e92ef69fb91744c phpize From 7a02c8379ff8a0f29a08d681a7fd77e1fed5726d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Santamar=C3=ADa?= Date: Tue, 29 Jun 2021 11:07:58 +0200 Subject: [PATCH 066/106] Update composer dependencies (#262) * update composer dependencies * Fix non existing `ArrayCache` class after doctrine/cache 1.4 -> 2 migration --- composer.json | 12 +- composer.lock | 1942 +++++++++-------- .../Doctrine/DoctrineEntityManagerFactory.php | 5 +- 3 files changed, 1089 insertions(+), 870 deletions(-) diff --git a/composer.json b/composer.json index 770c4a86b..f545044a3 100644 --- a/composer.json +++ b/composer.json @@ -12,12 +12,12 @@ "ext-zend-opcache": "*", "ext-pdo": "*", - "symfony/framework-bundle": "^v5.2", - "symfony/messenger": "^v5.2", - "symfony/dotenv": "^v5.2", - "symfony/yaml": "^v5.2", - "symfony/twig-bundle": "^v5.2", - "symfony/validator": "^v5.2", + "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", "lambdish/phunctional": "^2.0", diff --git a/composer.lock b/composer.lock index 430369914..3a830a86b 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": "e73c4b8720ee868df2177bf196ac0f66", + "content-hash": "fd5ca2317656ef5a38a2382763b46ac2", "packages": [ { "name": "composer/package-versions-deprecated", @@ -81,35 +81,32 @@ }, { "name": "doctrine/annotations", - "version": "1.11.1", + "version": "1.13.1", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "ce77a7ba1770462cd705a91a151b6c3746f9c6ad" + "reference": "e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/ce77a7ba1770462cd705a91a151b6c3746f9c6ad", - "reference": "ce77a7ba1770462cd705a91a151b6c3746f9c6ad", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f", + "reference": "e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f", "shasum": "" }, "require": { "doctrine/lexer": "1.*", "ext-tokenizer": "*", - "php": "^7.1 || ^8.0" + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" }, "require-dev": { - "doctrine/cache": "1.*", + "doctrine/cache": "^1.11 || ^2.0", "doctrine/coding-standard": "^6.0 || ^8.1", "phpstan/phpstan": "^0.12.20", - "phpunit/phpunit": "^7.5 || ^9.1.5" + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", + "symfony/cache": "^4.4 || ^5.2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" @@ -150,46 +147,45 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.11.1" + "source": "https://github.com/doctrine/annotations/tree/1.13.1" }, - "time": "2020-10-26T10:28:16+00:00" + "time": "2021-05-16T18:07:53+00:00" }, { "name": "doctrine/cache", - "version": "1.10.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "13e3381b25847283a91948d04640543941309727" + "reference": "c9622c6820d3ede1e2315a6a377ea1076e421d88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727", - "reference": "13e3381b25847283a91948d04640543941309727", + "url": "https://api.github.com/repos/doctrine/cache/zipball/c9622c6820d3ede1e2315a6a377ea1076e421d88", + "reference": "c9622c6820d3ede1e2315a6a377ea1076e421d88", "shasum": "" }, "require": { "php": "~7.1 || ^8.0" }, "conflict": { - "doctrine/common": ">2.2,<2.4" + "doctrine/common": ">2.2,<2.4", + "psr/cache": ">=3" }, "require-dev": { "alcaeus/mongo-php-adapter": "^1.1", - "doctrine/coding-standard": "^6.0", + "cache/integration-tests": "dev-master", + "doctrine/coding-standard": "^8.0", "mongodb/mongodb": "^1.1", - "phpunit/phpunit": "^7.0", - "predis/predis": "~1.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "predis/predis": "~1.0", + "psr/cache": "^1.0 || ^2.0", + "symfony/cache": "^4.4 || ^5.2" }, "suggest": { "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" @@ -236,7 +232,7 @@ ], "support": { "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/1.10.x" + "source": "https://github.com/doctrine/cache/tree/2.0.3" }, "funding": [ { @@ -252,7 +248,7 @@ "type": "tidelift" } ], - "time": "2020-07-07T18:54:01+00:00" + "time": "2021-05-25T09:43:04+00:00" }, { "name": "doctrine/collections", @@ -325,16 +321,16 @@ }, { "name": "doctrine/common", - "version": "3.0.2", + "version": "3.1.2", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "a3c6479858989e242a2465972b4f7a8642baf0d4" + "reference": "a036d90c303f3163b5be8b8fde9b6755b2be4a3a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/a3c6479858989e242a2465972b4f7a8642baf0d4", - "reference": "a3c6479858989e242a2465972b4f7a8642baf0d4", + "url": "https://api.github.com/repos/doctrine/common/zipball/a036d90c303f3163b5be8b8fde9b6755b2be4a3a", + "reference": "a036d90c303f3163b5be8b8fde9b6755b2be4a3a", "shasum": "" }, "require": { @@ -342,19 +338,15 @@ "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^1.0", - "phpstan/phpstan": "^0.11", - "phpstan/phpstan-phpunit": "^0.11", - "phpunit/phpunit": "^7.0", + "doctrine/coding-standard": "^6.0 || ^8.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0", "squizlabs/php_codesniffer": "^3.0", - "symfony/phpunit-bridge": "^4.0.5" + "symfony/phpunit-bridge": "^4.0.5", + "vimeo/psalm": "^4.4" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\": "lib/Doctrine/Common" @@ -390,7 +382,7 @@ "email": "ocramius@gmail.com" } ], - "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, persistence interfaces, proxies, event system and much more.", + "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.", "homepage": "https://www.doctrine-project.org/projects/common.html", "keywords": [ "common", @@ -399,7 +391,7 @@ ], "support": { "issues": "https://github.com/doctrine/common/issues", - "source": "https://github.com/doctrine/common/tree/3.0.2" + "source": "https://github.com/doctrine/common/tree/3.1.2" }, "funding": [ { @@ -415,36 +407,38 @@ "type": "tidelift" } ], - "time": "2020-06-05T16:59:53+00:00" + "time": "2021-02-10T20:18:51+00:00" }, { "name": "doctrine/dbal", - "version": "2.12.0", + "version": "2.13.2", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "c6d37b4c42aaa3c3ee175f05eca68056f4185646" + "reference": "8dd39d2ead4409ce652fd4f02621060f009ea5e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/c6d37b4c42aaa3c3ee175f05eca68056f4185646", - "reference": "c6d37b4c42aaa3c3ee175f05eca68056f4185646", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/8dd39d2ead4409ce652fd4f02621060f009ea5e4", + "reference": "8dd39d2ead4409ce652fd4f02621060f009ea5e4", "shasum": "" }, "require": { - "doctrine/cache": "^1.0", + "doctrine/cache": "^1.0|^2.0", + "doctrine/deprecations": "^0.5.3", "doctrine/event-manager": "^1.0", "ext-pdo": "*", - "php": "^7.3 || ^8" + "php": "^7.1 || ^8" }, "require-dev": { - "doctrine/coding-standard": "^8.1", - "jetbrains/phpstorm-stubs": "^2019.1", - "phpstan/phpstan": "^0.12.40", - "phpunit/phpunit": "^9.4", - "psalm/plugin-phpunit": "^0.10.0", + "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", + "symfony/cache": "^4.4", "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "^3.17.2" + "vimeo/psalm": "4.6.4" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -453,11 +447,6 @@ "bin/doctrine-dbal" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" @@ -510,7 +499,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/2.12.0" + "source": "https://github.com/doctrine/dbal/tree/2.13.2" }, "funding": [ { @@ -526,7 +515,50 @@ "type": "tidelift" } ], - "time": "2020-10-22T17:26:24+00:00" + "time": "2021-06-18T21:48:39+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "v0.5.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "9504165960a1f83cc1480e2be1dd0a0478561314" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314", + "reference": "9504165960a1f83cc1480e2be1dd0a0478561314", + "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" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/v0.5.3" + }, + "time": "2021-03-21T12:59:47+00:00" }, { "name": "doctrine/event-manager", @@ -624,16 +656,16 @@ }, { "name": "doctrine/inflector", - "version": "1.4.3", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c" + "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/4650c8b30c753a76bf44fb2ed00117d6f367490c", - "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/9cf661f4eb38f7c881cac67c75ea9b00bf97b210", + "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210", "shasum": "" }, "require": { @@ -654,7 +686,6 @@ }, "autoload": { "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector", "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" } }, @@ -700,7 +731,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/1.4.x" + "source": "https://github.com/doctrine/inflector/tree/2.0.x" }, "funding": [ { @@ -716,40 +747,35 @@ "type": "tidelift" } ], - "time": "2020-05-29T07:19:59+00:00" + "time": "2020-05-29T15:13:26+00:00" }, { "name": "doctrine/instantiator", - "version": "1.3.1", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", - "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0", + "doctrine/coding-standard": "^8.0", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13", - "phpstan/phpstan-phpunit": "^0.11", - "phpstan/phpstan-shim": "^0.11", - "phpunit/phpunit": "^7.0" + "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" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" @@ -763,7 +789,7 @@ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "homepage": "https://ocramius.github.io/" } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", @@ -774,7 +800,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.3.x" + "source": "https://github.com/doctrine/instantiator/tree/1.4.0" }, "funding": [ { @@ -790,7 +816,7 @@ "type": "tidelift" } ], - "time": "2020-05-29T17:27:14+00:00" + "time": "2020-11-10T18:47:58+00:00" }, { "name": "doctrine/lexer", @@ -874,53 +900,53 @@ }, { "name": "doctrine/orm", - "version": "2.7.4", + "version": "2.9.3", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "7d84a4998091ece4d645253ac65de9f879eeed2f" + "reference": "82e77cf5089a1303733f75f0f0ed01be3ab9ec22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/7d84a4998091ece4d645253ac65de9f879eeed2f", - "reference": "7d84a4998091ece4d645253ac65de9f879eeed2f", + "url": "https://api.github.com/repos/doctrine/orm/zipball/82e77cf5089a1303733f75f0f0ed01be3ab9ec22", + "reference": "82e77cf5089a1303733f75f0f0ed01be3ab9ec22", "shasum": "" }, "require": { "composer/package-versions-deprecated": "^1.8", - "doctrine/annotations": "^1.8", - "doctrine/cache": "^1.9.1", + "doctrine/annotations": "^1.13", + "doctrine/cache": "^1.11.3|^2.0.3", "doctrine/collections": "^1.5", - "doctrine/common": "^2.11 || ^3.0", - "doctrine/dbal": "^2.9.3", + "doctrine/common": "^3.0.3", + "doctrine/dbal": "^2.13.0", + "doctrine/deprecations": "^0.5.3", "doctrine/event-manager": "^1.1", - "doctrine/inflector": "^1.0", + "doctrine/inflector": "^1.4|^2.0", "doctrine/instantiator": "^1.3", "doctrine/lexer": "^1.0", - "doctrine/persistence": "^1.3.3 || ^2.0", + "doctrine/persistence": "^2.2", "ext-pdo": "*", - "php": "^7.1", - "symfony/console": "^3.0|^4.0|^5.0" + "php": "^7.1|^8.0", + "psr/cache": "^1 || ^2 || ^3", + "symfony/console": "^3.0|^4.0|^5.0|^6.0" }, "require-dev": { - "doctrine/coding-standard": "^5.0", - "phpstan/phpstan": "^0.12.18", - "phpunit/phpunit": "^7.5", - "symfony/yaml": "^3.4|^4.0|^5.0", - "vimeo/psalm": "^3.11" + "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" }, "suggest": { + "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0", "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" }, "bin": [ "bin/doctrine" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\ORM\\": "lib/Doctrine/ORM" @@ -960,41 +986,44 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.7.4" + "source": "https://github.com/doctrine/orm/tree/2.9.3" }, - "time": "2020-10-10T17:11:26+00:00" + "time": "2021-06-13T10:29:22+00:00" }, { "name": "doctrine/persistence", - "version": "2.1.0", + "version": "2.2.1", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "9899c16934053880876b920a3b8b02ed2337ac1d" + "reference": "d138f3ab5f761055cab1054070377cfd3222e368" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/9899c16934053880876b920a3b8b02ed2337ac1d", - "reference": "9899c16934053880876b920a3b8b02ed2337ac1d", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/d138f3ab5f761055cab1054070377cfd3222e368", + "reference": "d138f3ab5f761055cab1054070377cfd3222e368", "shasum": "" }, "require": { "doctrine/annotations": "^1.0", - "doctrine/cache": "^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" + "php": "^7.1 || ^8.0", + "psr/cache": "^1.0|^2.0|^3.0" }, "conflict": { "doctrine/common": "<2.10@dev" }, "require-dev": { "composer/package-versions-deprecated": "^1.11", - "doctrine/coding-standard": "^6.0 || ^8.0", + "doctrine/coding-standard": "^6.0 || ^9.0", "doctrine/common": "^3.0", - "phpstan/phpstan": "^0.12", + "phpstan/phpstan": "0.12.84", "phpunit/phpunit": "^7.5.20 || ^8.0 || ^9.0", - "vimeo/psalm": "^3.11" + "symfony/cache": "^4.4|^5.0", + "vimeo/psalm": "4.7.0" }, "type": "library", "autoload": { @@ -1044,40 +1073,38 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/2.1.0" + "source": "https://github.com/doctrine/persistence/tree/2.2.1" }, - "time": "2020-10-24T22:13:54+00:00" + "time": "2021-05-19T07:07:01+00:00" }, { "name": "elasticsearch/elasticsearch", - "version": "v7.9.1", + "version": "v7.13.1", "source": { "type": "git", "url": "https://github.com/elastic/elasticsearch-php.git", - "reference": "38e821f37491bd91fe06b18b88613128950a11bb" + "reference": "45e17adacd3319958d6135e4ee3a21dbbe36a24b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/38e821f37491bd91fe06b18b88613128950a11bb", - "reference": "38e821f37491bd91fe06b18b88613128950a11bb", + "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/45e17adacd3319958d6135e4ee3a21dbbe36a24b", + "reference": "45e17adacd3319958d6135e4ee3a21dbbe36a24b", "shasum": "" }, "require": { "ext-json": ">=1.3.7", "ezimuel/ringphp": "^1.1.2", - "php": "^7.1", + "php": "^7.3 || ^8.0", "psr/log": "~1.0" }, "require-dev": { - "cpliakas/git-wrapper": "~2.0", - "doctrine/inflector": "^1.3", "ext-yaml": "*", + "ext-zip": "*", "mockery/mockery": "^1.2", "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^7.5", + "phpunit/phpunit": "^9.3", "squizlabs/php_codesniffer": "^3.4", - "symfony/finder": "~4.0", - "symfony/yaml": "~4.0" + "symfony/finder": "~4.0" }, "suggest": { "ext-curl": "*", @@ -1112,9 +1139,9 @@ ], "support": { "issues": "https://github.com/elastic/elasticsearch-php/issues", - "source": "https://github.com/elastic/elasticsearch-php/tree/v7.9.1" + "source": "https://github.com/elastic/elasticsearch-php/tree/v7.13.1" }, - "time": "2020-10-06T13:03:50+00:00" + "time": "2021-06-15T18:36:52+00:00" }, { "name": "endclothing/prometheus_client_php", @@ -1345,16 +1372,16 @@ }, { "name": "guzzlehttp/promises", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "60d379c243457e073cff02bc323a2a86cb355631" + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631", - "reference": "60d379c243457e073cff02bc323a2a86cb355631", + "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", "shasum": "" }, "require": { @@ -1394,22 +1421,22 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.4.0" + "source": "https://github.com/guzzle/promises/tree/1.4.1" }, - "time": "2020-09-30T07:37:28+00:00" + "time": "2021-03-07T09:25:29+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.7.0", + "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3" + "reference": "dc960a912984efb74d0a90222870c72c87f10c91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3", - "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91", + "reference": "dc960a912984efb74d0a90222870c72c87f10c91", "shasum": "" }, "require": { @@ -1469,9 +1496,9 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.7.0" + "source": "https://github.com/guzzle/psr7/tree/1.8.2" }, - "time": "2020-09-30T07:37:11+00:00" + "time": "2021-04-26T09:17:50+00:00" }, { "name": "lambdish/phunctional", @@ -1531,48 +1558,41 @@ }, { "name": "laminas/laminas-code", - "version": "3.4.1", + "version": "3.5.1", "source": { "type": "git", "url": "https://github.com/laminas/laminas-code.git", - "reference": "1cb8f203389ab1482bf89c0e70a04849bacd7766" + "reference": "b549b70c0bb6e935d497f84f750c82653326ac77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/1cb8f203389ab1482bf89c0e70a04849bacd7766", - "reference": "1cb8f203389ab1482bf89c0e70a04849bacd7766", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/b549b70c0bb6e935d497f84f750c82653326ac77", + "reference": "b549b70c0bb6e935d497f84f750c82653326ac77", "shasum": "" }, "require": { - "laminas/laminas-eventmanager": "^2.6 || ^3.0", - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^7.1" + "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": "self.version" + "zendframework/zend-code": "^3.4.1" }, "require-dev": { - "doctrine/annotations": "^1.7", + "doctrine/annotations": "^1.10.4", "ext-phar": "*", - "laminas/laminas-coding-standard": "^1.0", - "laminas/laminas-stdlib": "^2.7 || ^3.0", - "phpunit/phpunit": "^7.5.16 || ^8.4" + "laminas/laminas-coding-standard": "^1.0.0", + "laminas/laminas-stdlib": "^3.3.0", + "phpunit/phpunit": "^9.4.2" }, "suggest": { "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", "laminas/laminas-stdlib": "Laminas\\Stdlib component" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4.x-dev", - "dev-develop": "3.5.x-dev", - "dev-dev-4.0": "4.0.x-dev" - } - }, "autoload": { "psr-4": { "Laminas\\Code\\": "src/" @@ -1596,20 +1616,26 @@ "rss": "https://github.com/laminas/laminas-code/releases.atom", "source": "https://github.com/laminas/laminas-code" }, - "time": "2019-12-31T16:28:24+00:00" + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-11-30T20:16:31+00:00" }, { "name": "laminas/laminas-eventmanager", - "version": "3.3.0", + "version": "3.3.1", "source": { "type": "git", "url": "https://github.com/laminas/laminas-eventmanager.git", - "reference": "1940ccf30e058b2fd66f5a9d696f1b5e0027b082" + "reference": "966c859b67867b179fde1eff0cd38df51472ce4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/1940ccf30e058b2fd66f5a9d696f1b5e0027b082", - "reference": "1940ccf30e058b2fd66f5a9d696f1b5e0027b082", + "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/966c859b67867b179fde1eff0cd38df51472ce4a", + "reference": "966c859b67867b179fde1eff0cd38df51472ce4a", "shasum": "" }, "require": { @@ -1631,12 +1657,6 @@ "laminas/laminas-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3.x-dev", - "dev-develop": "3.4.x-dev" - } - }, "autoload": { "psr-4": { "Laminas\\EventManager\\": "src/" @@ -1668,28 +1688,30 @@ "type": "community_bridge" } ], - "time": "2020-08-25T11:10:44+00:00" + "time": "2021-03-08T15:24:29+00:00" }, { "name": "laminas/laminas-zendframework-bridge", - "version": "1.1.1", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-zendframework-bridge.git", - "reference": "6ede70583e101030bcace4dcddd648f760ddf642" + "reference": "13af2502d9bb6f7d33be2de4b51fb68c6cdb476e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6ede70583e101030bcace4dcddd648f760ddf642", - "reference": "6ede70583e101030bcace4dcddd648f760ddf642", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/13af2502d9bb6f7d33be2de4b51fb68c6cdb476e", + "reference": "13af2502d9bb6f7d33be2de4b51fb68c6cdb476e", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0 || ^8.0" + "php": "^7.3 || ^8.0" }, "require-dev": { "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3", - "squizlabs/php_codesniffer": "^3.5" + "psalm/plugin-phpunit": "^0.15.1", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.6" }, "type": "library", "extra": { @@ -1728,20 +1750,20 @@ "type": "community_bridge" } ], - "time": "2020-09-14T14:23:00+00:00" + "time": "2021-06-24T12:49:22+00:00" }, { "name": "monolog/monolog", - "version": "2.1.1", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "f9eee5cec93dfb313a38b6b288741e84e53f02d5" + "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f9eee5cec93dfb313a38b6b288741e84e53f02d5", - "reference": "f9eee5cec93dfb313a38b6b288741e84e53f02d5", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1cb1cde8e8dd0f70cc0fe51354a59acad9302084", + "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084", "shasum": "" }, "require": { @@ -1754,16 +1776,17 @@ "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^6.0", + "elasticsearch/elasticsearch": "^7", "graylog2/gelf-php": "^1.4.2", + "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", - "php-parallel-lint/php-parallel-lint": "^1.0", "phpspec/prophecy": "^1.6.1", + "phpstan/phpstan": "^0.12.59", "phpunit/phpunit": "^8.5", "predis/predis": "^1.1", "rollbar/rollbar": "^1.3", - "ruflin/elastica": ">=0.90 <3.0", + "ruflin/elastica": ">=0.90 <7.0.1", "swiftmailer/swiftmailer": "^5.3|^6.0" }, "suggest": { @@ -1783,7 +1806,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-main": "2.x-dev" } }, "autoload": { @@ -1799,11 +1822,11 @@ { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "homepage": "https://seld.be" } ], "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", + "homepage": "https://github.com/Seldaek/monolog", "keywords": [ "log", "logging", @@ -1811,7 +1834,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.1.1" + "source": "https://github.com/Seldaek/monolog/tree/2.2.0" }, "funding": [ { @@ -1823,7 +1846,7 @@ "type": "tidelift" } ], - "time": "2020-07-23T08:41:23+00:00" + "time": "2020-12-14T13:15:25+00:00" }, { "name": "ocramius/proxy-manager", @@ -1966,20 +1989,20 @@ }, { "name": "psr/cache", - "version": "1.0.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + "reference": "213f9dbc5b9bfbc4f8db86d2838dc968752ce13b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "url": "https://api.github.com/repos/php-fig/cache/zipball/213f9dbc5b9bfbc4f8db86d2838dc968752ce13b", + "reference": "213f9dbc5b9bfbc4f8db86d2838dc968752ce13b", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { @@ -1999,7 +2022,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for caching libraries", @@ -2009,33 +2032,28 @@ "psr-6" ], "support": { - "source": "https://github.com/php-fig/cache/tree/master" + "source": "https://github.com/php-fig/cache/tree/2.0.0" }, - "time": "2016-08-06T20:24:11+00:00" + "time": "2021-02-03T23:23:37+00:00" }, { "name": "psr/container", - "version": "1.0.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.2.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -2048,7 +2066,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common Container Interface (PHP FIG PSR-11)", @@ -2062,9 +2080,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/master" + "source": "https://github.com/php-fig/container/tree/1.1.1" }, - "time": "2017-02-14T16:28:37+00:00" + "time": "2021-03-05T17:36:06+00:00" }, { "name": "psr/event-dispatcher", @@ -2171,16 +2189,16 @@ }, { "name": "psr/log", - "version": "1.1.3", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", "shasum": "" }, "require": { @@ -2204,7 +2222,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for logging libraries", @@ -2215,9 +2233,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.3" + "source": "https://github.com/php-fig/log/tree/1.1.4" }, - "time": "2020-03-23T09:12:05+00:00" + "time": "2021-05-03T11:20:27+00:00" }, { "name": "ralouphie/getallheaders", @@ -2408,21 +2426,22 @@ }, { "name": "symfony/amqp-messenger", - "version": "v5.2.0-RC1", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/amqp-messenger.git", - "reference": "8aa604498a40e48909266a0fddcbd3ea341623db" + "reference": "2d8f975c1d0a826feb044dcbe5424cb9c35ae9fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/amqp-messenger/zipball/8aa604498a40e48909266a0fddcbd3ea341623db", - "reference": "8aa604498a40e48909266a0fddcbd3ea341623db", + "url": "https://api.github.com/repos/symfony/amqp-messenger/zipball/2d8f975c1d0a826feb044dcbe5424cb9c35ae9fd", + "reference": "2d8f975c1d0a826feb044dcbe5424cb9c35ae9fd", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/messenger": "^5.1" + "symfony/deprecation-contracts": "^2.1", + "symfony/messenger": "^5.3" }, "require-dev": { "symfony/event-dispatcher": "^4.4|^5.0", @@ -2456,7 +2475,7 @@ "description": "Symfony AMQP extension Messenger Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/amqp-messenger/tree/v5.2.0-RC1" + "source": "https://github.com/symfony/amqp-messenger/tree/v5.3.2" }, "funding": [ { @@ -2472,27 +2491,28 @@ "type": "tidelift" } ], - "time": "2020-10-27T10:14:44+00:00" + "time": "2021-06-17T12:34:27+00:00" }, { "name": "symfony/cache", - "version": "v5.2.0-RC1", + "version": "v5.3.0", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "ce4bdd7a46d10298c23b2af8997b242de2a6dc55" + "reference": "44fd0f97d1fb198d344f22379dfc56af2221e608" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/ce4bdd7a46d10298c23b2af8997b242de2a6dc55", - "reference": "ce4bdd7a46d10298c23b2af8997b242de2a6dc55", + "url": "https://api.github.com/repos/symfony/cache/zipball/44fd0f97d1fb198d344f22379dfc56af2221e608", + "reference": "44fd0f97d1fb198d344f22379dfc56af2221e608", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/cache": "~1.0", + "psr/cache": "^1.0|^2.0", "psr/log": "^1.1", "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" @@ -2504,19 +2524,20 @@ "symfony/var-dumper": "<4.4" }, "provide": { - "psr/cache-implementation": "1.0", + "psr/cache-implementation": "1.0|2.0", "psr/simple-cache-implementation": "1.0", - "symfony/cache-implementation": "1.0" + "symfony/cache-implementation": "1.0|2.0" }, "require-dev": { "cache/integration-tests": "dev-master", - "doctrine/cache": "^1.6", + "doctrine/cache": "^1.6|^2.0", "doctrine/dbal": "^2.10|^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" }, @@ -2543,14 +2564,14 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Cache component with PSR-6, PSR-16, and tags", + "description": "Provides an extended PSR-6, PSR-16 (and tags) implementation", "homepage": "https://symfony.com", "keywords": [ "caching", "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v5.2.0-RC1" + "source": "https://github.com/symfony/cache/tree/v5.3.0" }, "funding": [ { @@ -2566,25 +2587,25 @@ "type": "tidelift" } ], - "time": "2020-11-02T08:16:52+00:00" + "time": "2021-05-26T17:43:10+00:00" }, { "name": "symfony/cache-contracts", - "version": "v2.2.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "8034ca0b61d4dd967f3698aaa1da2507b631d0cb" + "reference": "c0446463729b89dd4fa62e9aeecc80287323615d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/8034ca0b61d4dd967f3698aaa1da2507b631d0cb", - "reference": "8034ca0b61d4dd967f3698aaa1da2507b631d0cb", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/c0446463729b89dd4fa62e9aeecc80287323615d", + "reference": "c0446463729b89dd4fa62e9aeecc80287323615d", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/cache": "^1.0" + "psr/cache": "^1.0|^2.0|^3.0" }, "suggest": { "symfony/cache-implementation": "" @@ -2592,7 +2613,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-main": "2.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -2629,7 +2650,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v2.2.0" + "source": "https://github.com/symfony/cache-contracts/tree/v2.4.0" }, "funding": [ { @@ -2645,20 +2666,20 @@ "type": "tidelift" } ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2021-03-23T23:28:01+00:00" }, { "name": "symfony/config", - "version": "v5.2.0-RC1", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "e90f717c34788c11644478414c93fb766b669dc4" + "reference": "9c307728cfacbd50914f0db28aee1e0ecd82b99f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/e90f717c34788c11644478414c93fb766b669dc4", - "reference": "e90f717c34788c11644478414c93fb766b669dc4", + "url": "https://api.github.com/repos/symfony/config/zipball/9c307728cfacbd50914f0db28aee1e0ecd82b99f", + "reference": "9c307728cfacbd50914f0db28aee1e0ecd82b99f", "shasum": "" }, "require": { @@ -2666,7 +2687,8 @@ "symfony/deprecation-contracts": "^2.1", "symfony/filesystem": "^4.4|^5.0", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.15", + "symfony/polyfill-php81": "^1.22" }, "conflict": { "symfony/finder": "<4.4" @@ -2704,10 +2726,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Config Component", + "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.2.0-RC1" + "source": "https://github.com/symfony/config/tree/v5.3.2" }, "funding": [ { @@ -2723,24 +2745,25 @@ "type": "tidelift" } ], - "time": "2020-10-28T21:46:03+00:00" + "time": "2021-06-12T10:15:17+00:00" }, { "name": "symfony/console", - "version": "v5.2.0-RC1", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "d1d8b8fd9b605630aa73b1b384e246fee54e8ffa" + "reference": "649730483885ff2ca99ca0560ef0e5f6b03f2ac1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d1d8b8fd9b605630aa73b1b384e246fee54e8ffa", - "reference": "d1d8b8fd9b605630aa73b1b384e246fee54e8ffa", + "url": "https://api.github.com/repos/symfony/console/zipball/649730483885ff2ca99ca0560ef0e5f6b03f2ac1", + "reference": "649730483885ff2ca99ca0560ef0e5f6b03f2ac1", "shasum": "" }, "require": { "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php73": "^1.8", "symfony/polyfill-php80": "^1.15", @@ -2795,7 +2818,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Console Component", + "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", "keywords": [ "cli", @@ -2804,7 +2827,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.2.0-RC1" + "source": "https://github.com/symfony/console/tree/v5.3.2" }, "funding": [ { @@ -2820,41 +2843,42 @@ "type": "tidelift" } ], - "time": "2020-11-05T20:05:54+00:00" + "time": "2021-06-12T09:42:48+00:00" }, { "name": "symfony/dependency-injection", - "version": "v5.2.0-RC1", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "ff71914efb285cfe375dbfa12b79a779b89be1dc" + "reference": "ddbff73bc4fa3d5b415431d486770ab0e72f6516" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ff71914efb285cfe375dbfa12b79a779b89be1dc", - "reference": "ff71914efb285cfe375dbfa12b79a779b89be1dc", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ddbff73bc4fa3d5b415431d486770ab0e72f6516", + "reference": "ddbff73bc4fa3d5b415431d486770ab0e72f6516", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/container": "^1.0", + "psr/container": "^1.1.1", "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-php80": "^1.15", "symfony/service-contracts": "^1.1.6|^2" }, "conflict": { - "symfony/config": "<5.1", + "ext-psr": "<1.1|>=2", + "symfony/config": "<5.3", "symfony/finder": "<4.4", "symfony/proxy-manager-bridge": "<4.4", "symfony/yaml": "<4.4" }, "provide": { "psr/container-implementation": "1.0", - "symfony/service-implementation": "1.0" + "symfony/service-implementation": "1.0|2.0" }, "require-dev": { - "symfony/config": "^5.1", + "symfony/config": "^5.3", "symfony/expression-language": "^4.4|^5.0", "symfony/yaml": "^4.4|^5.0" }, @@ -2888,10 +2912,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony DependencyInjection Component", + "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.2.0-RC1" + "source": "https://github.com/symfony/dependency-injection/tree/v5.3.2" }, "funding": [ { @@ -2907,20 +2931,20 @@ "type": "tidelift" } ], - "time": "2020-11-09T12:21:52+00:00" + "time": "2021-06-12T09:17:04+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.2.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", "shasum": "" }, "require": { @@ -2929,7 +2953,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-main": "2.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -2958,7 +2982,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/master" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" }, "funding": [ { @@ -2974,20 +2998,20 @@ "type": "tidelift" } ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2021-03-23T23:28:01+00:00" }, { "name": "symfony/doctrine-messenger", - "version": "v5.2.0-RC1", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-messenger.git", - "reference": "078588b495c7137bdbb3b118b3ee5a46144d4126" + "reference": "beedb48475116c8c9c75fc6de70b35a656d4c442" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/078588b495c7137bdbb3b118b3ee5a46144d4126", - "reference": "078588b495c7137bdbb3b118b3ee5a46144d4126", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/beedb48475116c8c9c75fc6de70b35a656d4c442", + "reference": "beedb48475116c8c9c75fc6de70b35a656d4c442", "shasum": "" }, "require": { @@ -3031,7 +3055,7 @@ "description": "Symfony Doctrine Messenger Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-messenger/tree/v5.2.0-RC1" + "source": "https://github.com/symfony/doctrine-messenger/tree/v5.3.2" }, "funding": [ { @@ -3047,20 +3071,20 @@ "type": "tidelift" } ], - "time": "2020-11-07T16:24:48+00:00" + "time": "2021-06-04T22:34:10+00:00" }, { "name": "symfony/dotenv", - "version": "v5.2.0-RC1", + "version": "v5.3.0", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "29ac2a3e538da61780a769827c716738ce7accbb" + "reference": "1ac423fcc9548709077f90aca26c733cdb7e6e5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/29ac2a3e538da61780a769827c716738ce7accbb", - "reference": "29ac2a3e538da61780a769827c716738ce7accbb", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/1ac423fcc9548709077f90aca26c733cdb7e6e5c", + "reference": "1ac423fcc9548709077f90aca26c733cdb7e6e5c", "shasum": "" }, "require": { @@ -3101,7 +3125,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v5.2.0-RC1" + "source": "https://github.com/symfony/dotenv/tree/v5.3.0" }, "funding": [ { @@ -3117,20 +3141,20 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:01:57+00:00" + "time": "2021-05-26T12:52:38+00:00" }, { "name": "symfony/error-handler", - "version": "v5.2.0-RC1", + "version": "v5.3.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "289008c5be039e39908d33ae0a8ac99be1210bba" + "reference": "0e6768b8c0dcef26df087df2bbbaa143867a59b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/289008c5be039e39908d33ae0a8ac99be1210bba", - "reference": "289008c5be039e39908d33ae0a8ac99be1210bba", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/0e6768b8c0dcef26df087df2bbbaa143867a59b2", + "reference": "0e6768b8c0dcef26df087df2bbbaa143867a59b2", "shasum": "" }, "require": { @@ -3167,10 +3191,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony ErrorHandler Component", + "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.2.0-RC1" + "source": "https://github.com/symfony/error-handler/tree/v5.3.0" }, "funding": [ { @@ -3186,20 +3210,20 @@ "type": "tidelift" } ], - "time": "2020-10-28T21:46:03+00:00" + "time": "2021-05-26T17:43:10+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.2.0-RC1", + "version": "v5.3.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "aa13a09811e6d2ad43f8fb336bebdb7691d85d3c" + "reference": "67a5f354afa8e2f231081b3fa11a5912f933c3ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/aa13a09811e6d2ad43f8fb336bebdb7691d85d3c", - "reference": "aa13a09811e6d2ad43f8fb336bebdb7691d85d3c", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/67a5f354afa8e2f231081b3fa11a5912f933c3ce", + "reference": "67a5f354afa8e2f231081b3fa11a5912f933c3ce", "shasum": "" }, "require": { @@ -3252,10 +3276,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony EventDispatcher Component", + "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.2.0-RC1" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.3.0" }, "funding": [ { @@ -3271,20 +3295,20 @@ "type": "tidelift" } ], - "time": "2020-11-01T16:14:45+00:00" + "time": "2021-05-26T17:43:10+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.2.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2" + "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ba7d54483095a198fa51781bc608d17e84dffa2", - "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11", + "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11", "shasum": "" }, "require": { @@ -3297,7 +3321,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-main": "2.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -3334,7 +3358,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.2.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.4.0" }, "funding": [ { @@ -3350,20 +3374,20 @@ "type": "tidelift" } ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2021-03-23T23:28:01+00:00" }, { "name": "symfony/filesystem", - "version": "v5.2.0-RC1", + "version": "v5.3.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "4326782dcccf8aa873b26999e36c6c71c8d3404b" + "reference": "348116319d7fb7d1faa781d26a48922428013eb2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/4326782dcccf8aa873b26999e36c6c71c8d3404b", - "reference": "4326782dcccf8aa873b26999e36c6c71c8d3404b", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/348116319d7fb7d1faa781d26a48922428013eb2", + "reference": "348116319d7fb7d1faa781d26a48922428013eb2", "shasum": "" }, "require": { @@ -3393,10 +3417,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Filesystem Component", + "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.2.0-RC1" + "source": "https://github.com/symfony/filesystem/tree/v5.3.0" }, "funding": [ { @@ -3412,20 +3436,20 @@ "type": "tidelift" } ], - "time": "2020-10-28T21:33:29+00:00" + "time": "2021-05-26T17:43:10+00:00" }, { "name": "symfony/finder", - "version": "v5.2.0-RC1", + "version": "v5.3.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "19de51f4fd1cb88ba4d8d9a8c39d79cca7f11577" + "reference": "0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/19de51f4fd1cb88ba4d8d9a8c39d79cca7f11577", - "reference": "19de51f4fd1cb88ba4d8d9a8c39d79cca7f11577", + "url": "https://api.github.com/repos/symfony/finder/zipball/0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6", + "reference": "0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6", "shasum": "" }, "require": { @@ -3454,10 +3478,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Finder Component", + "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.2.0-RC1" + "source": "https://github.com/symfony/finder/tree/v5.3.0" }, "funding": [ { @@ -3473,46 +3497,47 @@ "type": "tidelift" } ], - "time": "2020-11-02T07:55:38+00:00" + "time": "2021-05-26T12:52:38+00:00" }, { "name": "symfony/framework-bundle", - "version": "v5.2.0-RC1", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "1d242be298a163545ea5aac0761e9475f2f28a5f" + "reference": "120e80e882debd7e705d53a3b054e1a0fae91fbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/1d242be298a163545ea5aac0761e9475f2f28a5f", - "reference": "1d242be298a163545ea5aac0761e9475f2f28a5f", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/120e80e882debd7e705d53a3b054e1a0fae91fbc", + "reference": "120e80e882debd7e705d53a3b054e1a0fae91fbc", "shasum": "" }, "require": { "ext-xml": "*", "php": ">=7.2.5", "symfony/cache": "^5.2", - "symfony/config": "^5.0", - "symfony/dependency-injection": "^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.2", - "symfony/http-kernel": "^5.2", + "symfony/http-foundation": "^5.3", + "symfony/http-kernel": "^5.3", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php80": "^1.15", - "symfony/routing": "^5.2" + "symfony/routing": "^5.3" }, "conflict": { "doctrine/persistence": "<1.3", - "phpdocumentor/reflection-docblock": "<3.0", - "phpdocumentor/type-resolver": "<0.2.1", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", "phpunit/phpunit": "<5.4.3", - "symfony/asset": "<5.1", + "symfony/asset": "<5.3", "symfony/browser-kit": "<4.4", - "symfony/console": "<5.2", + "symfony/console": "<5.2.5", "symfony/dom-crawler": "<4.4", "symfony/dotenv": "<5.1", "symfony/form": "<5.2", @@ -3521,11 +3546,13 @@ "symfony/mailer": "<5.2", "symfony/messenger": "<4.4", "symfony/mime": "<4.4", - "symfony/property-access": "<5.2", + "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/stopwatch": "<4.4", - "symfony/translation": "<5.0", + "symfony/translation": "<5.3", "symfony/twig-bridge": "<4.4", "symfony/twig-bundle": "<4.4", "symfony/validator": "<5.2", @@ -3533,38 +3560,72 @@ "symfony/workflow": "<5.2" }, "require-dev": { - "doctrine/annotations": "~1.7", - "doctrine/cache": "~1.0", + "doctrine/annotations": "^1.10.4", + "doctrine/cache": "^1.0|^2.0", + "doctrine/persistence": "^1.3|^2.0", "paragonie/sodium_compat": "^1.8", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/asset": "^5.1", + "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/polyfill-intl-icu": "~1.0", "symfony/process": "^4.4|^5.0", "symfony/property-info": "^4.4|^5.0", - "symfony/security-bundle": "^5.1", - "symfony/security-csrf": "^4.4|^5.0", - "symfony/security-http": "^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/translation": "^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", "twig/twig": "^2.10|^3.0" }, "suggest": { @@ -3600,10 +3661,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony FrameworkBundle", + "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.2.0-RC1" + "source": "https://github.com/symfony/framework-bundle/tree/v5.3.2" }, "funding": [ { @@ -3619,20 +3680,20 @@ "type": "tidelift" } ], - "time": "2020-11-07T21:48:53+00:00" + "time": "2021-06-17T13:29:40+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v2.3.1", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "41db680a15018f9c1d4b23516059633ce280ca33" + "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/41db680a15018f9c1d4b23516059633ce280ca33", - "reference": "41db680a15018f9c1d4b23516059633ce280ca33", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/7e82f6084d7cae521a75ef2cb5c9457bbda785f4", + "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4", "shasum": "" }, "require": { @@ -3643,9 +3704,8 @@ }, "type": "library", "extra": { - "branch-version": "2.3", "branch-alias": { - "dev-main": "2.3-dev" + "dev-main": "2.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -3682,7 +3742,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v2.3.1" + "source": "https://github.com/symfony/http-client-contracts/tree/v2.4.0" }, "funding": [ { @@ -3698,20 +3758,20 @@ "type": "tidelift" } ], - "time": "2020-10-14T17:08:19+00:00" + "time": "2021-04-11T23:07:08+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.2.0-RC1", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "46ff6a7c7a747cf87ca4ca2701048c6adc9c29de" + "reference": "7b6dd714d95106b831aaa7f3c9c612ab886516bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/46ff6a7c7a747cf87ca4ca2701048c6adc9c29de", - "reference": "46ff6a7c7a747cf87ca4ca2701048c6adc9c29de", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/7b6dd714d95106b831aaa7f3c9c612ab886516bd", + "reference": "7b6dd714d95106b831aaa7f3c9c612ab886516bd", "shasum": "" }, "require": { @@ -3752,10 +3812,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony HttpFoundation Component", + "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.2.0-RC1" + "source": "https://github.com/symfony/http-foundation/tree/v5.3.2" }, "funding": [ { @@ -3771,20 +3831,20 @@ "type": "tidelift" } ], - "time": "2020-11-02T16:16:33+00:00" + "time": "2021-06-12T10:15:17+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.2.0-RC1", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "e8136e599847130f54ff70e47fc9e5070bc4860b" + "reference": "e7021165d9dbfb4051296b8de827e92c8a7b5c87" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/e8136e599847130f54ff70e47fc9e5070bc4860b", - "reference": "e8136e599847130f54ff70e47fc9e5070bc4860b", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/e7021165d9dbfb4051296b8de827e92c8a7b5c87", + "reference": "e7021165d9dbfb4051296b8de827e92c8a7b5c87", "shasum": "" }, "require": { @@ -3794,7 +3854,7 @@ "symfony/error-handler": "^4.4|^5.0", "symfony/event-dispatcher": "^5.0", "symfony/http-client-contracts": "^1.1|^2", - "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-foundation": "^5.3", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-php73": "^1.9", "symfony/polyfill-php80": "^1.15" @@ -3804,7 +3864,7 @@ "symfony/cache": "<5.0", "symfony/config": "<5.0", "symfony/console": "<4.4", - "symfony/dependency-injection": "<5.1.8", + "symfony/dependency-injection": "<5.3", "symfony/doctrine-bridge": "<5.0", "symfony/form": "<5.0", "symfony/http-client": "<5.0", @@ -3813,18 +3873,18 @@ "symfony/translation": "<5.0", "symfony/twig-bridge": "<5.0", "symfony/validator": "<5.0", - "twig/twig": "<2.4" + "twig/twig": "<2.13" }, "provide": { "psr/log-implementation": "1.0" }, "require-dev": { - "psr/cache": "~1.0", + "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.1.8", + "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", @@ -3833,7 +3893,7 @@ "symfony/stopwatch": "^4.4|^5.0", "symfony/translation": "^4.4|^5.0", "symfony/translation-contracts": "^1.1|^2", - "twig/twig": "^2.4|^3.0" + "twig/twig": "^2.13|^3.0.4" }, "suggest": { "symfony/browser-kit": "", @@ -3864,10 +3924,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony HttpKernel Component", + "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.2.0-RC1" + "source": "https://github.com/symfony/http-kernel/tree/v5.3.2" }, "funding": [ { @@ -3883,20 +3943,20 @@ "type": "tidelift" } ], - "time": "2020-11-10T07:54:37+00:00" + "time": "2021-06-17T14:18:27+00:00" }, { "name": "symfony/messenger", - "version": "v5.2.0-RC1", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/messenger.git", - "reference": "ae14385879e5b14d5dae94d5b30502a617ef6b06" + "reference": "552b671a36b3f58e32e8c551a92559e571f60613" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/messenger/zipball/ae14385879e5b14d5dae94d5b30502a617ef6b06", - "reference": "ae14385879e5b14d5dae94d5b30502a617ef6b06", + "url": "https://api.github.com/repos/symfony/messenger/zipball/552b671a36b3f58e32e8c551a92559e571f60613", + "reference": "552b671a36b3f58e32e8c551a92559e571f60613", "shasum": "" }, "require": { @@ -3914,13 +3974,14 @@ "symfony/http-kernel": "<4.4" }, "require-dev": { - "psr/cache": "~1.0", + "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", @@ -3952,10 +4013,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Messenger Component", + "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.2.0-RC1" + "source": "https://github.com/symfony/messenger/tree/v5.3.2" }, "funding": [ { @@ -3971,20 +4032,20 @@ "type": "tidelift" } ], - "time": "2020-11-10T06:17:22+00:00" + "time": "2021-06-16T22:22:36+00:00" }, { "name": "symfony/polyfill-apcu", - "version": "v1.20.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-apcu.git", - "reference": "f5191eb0e98e08d12eb49fc0ed0820e37de89fdf" + "reference": "80f7fb64c5b64ebcba76f40215e63808a2062a18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/f5191eb0e98e08d12eb49fc0ed0820e37de89fdf", - "reference": "f5191eb0e98e08d12eb49fc0ed0820e37de89fdf", + "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/80f7fb64c5b64ebcba76f40215e63808a2062a18", + "reference": "80f7fb64c5b64ebcba76f40215e63808a2062a18", "shasum": "" }, "require": { @@ -3993,7 +4054,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4032,7 +4093,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-apcu/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-apcu/tree/v1.23.0" }, "funding": [ { @@ -4048,20 +4109,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-02-19T12:13:01+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.20.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41" + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", "shasum": "" }, "require": { @@ -4073,7 +4134,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4111,7 +4172,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" }, "funding": [ { @@ -4127,20 +4188,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-02-19T12:13:01+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.20.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c" + "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", - "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/24b72c6baa32c746a4d0840147c9715e42bb68ab", + "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab", "shasum": "" }, "require": { @@ -4152,7 +4213,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4192,7 +4253,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.0" }, "funding": [ { @@ -4208,20 +4269,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-05-27T09:17:38+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.20.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117" + "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3b75acd829741c768bc8b1f84eb33265e7cc5117", - "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", + "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", "shasum": "" }, "require": { @@ -4235,7 +4296,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4279,7 +4340,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0" }, "funding": [ { @@ -4295,20 +4356,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-05-27T09:27:20+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.20.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "727d1096295d807c309fb01a851577302394c897" + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/727d1096295d807c309fb01a851577302394c897", - "reference": "727d1096295d807c309fb01a851577302394c897", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", "shasum": "" }, "require": { @@ -4320,7 +4381,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4363,7 +4424,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" }, "funding": [ { @@ -4379,20 +4440,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-02-19T12:13:01+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.20.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "39d483bdf39be819deabf04ec872eb0b2410b531" + "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531", - "reference": "39d483bdf39be819deabf04ec872eb0b2410b531", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1", + "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1", "shasum": "" }, "require": { @@ -4404,7 +4465,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4443,7 +4504,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.0" }, "funding": [ { @@ -4459,20 +4520,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-05-27T09:27:20+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.20.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930" + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cede45fcdfabdd6043b3592e83678e42ec69e930", - "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", "shasum": "" }, "require": { @@ -4481,7 +4542,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4519,7 +4580,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" }, "funding": [ { @@ -4535,20 +4596,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-05-27T09:17:38+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.20.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "8ff431c517be11c78c48a39a66d37431e26a6bed" + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/8ff431c517be11c78c48a39a66d37431e26a6bed", - "reference": "8ff431c517be11c78c48a39a66d37431e26a6bed", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", "shasum": "" }, "require": { @@ -4557,7 +4618,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4598,7 +4659,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" }, "funding": [ { @@ -4614,20 +4675,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-02-19T12:13:01+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.20.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de" + "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de", - "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/eca0bf41ed421bed1b57c4958bab16aa86b757d0", + "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0", "shasum": "" }, "require": { @@ -4636,7 +4697,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4681,7 +4742,86 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.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-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "e66119f3de95efc359483f810c4c3e6436279436" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", + "reference": "e66119f3de95efc359483f810c4c3e6436279436", + "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": { + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "files": [ + "bootstrap.php" + ], + "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.23.0" }, "funding": [ { @@ -4697,24 +4837,25 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-05-21T13:25:03+00:00" }, { "name": "symfony/redis-messenger", - "version": "v5.2.0-RC1", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/redis-messenger.git", - "reference": "8a827544bd0536a6097006e178bc6e2c5873aad1" + "reference": "caf341c2e11335d8db5a261bb199be13804ee983" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/redis-messenger/zipball/8a827544bd0536a6097006e178bc6e2c5873aad1", - "reference": "8a827544bd0536a6097006e178bc6e2c5873aad1", + "url": "https://api.github.com/repos/symfony/redis-messenger/zipball/caf341c2e11335d8db5a261bb199be13804ee983", + "reference": "caf341c2e11335d8db5a261bb199be13804ee983", "shasum": "" }, "require": { "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", "symfony/messenger": "^5.1" }, "require-dev": { @@ -4747,7 +4888,7 @@ "description": "Symfony Redis extension Messenger Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/redis-messenger/tree/v5.2.0-RC1" + "source": "https://github.com/symfony/redis-messenger/tree/v5.3.2" }, "funding": [ { @@ -4763,20 +4904,20 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:08:07+00:00" + "time": "2021-06-05T08:59:26+00:00" }, { "name": "symfony/routing", - "version": "v5.2.0-RC1", + "version": "v5.3.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "1e6197621f53ebc807db00892194ca5d816c1f3e" + "reference": "368e81376a8e049c37cb80ae87dbfbf411279199" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/1e6197621f53ebc807db00892194ca5d816c1f3e", - "reference": "1e6197621f53ebc807db00892194ca5d816c1f3e", + "url": "https://api.github.com/repos/symfony/routing/zipball/368e81376a8e049c37cb80ae87dbfbf411279199", + "reference": "368e81376a8e049c37cb80ae87dbfbf411279199", "shasum": "" }, "require": { @@ -4785,21 +4926,21 @@ "symfony/polyfill-php80": "^1.15" }, "conflict": { - "symfony/config": "<5.0", + "doctrine/annotations": "<1.12", + "symfony/config": "<5.3", "symfony/dependency-injection": "<4.4", "symfony/yaml": "<4.4" }, "require-dev": { - "doctrine/annotations": "^1.7", + "doctrine/annotations": "^1.12", "psr/log": "~1.0", - "symfony/config": "^5.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" }, "suggest": { - "doctrine/annotations": "For using the annotation loader", "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", @@ -4828,7 +4969,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Routing Component", + "description": "Maps an HTTP request to a set of configuration variables", "homepage": "https://symfony.com", "keywords": [ "router", @@ -4837,7 +4978,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.2.0-RC1" + "source": "https://github.com/symfony/routing/tree/v5.3.0" }, "funding": [ { @@ -4853,25 +4994,25 @@ "type": "tidelift" } ], - "time": "2020-10-28T21:46:03+00:00" + "time": "2021-05-26T17:43:10+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.2.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", - "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/container": "^1.0" + "psr/container": "^1.1" }, "suggest": { "symfony/service-implementation": "" @@ -4879,7 +5020,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-main": "2.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -4916,7 +5057,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/master" + "source": "https://github.com/symfony/service-contracts/tree/v2.4.0" }, "funding": [ { @@ -4932,20 +5073,20 @@ "type": "tidelift" } ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2021-04-01T10:43:52+00:00" }, { "name": "symfony/string", - "version": "v5.2.0-RC1", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "40e975edadd4e32cd16f3753b3bad65d9ac48242" + "reference": "0732e97e41c0a590f77e231afc16a327375d50b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/40e975edadd4e32cd16f3753b3bad65d9ac48242", - "reference": "40e975edadd4e32cd16f3753b3bad65d9ac48242", + "url": "https://api.github.com/repos/symfony/string/zipball/0732e97e41c0a590f77e231afc16a327375d50b0", + "reference": "0732e97e41c0a590f77e231afc16a327375d50b0", "shasum": "" }, "require": { @@ -4988,7 +5129,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony String component", + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", "homepage": "https://symfony.com", "keywords": [ "grapheme", @@ -4999,7 +5140,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.2.0-RC1" + "source": "https://github.com/symfony/string/tree/v5.3.2" }, "funding": [ { @@ -5015,20 +5156,20 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:08:07+00:00" + "time": "2021-06-06T09:51:56+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.3.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105" + "reference": "95c812666f3e91db75385749fe219c5e494c7f95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e2eaa60b558f26a4b0354e1bbb25636efaaad105", - "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95", + "reference": "95c812666f3e91db75385749fe219c5e494c7f95", "shasum": "" }, "require": { @@ -5040,7 +5181,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-main": "2.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -5077,7 +5218,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.3.0" + "source": "https://github.com/symfony/translation-contracts/tree/v2.4.0" }, "funding": [ { @@ -5093,47 +5234,51 @@ "type": "tidelift" } ], - "time": "2020-09-28T13:05:58+00:00" + "time": "2021-03-23T23:28:01+00:00" }, { "name": "symfony/twig-bridge", - "version": "v5.2.0-RC1", + "version": "v5.3.0", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "8daf9ed41c9fbd075d437c5c7ffaf46c5ab67f8a" + "reference": "cbd8f87a3d2445e566db3fe75e34a0bcad70c222" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/8daf9ed41c9fbd075d437c5c7ffaf46c5ab67f8a", - "reference": "8daf9ed41c9fbd075d437c5c7ffaf46c5ab67f8a", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/cbd8f87a3d2445e566db3fe75e34a0bcad70c222", + "reference": "cbd8f87a3d2445e566db3fe75e34a0bcad70c222", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-php80": "^1.15", "symfony/translation-contracts": "^1.1|^2", - "twig/twig": "^2.10|^3.0" + "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.1", - "symfony/http-foundation": "<4.4", + "symfony/form": "<5.3", + "symfony/http-foundation": "<5.3", "symfony/http-kernel": "<4.4", "symfony/translation": "<5.2", "symfony/workflow": "<5.2" }, "require-dev": { - "egulias/email-validator": "^2.1.10", + "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.1", - "symfony/http-foundation": "^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/polyfill-intl-icu": "~1.0", "symfony/property-info": "^4.4|^5.1", @@ -5148,9 +5293,9 @@ "symfony/web-link": "^4.4|^5.0", "symfony/workflow": "^5.2", "symfony/yaml": "^4.4|^5.0", - "twig/cssinliner-extra": "^2.12", - "twig/inky-extra": "^2.12", - "twig/markdown-extra": "^2.12" + "twig/cssinliner-extra": "^2.12|^3", + "twig/inky-extra": "^2.12|^3", + "twig/markdown-extra": "^2.12|^3" }, "suggest": { "symfony/asset": "For using the AssetExtension", @@ -5191,10 +5336,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Twig Bridge", + "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v5.2.0-RC1" + "source": "https://github.com/symfony/twig-bridge/tree/v5.3.0" }, "funding": [ { @@ -5210,20 +5355,20 @@ "type": "tidelift" } ], - "time": "2020-10-28T21:46:03+00:00" + "time": "2021-05-26T17:43:10+00:00" }, { "name": "symfony/twig-bundle", - "version": "v5.2.0-RC1", + "version": "v5.3.0", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "954b642ce585c7f20795f30aba53eb27eeb1a91f" + "reference": "d386aaa46d1afe5afb51b39675fc2ab206159206" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/954b642ce585c7f20795f30aba53eb27eeb1a91f", - "reference": "954b642ce585c7f20795f30aba53eb27eeb1a91f", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/d386aaa46d1afe5afb51b39675fc2ab206159206", + "reference": "d386aaa46d1afe5afb51b39675fc2ab206159206", "shasum": "" }, "require": { @@ -5232,19 +5377,19 @@ "symfony/http-foundation": "^4.4|^5.0", "symfony/http-kernel": "^5.0", "symfony/polyfill-ctype": "~1.8", - "symfony/twig-bridge": "^5.0", - "twig/twig": "^2.10|^3.0" + "symfony/twig-bridge": "^5.3", + "twig/twig": "^2.13|^3.0.4" }, "conflict": { - "symfony/dependency-injection": "<5.2", + "symfony/dependency-injection": "<5.3", "symfony/framework-bundle": "<5.0", "symfony/translation": "<5.0" }, "require-dev": { - "doctrine/annotations": "~1.7", - "doctrine/cache": "~1.0", + "doctrine/annotations": "^1.10.4", + "doctrine/cache": "^1.0|^2.0", "symfony/asset": "^4.4|^5.0", - "symfony/dependency-injection": "^5.2", + "symfony/dependency-injection": "^5.3", "symfony/expression-language": "^4.4|^5.0", "symfony/finder": "^4.4|^5.0", "symfony/form": "^4.4|^5.0", @@ -5278,10 +5423,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony TwigBundle", + "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.2.0-RC1" + "source": "https://github.com/symfony/twig-bundle/tree/v5.3.0" }, "funding": [ { @@ -5297,20 +5442,20 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:08:07+00:00" + "time": "2021-05-26T17:43:10+00:00" }, { "name": "symfony/validator", - "version": "v5.2.0-RC1", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "d66cfc3879bfac6743e146c0b4522e7eb485eb72" + "reference": "87621b2503601673b7e76aeffac3234ada8e1bf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/d66cfc3879bfac6743e146c0b4522e7eb485eb72", - "reference": "d66cfc3879bfac6743e146c0b4522e7eb485eb72", + "url": "https://api.github.com/repos/symfony/validator/zipball/87621b2503601673b7e76aeffac3234ada8e1bf2", + "reference": "87621b2503601673b7e76aeffac3234ada8e1bf2", "shasum": "" }, "require": { @@ -5329,13 +5474,14 @@ "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" }, "require-dev": { - "doctrine/annotations": "~1.7", - "doctrine/cache": "~1.0", - "egulias/email-validator": "^2.1.10", + "doctrine/annotations": "^1.10.4", + "doctrine/cache": "^1.0|^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", @@ -5348,13 +5494,11 @@ "symfony/intl": "^4.4|^5.0", "symfony/mime": "^4.4|^5.0", "symfony/property-access": "^4.4|^5.0", - "symfony/property-info": "^4.4|^5.0", + "symfony/property-info": "^5.3", "symfony/translation": "^4.4|^5.0", "symfony/yaml": "^4.4|^5.0" }, "suggest": { - "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", - "doctrine/cache": "For using the default cached annotation reader.", "egulias/email-validator": "Strict (RFC compliant) email validation", "psr/cache-implementation": "For using the mapping cache.", "symfony/config": "", @@ -5389,10 +5533,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Validator Component", + "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v5.2.0-RC1" + "source": "https://github.com/symfony/validator/tree/v5.3.2" }, "funding": [ { @@ -5408,20 +5552,20 @@ "type": "tidelift" } ], - "time": "2020-11-07T21:48:53+00:00" + "time": "2021-06-17T12:34:27+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.2.0-RC1", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "b75af2fd53fbf718b45add928e80db0b5af560f9" + "reference": "905a22c68b292ffb6f20d7636c36b220d1fba5ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b75af2fd53fbf718b45add928e80db0b5af560f9", - "reference": "b75af2fd53fbf718b45add928e80db0b5af560f9", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/905a22c68b292ffb6f20d7636c36b220d1fba5ae", + "reference": "905a22c68b292ffb6f20d7636c36b220d1fba5ae", "shasum": "" }, "require": { @@ -5437,7 +5581,7 @@ "ext-iconv": "*", "symfony/console": "^4.4|^5.0", "symfony/process": "^4.4|^5.0", - "twig/twig": "^2.4|^3.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).", @@ -5473,14 +5617,14 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony mechanism for exploring and dumping PHP variables", + "description": "Provides mechanisms for walking through any arbitrary PHP variable", "homepage": "https://symfony.com", "keywords": [ "debug", "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.2.0-RC1" + "source": "https://github.com/symfony/var-dumper/tree/v5.3.2" }, "funding": [ { @@ -5496,20 +5640,20 @@ "type": "tidelift" } ], - "time": "2020-10-28T21:46:03+00:00" + "time": "2021-06-06T09:51:56+00:00" }, { "name": "symfony/var-exporter", - "version": "v5.2.0-RC1", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "fbc3507f23d263d75417e09a12d77c009f39676c" + "reference": "df663fb63bdcd7298373cbd431165ab031706cb2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/fbc3507f23d263d75417e09a12d77c009f39676c", - "reference": "fbc3507f23d263d75417e09a12d77c009f39676c", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/df663fb63bdcd7298373cbd431165ab031706cb2", + "reference": "df663fb63bdcd7298373cbd431165ab031706cb2", "shasum": "" }, "require": { @@ -5542,7 +5686,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "A blend of var_export() + serialize() to turn any serializable data structure to plain PHP code", + "description": "Allows exporting any serializable PHP data structure to plain PHP code", "homepage": "https://symfony.com", "keywords": [ "clone", @@ -5553,7 +5697,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v5.2.0-RC1" + "source": "https://github.com/symfony/var-exporter/tree/v5.3.2" }, "funding": [ { @@ -5569,20 +5713,20 @@ "type": "tidelift" } ], - "time": "2020-10-28T21:31:18+00:00" + "time": "2021-06-09T10:57:10+00:00" }, { "name": "symfony/yaml", - "version": "v5.2.0-RC1", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "f284e032c3cefefb9943792132251b79a6127ca6" + "reference": "71719ab2409401711d619765aa255f9d352a59b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/f284e032c3cefefb9943792132251b79a6127ca6", - "reference": "f284e032c3cefefb9943792132251b79a6127ca6", + "url": "https://api.github.com/repos/symfony/yaml/zipball/71719ab2409401711d619765aa255f9d352a59b2", + "reference": "71719ab2409401711d619765aa255f9d352a59b2", "shasum": "" }, "require": { @@ -5625,10 +5769,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Yaml Component", + "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.2.0-RC1" + "source": "https://github.com/symfony/yaml/tree/v5.3.2" }, "funding": [ { @@ -5644,20 +5788,20 @@ "type": "tidelift" } ], - "time": "2020-10-24T12:03:25+00:00" + "time": "2021-06-06T09:51:56+00:00" }, { "name": "twig/twig", - "version": "v3.1.1", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "b02fa41f3783a2616eccef7b92fbc2343ffed737" + "reference": "21578f00e83d4a82ecfa3d50752b609f13de6790" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/b02fa41f3783a2616eccef7b92fbc2343ffed737", - "reference": "b02fa41f3783a2616eccef7b92fbc2343ffed737", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/21578f00e83d4a82ecfa3d50752b609f13de6790", + "reference": "21578f00e83d4a82ecfa3d50752b609f13de6790", "shasum": "" }, "require": { @@ -5672,7 +5816,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -5708,7 +5852,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.1.1" + "source": "https://github.com/twigphp/Twig/tree/v3.3.2" }, "funding": [ { @@ -5720,35 +5864,35 @@ "type": "tidelift" } ], - "time": "2020-10-27T19:28:23+00:00" + "time": "2021-05-16T12:14:13+00:00" }, { "name": "webimpress/safe-writer", - "version": "2.1.0", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/webimpress/safe-writer.git", - "reference": "5cfafdec5873c389036f14bf832a5efc9390dcdd" + "reference": "9d37cc8bee20f7cb2f58f6e23e05097eab5072e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webimpress/safe-writer/zipball/5cfafdec5873c389036f14bf832a5efc9390dcdd", - "reference": "5cfafdec5873c389036f14bf832a5efc9390dcdd", + "url": "https://api.github.com/repos/webimpress/safe-writer/zipball/9d37cc8bee20f7cb2f58f6e23e05097eab5072e6", + "reference": "9d37cc8bee20f7cb2f58f6e23e05097eab5072e6", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^8.5.8 || ^9.3.7", - "vimeo/psalm": "^3.14.2", - "webimpress/coding-standard": "^1.1.5" + "phpunit/phpunit": "^9.5.4", + "vimeo/psalm": "^4.7", + "webimpress/coding-standard": "^1.2.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev", - "dev-develop": "2.2.x-dev", + "dev-master": "2.2.x-dev", + "dev-develop": "2.3.x-dev", "dev-release-1.0": "1.0.x-dev" } }, @@ -5771,7 +5915,7 @@ ], "support": { "issues": "https://github.com/webimpress/safe-writer/issues", - "source": "https://github.com/webimpress/safe-writer/tree/master" + "source": "https://github.com/webimpress/safe-writer/tree/2.2.0" }, "funding": [ { @@ -5779,22 +5923,22 @@ "type": "github" } ], - "time": "2020-08-25T07:21:11+00:00" + "time": "2021-04-19T16:34:45+00:00" } ], "packages-dev": [ { "name": "amphp/amp", - "version": "v2.5.1", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "ecdc3c476b3ccff02f8e5d5bcc04f7ccfd18751c" + "reference": "efca2b32a7580087adb8aabbff6be1dc1bb924a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/ecdc3c476b3ccff02f8e5d5bcc04f7ccfd18751c", - "reference": "ecdc3c476b3ccff02f8e5d5bcc04f7ccfd18751c", + "url": "https://api.github.com/repos/amphp/amp/zipball/efca2b32a7580087adb8aabbff6be1dc1bb924a9", + "reference": "efca2b32a7580087adb8aabbff6be1dc1bb924a9", "shasum": "" }, "require": { @@ -5862,7 +6006,7 @@ "support": { "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.5.1" + "source": "https://github.com/amphp/amp/tree/v2.5.2" }, "funding": [ { @@ -5870,20 +6014,20 @@ "type": "github" } ], - "time": "2020-11-03T16:23:45+00:00" + "time": "2021-01-10T17:06:37+00:00" }, { "name": "amphp/byte-stream", - "version": "v1.8.0", + "version": "v1.8.1", "source": { "type": "git", "url": "https://github.com/amphp/byte-stream.git", - "reference": "f0c20cf598a958ba2aa8c6e5a71c697d652c7088" + "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/f0c20cf598a958ba2aa8c6e5a71c697d652c7088", - "reference": "f0c20cf598a958ba2aa8c6e5a71c697d652c7088", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd", + "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd", "shasum": "" }, "require": { @@ -5939,9 +6083,15 @@ "support": { "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/byte-stream/issues", - "source": "https://github.com/amphp/byte-stream/tree/master" + "source": "https://github.com/amphp/byte-stream/tree/v1.8.1" }, - "time": "2020-06-29T18:35:05+00:00" + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2021-03-30T17:13:30+00:00" }, { "name": "behat/behat", @@ -6029,25 +6179,26 @@ }, { "name": "behat/gherkin", - "version": "v4.6.2", + "version": "v4.8.0", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "51ac4500c4dc30cbaaabcd2f25694299df666a31" + "reference": "2391482cd003dfdc36b679b27e9f5326bd656acd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/51ac4500c4dc30cbaaabcd2f25694299df666a31", - "reference": "51ac4500c4dc30cbaaabcd2f25694299df666a31", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/2391482cd003dfdc36b679b27e9f5326bd656acd", + "reference": "2391482cd003dfdc36b679b27e9f5326bd656acd", "shasum": "" }, "require": { - "php": ">=5.3.1" + "php": "~7.2|~8.0" }, "require-dev": { - "phpunit/phpunit": "~4.5|~5", - "symfony/phpunit-bridge": "~2.7|~3|~4", - "symfony/yaml": "~2.3|~3|~4" + "cucumber/cucumber": "dev-gherkin-16.0.0", + "phpunit/phpunit": "~8|~9", + "symfony/phpunit-bridge": "~3|~4|~5", + "symfony/yaml": "~3|~4|~5" }, "suggest": { "symfony/yaml": "If you want to parse features, represented in YAML files" @@ -6074,7 +6225,7 @@ "homepage": "http://everzet.com" } ], - "description": "Gherkin DSL parser for PHP 5.3", + "description": "Gherkin DSL parser for PHP", "homepage": "http://behat.org/", "keywords": [ "BDD", @@ -6086,9 +6237,9 @@ ], "support": { "issues": "https://github.com/Behat/Gherkin/issues", - "source": "https://github.com/Behat/Gherkin/tree/master" + "source": "https://github.com/Behat/Gherkin/tree/v4.8.0" }, - "time": "2020-03-17T14:03:26+00:00" + "time": "2021-02-04T12:44:21+00:00" }, { "name": "behat/mink", @@ -6267,16 +6418,16 @@ }, { "name": "composer/semver", - "version": "3.2.4", + "version": "3.2.5", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "a02fdf930a3c1c3ed3a49b5f63859c0c20e10464" + "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/a02fdf930a3c1c3ed3a49b5f63859c0c20e10464", - "reference": "a02fdf930a3c1c3ed3a49b5f63859c0c20e10464", + "url": "https://api.github.com/repos/composer/semver/zipball/31f3ea725711245195f62e54ffa402d8ef2fdba9", + "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9", "shasum": "" }, "require": { @@ -6328,7 +6479,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.2.4" + "source": "https://github.com/composer/semver/tree/3.2.5" }, "funding": [ { @@ -6344,20 +6495,20 @@ "type": "tidelift" } ], - "time": "2020-11-13T08:59:24+00:00" + "time": "2021-05-24T12:41:47+00:00" }, { "name": "composer/xdebug-handler", - "version": "1.4.5", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "f28d44c286812c714741478d968104c5e604a1d4" + "reference": "964adcdd3a28bf9ed5d9ac6450064e0d71ed7496" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/f28d44c286812c714741478d968104c5e604a1d4", - "reference": "f28d44c286812c714741478d968104c5e604a1d4", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/964adcdd3a28bf9ed5d9ac6450064e0d71ed7496", + "reference": "964adcdd3a28bf9ed5d9ac6450064e0d71ed7496", "shasum": "" }, "require": { @@ -6365,7 +6516,8 @@ "psr/log": "^1.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" + "phpstan/phpstan": "^0.12.55", + "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", "autoload": { @@ -6391,7 +6543,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/1.4.5" + "source": "https://github.com/composer/xdebug-handler/tree/2.0.1" }, "funding": [ { @@ -6407,7 +6559,7 @@ "type": "tidelift" } ], - "time": "2020-11-13T08:04:11+00:00" + "time": "2021-05-05T19:37:51+00:00" }, { "name": "dnoegel/php-xdg-base-dir", @@ -6448,25 +6600,25 @@ }, { "name": "felixfbecker/advanced-json-rpc", - "version": "v3.1.1", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", - "reference": "0ed363f8de17d284d479ec813c9ad3f6834b5c40" + "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/0ed363f8de17d284d479ec813c9ad3f6834b5c40", - "reference": "0ed363f8de17d284d479ec813c9ad3f6834b5c40", + "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", + "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", "shasum": "" }, "require": { - "netresearch/jsonmapper": "^1.0 || ^2.0", - "php": ">=7.0", - "phpdocumentor/reflection-docblock": "^4.0.0 || ^5.0.0" + "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "php": "^7.1 || ^8.0", + "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" }, "require-dev": { - "phpunit/phpunit": "^6.0.0" + "phpunit/phpunit": "^7.0 || ^8.0" }, "type": "library", "autoload": { @@ -6487,22 +6639,22 @@ "description": "A more advanced JSONRPC implementation", "support": { "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", - "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/master" + "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" }, - "time": "2020-03-11T15:21:41+00:00" + "time": "2021-06-11T22:34:44+00:00" }, { "name": "felixfbecker/language-server-protocol", - "version": "v1.5.0", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/felixfbecker/php-language-server-protocol.git", - "reference": "85e83cacd2ed573238678c6875f8f0d7ec699541" + "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/85e83cacd2ed573238678c6875f8f0d7ec699541", - "reference": "85e83cacd2ed573238678c6875f8f0d7ec699541", + "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/9d846d1f5cf101deee7a61c8ba7caa0a975cd730", + "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730", "shasum": "" }, "require": { @@ -6543,36 +6695,36 @@ ], "support": { "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", - "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.0" + "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/1.5.1" }, - "time": "2020-10-23T13:55:30+00:00" + "time": "2021-02-22T14:02:09+00:00" }, { "name": "friends-of-behat/mink-extension", - "version": "v2.4.0", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/FriendsOfBehat/MinkExtension.git", - "reference": "ca8796a20f2b39ea275860d1cee7b863447dfe06" + "reference": "83119aa70be1f2c63061c29dced9d41775cd9db2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfBehat/MinkExtension/zipball/ca8796a20f2b39ea275860d1cee7b863447dfe06", - "reference": "ca8796a20f2b39ea275860d1cee7b863447dfe06", + "url": "https://api.github.com/repos/FriendsOfBehat/MinkExtension/zipball/83119aa70be1f2c63061c29dced9d41775cd9db2", + "reference": "83119aa70be1f2c63061c29dced9d41775cd9db2", "shasum": "" }, "require": { "behat/behat": "^3.0.5", "behat/mink": "^1.5", - "php": "^7.2", - "symfony/config": "^4.4|^5.0" + "php": ">=7.2", + "symfony/config": "^3.4 || ^4.4 || ^5.0" }, "replace": { "behat/mink-extension": "self.version" }, "require-dev": { "behat/mink-goutte-driver": "^1.1", - "phpspec/phpspec": "^6.0" + "phpspec/phpspec": "^6.0 || ^7.0" }, "type": "behat-extension", "extra": { @@ -6608,54 +6760,54 @@ "web" ], "support": { - "source": "https://github.com/FriendsOfBehat/MinkExtension/tree/v2.4.0" + "source": "https://github.com/FriendsOfBehat/MinkExtension/tree/v2.5.0" }, - "time": "2020-01-15T17:16:57+00:00" + "time": "2021-01-21T09:27:44+00:00" }, { "name": "friends-of-behat/symfony-extension", - "version": "v2.1.0", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/FriendsOfBehat/SymfonyExtension.git", - "reference": "0f906e1156546095f4287be7cd5ceede2d3e22cc" + "reference": "9954f5d4c34d5522ded781ba62b07e06fa71bd10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfBehat/SymfonyExtension/zipball/0f906e1156546095f4287be7cd5ceede2d3e22cc", - "reference": "0f906e1156546095f4287be7cd5ceede2d3e22cc", + "url": "https://api.github.com/repos/FriendsOfBehat/SymfonyExtension/zipball/9954f5d4c34d5522ded781ba62b07e06fa71bd10", + "reference": "9954f5d4c34d5522ded781ba62b07e06fa71bd10", "shasum": "" }, "require": { "behat/behat": "^3.6.1", - "php": "^7.1", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/http-kernel": "^4.4|^5.0", - "symfony/proxy-manager-bridge": "^4.4|^5.0" + "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" }, "require-dev": { "behat/mink-selenium2-driver": "^1.3", - "friends-of-behat/mink": "^1.7", - "friends-of-behat/mink-browserkit-driver": "^1.3", - "friends-of-behat/mink-extension": "^2.2", - "friends-of-behat/page-object-extension": "^0.3.1", - "friends-of-behat/service-container-extension": "^1.0", - "sylius-labs/coding-standard": "^3.0", - "symfony/browser-kit": "^4.4|^5.0", - "symfony/framework-bundle": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0", - "vimeo/psalm": "3.10.1" + "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": "^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" }, "suggest": { - "friends-of-behat/mink": "^1.7", - "friends-of-behat/mink-browserkit-driver": "^1.3", - "friends-of-behat/mink-extension": "^2.2" + "friends-of-behat/mink": "^1.9", + "friends-of-behat/mink-browserkit-driver": "^1.5", + "friends-of-behat/mink-extension": "^2.5" }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.2-dev" } }, "autoload": { @@ -6677,22 +6829,22 @@ "description": "Integrates Behat with Symfony.", "support": { "issues": "https://github.com/FriendsOfBehat/SymfonyExtension/issues", - "source": "https://github.com/FriendsOfBehat/SymfonyExtension/tree/2.1" + "source": "https://github.com/FriendsOfBehat/SymfonyExtension/tree/v2.2.0" }, - "time": "2020-04-04T20:07:00+00:00" + "time": "2021-02-04T15:45:42+00:00" }, { "name": "fzaninotto/faker", - "version": "v1.9.1", + "version": "v1.9.2", "source": { "type": "git", "url": "https://github.com/fzaninotto/Faker.git", - "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f" + "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/fc10d778e4b84d5bd315dad194661e091d307c6f", - "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/848d8125239d7dbf8ab25cb7f054f1a630e68c2e", + "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e", "shasum": "" }, "require": { @@ -6731,10 +6883,10 @@ ], "support": { "issues": "https://github.com/fzaninotto/Faker/issues", - "source": "https://github.com/fzaninotto/Faker/tree/v1.9.1" + "source": "https://github.com/fzaninotto/Faker/tree/v1.9.2" }, "abandoned": true, - "time": "2019-12-12T13:22:17+00:00" + "time": "2020-12-11T09:56:16+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -6789,16 +6941,16 @@ }, { "name": "mockery/mockery", - "version": "1.4.2", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "20cab678faed06fac225193be281ea0fddb43b93" + "reference": "d1339f64479af1bee0e82a0413813fe5345a54ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/20cab678faed06fac225193be281ea0fddb43b93", - "reference": "20cab678faed06fac225193be281ea0fddb43b93", + "url": "https://api.github.com/repos/mockery/mockery/zipball/d1339f64479af1bee0e82a0413813fe5345a54ea", + "reference": "d1339f64479af1bee0e82a0413813fe5345a54ea", "shasum": "" }, "require": { @@ -6855,22 +7007,22 @@ ], "support": { "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/master" + "source": "https://github.com/mockery/mockery/tree/1.4.3" }, - "time": "2020-08-11T18:10:13+00:00" + "time": "2021-02-24T09:51:49+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.10.1", + "version": "1.10.2", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5" + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", - "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", "shasum": "" }, "require": { @@ -6907,7 +7059,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.x" + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" }, "funding": [ { @@ -6915,20 +7067,20 @@ "type": "tidelift" } ], - "time": "2020-06-29T13:22:24+00:00" + "time": "2020-11-13T09:40:50+00:00" }, { "name": "netresearch/jsonmapper", - "version": "v2.1.0", + "version": "v4.0.0", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "e0f1e33a71587aca81be5cffbb9746510e1fe04e" + "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/e0f1e33a71587aca81be5cffbb9746510e1fe04e", - "reference": "e0f1e33a71587aca81be5cffbb9746510e1fe04e", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", "shasum": "" }, "require": { @@ -6936,10 +7088,10 @@ "ext-pcre": "*", "ext-reflection": "*", "ext-spl": "*", - "php": ">=5.6" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "~4.8.35 || ~5.7 || ~6.4 || ~7.0", + "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", "squizlabs/php_codesniffer": "~3.5" }, "type": "library", @@ -6964,22 +7116,22 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/master" + "source": "https://github.com/cweiske/jsonmapper/tree/v4.0.0" }, - "time": "2020-04-16T18:48:43+00:00" + "time": "2020-12-01T19:48:11+00:00" }, { "name": "nikic/php-parser", - "version": "v4.10.2", + "version": "v4.10.5", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "658f1be311a230e0907f5dfe0213742aff0596de" + "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/658f1be311a230e0907f5dfe0213742aff0596de", - "reference": "658f1be311a230e0907f5dfe0213742aff0596de", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4432ba399e47c66624bc73c8c0f811e5c109576f", + "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f", "shasum": "" }, "require": { @@ -7020,9 +7172,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.5" }, - "time": "2020-09-26T10:30:38+00:00" + "time": "2021-05-03T19:11:20+00:00" }, { "name": "openlss/lib-array2xml", @@ -7139,16 +7291,16 @@ }, { "name": "phar-io/version", - "version": "3.0.2", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "c6bb6825def89e0a32220f88337f8ceaf1975fa0" + "reference": "bae7c545bef187884426f042434e561ab1ddb182" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/c6bb6825def89e0a32220f88337f8ceaf1975fa0", - "reference": "c6bb6825def89e0a32220f88337f8ceaf1975fa0", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", "shasum": "" }, "require": { @@ -7184,9 +7336,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/master" + "source": "https://github.com/phar-io/version/tree/3.1.0" }, - "time": "2020-06-27T14:39:04+00:00" + "time": "2021-02-23T14:00:09+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -7348,16 +7500,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.12.1", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d" + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/8ce87516be71aae9b956f81906aaf0338e0d8a2d", - "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", "shasum": "" }, "require": { @@ -7369,7 +7521,7 @@ }, "require-dev": { "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0 || ^9.0 <9.3" + "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { @@ -7409,22 +7561,22 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.12.1" + "source": "https://github.com/phpspec/prophecy/tree/1.13.0" }, - "time": "2020-09-29T09:10:42+00:00" + "time": "2021-03-17T13:42:18+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.3", + "version": "9.2.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6b20e2055f7c29b56cb3870b3de7cc463d7add41" + "reference": "f6293e1b30a2354e8428e004689671b83871edde" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6b20e2055f7c29b56cb3870b3de7cc463d7add41", - "reference": "6b20e2055f7c29b56cb3870b3de7cc463d7add41", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", + "reference": "f6293e1b30a2354e8428e004689671b83871edde", "shasum": "" }, "require": { @@ -7438,7 +7590,7 @@ "sebastian/code-unit-reverse-lookup": "^2.0.2", "sebastian/complexity": "^2.0", "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0", + "sebastian/lines-of-code": "^1.0.3", "sebastian/version": "^3.0.1", "theseer/tokenizer": "^1.2.0" }, @@ -7480,7 +7632,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.3" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" }, "funding": [ { @@ -7488,7 +7640,7 @@ "type": "github" } ], - "time": "2020-10-30T10:46:41+00:00" + "time": "2021-03-28T07:26:59+00:00" }, { "name": "phpunit/php-file-iterator", @@ -7733,16 +7885,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.4.3", + "version": "9.5.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "9fa359ff5ddaa5eb2be2bedb08a6a5787a5807ab" + "reference": "fb9b8333f14e3dce976a60ef6a7e05c7c7ed8bfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9fa359ff5ddaa5eb2be2bedb08a6a5787a5807ab", - "reference": "9fa359ff5ddaa5eb2be2bedb08a6a5787a5807ab", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fb9b8333f14e3dce976a60ef6a7e05c7c7ed8bfb", + "reference": "fb9b8333f14e3dce976a60ef6a7e05c7c7ed8bfb", "shasum": "" }, "require": { @@ -7758,7 +7910,7 @@ "phar-io/version": "^3.0.2", "php": ">=7.3", "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2", + "phpunit/php-code-coverage": "^9.2.3", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", @@ -7772,7 +7924,7 @@ "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3", + "sebastian/type": "^2.3.4", "sebastian/version": "^3.0.2" }, "require-dev": { @@ -7789,7 +7941,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.4-dev" + "dev-master": "9.5-dev" } }, "autoload": { @@ -7820,7 +7972,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.4.3" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.6" }, "funding": [ { @@ -7832,7 +7984,7 @@ "type": "github" } ], - "time": "2020-11-10T12:53:30+00:00" + "time": "2021-06-23T05:14:38+00:00" }, { "name": "roave/security-advisories", @@ -7840,18 +7992,19 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "e440567339d5fe93d9525e377c5e686b0b08bcca" + "reference": "ac0d045cdd1a9f1c87a0225a1dcda2bfb71be924" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/e440567339d5fe93d9525e377c5e686b0b08bcca", - "reference": "e440567339d5fe93d9525e377c5e686b0b08bcca", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/ac0d045cdd1a9f1c87a0225a1dcda2bfb71be924", + "reference": "ac0d045cdd1a9f1c87a0225a1dcda2bfb71be924", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", "adodb/adodb-php": "<5.20.12", "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", @@ -7861,25 +8014,29 @@ "bagisto/bagisto": "<0.1.5", "barrelstrength/sprout-base-email": "<1.2.7", "barrelstrength/sprout-forms": "<3.9", - "baserproject/basercms": ">=4,<=4.3.6|>=4.4,<4.4.1", - "bolt/bolt": "<3.7.1", + "baserproject/basercms": "<4.4.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", + "bolt/bolt": "<3.7.2", + "bolt/core": "<4.1.13", "brightlocal/phpwhois": "<=4.2.5", "buddypress/buddypress": "<5.1.2", "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", "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", "cartalyst/sentry": "<=2.1.6", - "centreon/centreon": "<18.10.8|>=19,<19.4.5", + "centreon/centreon": "<20.10.7", "cesnet/simplesamlphp-module-proxystatistics": "<3.1", "codeigniter/framework": "<=3.0.6", - "composer/composer": "<=1-alpha.11", + "composer/composer": "<1.10.22|>=2-alpha.1,<2.0.13", "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.6|= 4.10.0", + "contao/core-bundle": ">=4,<4.4.52|>=4.5,<4.9.16|>=4.10,<4.11.5|= 4.10.0", "contao/listing-bundle": ">=4,<4.4.8", + "croogo/croogo": "<3.0.7", "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", + "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", @@ -7888,124 +8045,163 @@ "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", + "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", "dolibarr/dolibarr": "<11.0.4", "dompdf/dompdf": ">=0.6,<0.6.2", - "drupal/core": ">=7,<7.73|>=8,<8.8.10|>=8.9,<8.9.6|>=9,<9.0.6", - "drupal/drupal": ">=7,<7.73|>=8,<8.8.10|>=8.9,<8.9.6|>=9,<9.0.6", + "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", + "dweeves/magmi": "<=0.7.24", "endroid/qr-code-bundle": "<3.4.2", "enshrined/svg-sanitize": "<0.13.1", "erusev/parsedown": "<1.7.2", "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-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", - "ezsystems/ezplatform-kernel": ">=1,<1.0.2.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-user": ">=1,<1.0.1", - "ezsystems/ezpublish-kernel": ">=5.3,<5.3.12.1|>=5.4,<5.4.14.2|>=6,<6.7.9.1|>=6.8,<6.13.6.3|>=7,<7.2.4.1|>=7.3,<7.3.2.1|>=7.5,<7.5.7.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/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", + "feehi/cms": "<=2.1.1", "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", "fossar/tcpdf-parser": "<6.2.22", + "francoisjacquet/rosariosis": "<6.5.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", "fuel/core": "<1.8.1", - "getgrav/grav": "<1.7-beta.8", + "getgrav/grav": "<=1.7.10", + "getkirby/cms": "<3.5.4", + "getkirby/panel": "<2.5.14", "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", "gree/jose": "<=2.2", "gregwar/rst": "<1.0.3", "guzzlehttp/guzzle": ">=4-rc.2,<4.2.4|>=5,<5.3.1|>=6,<6.2.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": ">=4,<4.0.99|>=4.1,<4.1.29|>=5.5,<=5.5.44|>=6,<6.18.34|>=7,<7.23.2", + "illuminate/database": "<6.20.26|>=7,<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", + "impresscms/impresscms": "<=1.4.2", + "intelliants/subrion": "<=4.2.1", "ivankristianto/phpwhois": "<=4.3", "james-heinrich/getid3": "<1.9.9", + "joomla/archive": "<1.1.10", "joomla/session": "<1.3.1", "jsmitty12/phpwhois": "<5.1", "kazist/phpwhois": "<=4.2.6", "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", - "laravel/framework": ">=4,<4.0.99|>=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.34|>=7,<7.23.2", + "laminas/laminas-http": "<2.14.2", + "laravel/framework": "<6.20.26|>=7,<8.40", "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", "league/commonmark": "<0.18.3", - "librenms/librenms": "<1.53", + "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", "livewire/livewire": ">2.2.4,<2.2.6", "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", - "mediawiki/core": ">=1.31,<1.31.9|>=1.32,<1.32.4|>=1.33,<1.33.3|>=1.34,<1.34.3|>=1.34.99,<1.35", + "mautic/core": "<3.3.2|= 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", "mittwald/typo3_forum": "<1.2.1", "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", "namshi/jose": "<2.2", + "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", "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", + "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.0.319,<1.0.467", - "october/cms": ">=1.0.319,<1.0.466", + "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/rain": ">=1.0.319,<1.0.468", + "october/rain": "<1.0.472|>=1.1,<1.1.2", "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.8|>=20,<20.0.4", + "openmage/magento-lts": "<=19.4.12|>=20,<=20.0.8", "orchid/platform": ">=9,<9.4.4", "oro/crm": ">=1.7,<1.7.4", "oro/platform": ">=1.7,<1.7.4", "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.4", + "pear/archive_tar": "<1.4.12", "personnummer/personnummer": "<3.0.2", + "phanan/koel": "<5.1.4", "phpfastcache/phpfastcache": ">=5,<5.0.13", - "phpmailer/phpmailer": "<6.1.6", + "phpmailer/phpmailer": "<6.5", "phpmussel/phpmussel": ">=1,<1.6", - "phpmyadmin/phpmyadmin": "<4.9.2", + "phpmyadmin/phpmyadmin": "<4.9.6|>=5,<5.0.3", "phpoffice/phpexcel": "<1.8.2", - "phpoffice/phpspreadsheet": "<1.8", + "phpoffice/phpspreadsheet": "<1.16", + "phpseclib/phpseclib": "<2.0.31|>=3,<3.0.7", "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.3", + "pimcore/pimcore": "<6.8.8", + "pocketmine/pocketmine-mp": "<3.15.4", + "pressbooks/pressbooks": "<5.18", "prestashop/autoupgrade": ">=4,<4.10.1", "prestashop/contactform": ">1.0.1,<4.3", "prestashop/gamification": "<2.3.2", + "prestashop/productcomments": ">=4,<4.2.1", + "prestashop/ps_emailsubscription": "<2.6.1", "prestashop/ps_facetedsearch": "<3.4.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", "pusher/pusher-php-server": "<2.2.1", + "pwweb/laravel-core": "<=0.3.6-beta", "rainlab/debugbar-plugin": "<3.1", + "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", "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.3.2", - "shopware/platform": "<=6.3.2", - "shopware/shopware": "<5.3.7", + "shopware/core": "<=6.3.5.2", + "shopware/platform": "<=6.3.5.2", + "shopware/production": "<=6.3.5.2", + "shopware/shopware": "<=5.6.9", "silverstripe/admin": ">=1.0.3,<1.0.4|>=1.1,<1.1.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.4.7|>=4.5,<4.5.4", - "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.1.2|>=3.2,<3.2.4", + "silverstripe/framework": "<4.7.4", + "silverstripe/graphql": "<=3.5|>=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", @@ -8017,13 +8213,14 @@ "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", "simplito/elliptic-php": "<1.0.6", "slim/slim": "<2.6", - "smarty/smarty": "<3.1.33", + "smarty/smarty": "<3.1.39", "socalnick/scn-social-auth": "<1.15.2", + "socialiteproviders/steam": "<1.1", "spoonity/tcpdf": "<6.2.22", "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", "ssddanbrown/bookstack": "<0.29.2", "stormpath/sdk": ">=0,<9.9.99", - "studio-42/elfinder": "<2.1.49", + "studio-42/elfinder": "<2.1.59", "sulu/sulu": "<1.6.34|>=2,<2.0.10|>=2.1,<2.1.1", "swiftmailer/swiftmailer": ">=4,<5.4.5", "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", @@ -8032,6 +8229,7 @@ "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", "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", "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", @@ -8041,44 +8239,54 @@ "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/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", "symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", "symfony/polyfill": ">=1,<1.10", "symfony/polyfill-php55": ">=1,<1.10", "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,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=4.4,<4.4.7|>=5,<5.0.7", + "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-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<2.8.37|>=3,<3.3.17|>=3.4,<3.4.7|>=4,<4.0.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,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", - "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", + "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,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.4.13|>=5,<5.1.5", + "symfony/symfony": ">=2,<3.4.49|>=4,<4.4.24|>=5,<5.2.9|>=5.3,<5.3.2", "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", "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", "t3g/svg-sanitizer": "<1.0.3", "tecnickcom/tcpdf": "<6.2.22", "thelia/backoffice-default-template": ">=2.1,<2.1.2", "thelia/thelia": ">=2.1-beta.1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", "titon/framework": ">=0,<9.9.99", + "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.30|>=9,<9.5.20|>=10,<10.4.6", - "typo3/cms-core": ">=8,<8.7.30|>=9,<9.5.20|>=10,<10.4.6", - "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5", - "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4", + "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", + "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-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", "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", - "typo3fluid/fluid": ">=2,<2.0.5|>=2.1,<2.1.4|>=2.2,<2.2.1|>=2.3,<2.3.5|>=2.4,<2.4.1|>=2.5,<2.5.5|>=2.6,<2.6.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", "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", "verot/class.upload.php": "<=1.0.3|>=2,<=2.0.4", + "vrana/adminer": "<4.7.9", "wallabag/tcpdf": "<6.2.22", + "wikimedia/parsoid": "<0.12.2", "willdurand/js-translation-bundle": "<2.1.1", + "wp-cli/wp-cli": "<2.5", + "yidashi/yii2cmf": "<=2", "yii2mod/yii2-cms": "<1.9.2", "yiisoft/yii": ">=1.1.14,<1.1.15", "yiisoft/yii2": "<2.0.38", @@ -8088,7 +8296,9 @@ "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", + "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", "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2", @@ -8106,14 +8316,15 @@ "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", - "zendframework/zendframework": "<2.5.1", + "zendframework/zendframework": "<=3", "zendframework/zendframework1": "<1.12.20", "zendframework/zendopenid": ">=2,<2.0.2", "zendframework/zendxml": ">=1,<1.0.1", "zetacomponents/mail": "<1.8.2", "zf-commons/zfc-user": "<1.2.2", "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", - "zfr/zfr-oauth2-server-module": "<0.1.2" + "zfr/zfr-oauth2-server-module": "<0.1.2", + "zoujingli/thinkadmin": "<6.0.22" }, "type": "metapackage", "notification-url": "https://packagist.org/downloads/", @@ -8147,7 +8358,7 @@ "type": "tidelift" } ], - "time": "2020-11-07T16:07:08+00:00" + "time": "2021-06-24T09:02:34+00:00" }, { "name": "sebastian/cli-parser", @@ -8655,16 +8866,16 @@ }, { "name": "sebastian/global-state", - "version": "5.0.2", + "version": "5.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" + "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", "shasum": "" }, "require": { @@ -8707,7 +8918,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" }, "funding": [ { @@ -8715,20 +8926,20 @@ "type": "github" } ], - "time": "2020-10-26T15:55:19+00:00" + "time": "2021-06-11T13:31:12+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.2", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "acf76492a65401babcf5283296fa510782783a7a" + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/acf76492a65401babcf5283296fa510782783a7a", - "reference": "acf76492a65401babcf5283296fa510782783a7a", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", "shasum": "" }, "require": { @@ -8764,7 +8975,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.2" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" }, "funding": [ { @@ -8772,7 +8983,7 @@ "type": "github" } ], - "time": "2020-10-26T17:03:56+00:00" + "time": "2020-11-28T06:42:11+00:00" }, { "name": "sebastian/object-enumerator", @@ -9006,16 +9217,16 @@ }, { "name": "sebastian/type", - "version": "2.3.1", + "version": "2.3.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" + "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", "shasum": "" }, "require": { @@ -9050,7 +9261,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.1" + "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" }, "funding": [ { @@ -9058,7 +9269,7 @@ "type": "github" } ], - "time": "2020-10-26T13:18:59+00:00" + "time": "2021-06-15T12:49:02+00:00" }, { "name": "sebastian/version", @@ -9115,16 +9326,16 @@ }, { "name": "symfony/browser-kit", - "version": "v4.4.16", + "version": "v4.4.25", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "99b640fd5d06877e3242ba0393b40a7877dfe534" + "reference": "729b1f0eca3ef18ea4e1a29b166145aff75d8fa1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/99b640fd5d06877e3242ba0393b40a7877dfe534", - "reference": "99b640fd5d06877e3242ba0393b40a7877dfe534", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/729b1f0eca3ef18ea4e1a29b166145aff75d8fa1", + "reference": "729b1f0eca3ef18ea4e1a29b166145aff75d8fa1", "shasum": "" }, "require": { @@ -9163,10 +9374,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony BrowserKit Component", + "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.16" + "source": "https://github.com/symfony/browser-kit/tree/v4.4.25" }, "funding": [ { @@ -9182,20 +9393,20 @@ "type": "tidelift" } ], - "time": "2020-10-24T11:50:19+00:00" + "time": "2021-05-26T17:39:37+00:00" }, { "name": "symfony/css-selector", - "version": "v5.2.0-RC1", + "version": "v5.3.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "b8d8eb06b0942e84a69e7acebc3e9c1e6e6e7256" + "reference": "fcd0b29a7a0b1bb5bfbedc6231583d77fea04814" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/b8d8eb06b0942e84a69e7acebc3e9c1e6e6e7256", - "reference": "b8d8eb06b0942e84a69e7acebc3e9c1e6e6e7256", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/fcd0b29a7a0b1bb5bfbedc6231583d77fea04814", + "reference": "fcd0b29a7a0b1bb5bfbedc6231583d77fea04814", "shasum": "" }, "require": { @@ -9228,10 +9439,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony CssSelector Component", + "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.2.0-RC1" + "source": "https://github.com/symfony/css-selector/tree/v5.3.0" }, "funding": [ { @@ -9247,20 +9458,20 @@ "type": "tidelift" } ], - "time": "2020-10-28T21:31:18+00:00" + "time": "2021-05-26T17:40:38+00:00" }, { "name": "symfony/debug", - "version": "v4.4.16", + "version": "v4.4.25", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "c87adf3fc1cd0bf4758316a3a150d50a8f957ef4" + "reference": "a8d2d5c94438548bff9f998ca874e202bb29d07f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/c87adf3fc1cd0bf4758316a3a150d50a8f957ef4", - "reference": "c87adf3fc1cd0bf4758316a3a150d50a8f957ef4", + "url": "https://api.github.com/repos/symfony/debug/zipball/a8d2d5c94438548bff9f998ca874e202bb29d07f", + "reference": "a8d2d5c94438548bff9f998ca874e202bb29d07f", "shasum": "" }, "require": { @@ -9297,10 +9508,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Debug Component", + "description": "Provides tools to ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/debug/tree/v4.4.16" + "source": "https://github.com/symfony/debug/tree/v4.4.25" }, "funding": [ { @@ -9316,20 +9527,20 @@ "type": "tidelift" } ], - "time": "2020-10-24T11:50:19+00:00" + "time": "2021-05-26T17:39:37+00:00" }, { "name": "symfony/dom-crawler", - "version": "v4.4.16", + "version": "v4.4.25", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "30ad9ac96a01913195bf0328d48e29d54fa53e6e" + "reference": "41d15bb6d6b95d2be763c514bb2494215d9c5eef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/30ad9ac96a01913195bf0328d48e29d54fa53e6e", - "reference": "30ad9ac96a01913195bf0328d48e29d54fa53e6e", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/41d15bb6d6b95d2be763c514bb2494215d9c5eef", + "reference": "41d15bb6d6b95d2be763c514bb2494215d9c5eef", "shasum": "" }, "require": { @@ -9370,10 +9581,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony DomCrawler Component", + "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v4.4.16" + "source": "https://github.com/symfony/dom-crawler/tree/v4.4.25" }, "funding": [ { @@ -9389,20 +9600,20 @@ "type": "tidelift" } ], - "time": "2020-10-24T11:50:19+00:00" + "time": "2021-05-26T11:20:16+00:00" }, { "name": "symfony/proxy-manager-bridge", - "version": "v5.2.0-RC1", + "version": "v5.2.1", "source": { "type": "git", "url": "https://github.com/symfony/proxy-manager-bridge.git", - "reference": "a200b07f24a3b473dbe0d38bc8bff87414866801" + "reference": "fba051ee1cb00d1d40672ee2da842ba23c572576" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/a200b07f24a3b473dbe0d38bc8bff87414866801", - "reference": "a200b07f24a3b473dbe0d38bc8bff87414866801", + "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/fba051ee1cb00d1d40672ee2da842ba23c572576", + "reference": "fba051ee1cb00d1d40672ee2da842ba23c572576", "shasum": "" }, "require": { @@ -9443,7 +9654,7 @@ "description": "Symfony ProxyManager Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/proxy-manager-bridge/tree/v5.2.0-RC1" + "source": "https://github.com/symfony/proxy-manager-bridge/tree/v5.2.1" }, "funding": [ { @@ -9459,24 +9670,25 @@ "type": "tidelift" } ], - "time": "2020-11-07T13:01:26+00:00" + "time": "2020-11-12T22:25:33+00:00" }, { "name": "symfony/translation", - "version": "v5.2.0-RC1", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "331974aae89a1337fdde974339e822fb734a650e" + "reference": "7e2603bcc598e14804c4d2359d8dc4ee3c40391b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/331974aae89a1337fdde974339e822fb734a650e", - "reference": "331974aae89a1337fdde974339e822fb734a650e", + "url": "https://api.github.com/repos/symfony/translation/zipball/7e2603bcc598e14804c4d2359d8dc4ee3c40391b", + "reference": "7e2603bcc598e14804c4d2359d8dc4ee3c40391b", "shasum": "" }, "require": { "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php80": "^1.15", "symfony/translation-contracts": "^2.3" @@ -9489,7 +9701,7 @@ "symfony/yaml": "<4.4" }, "provide": { - "symfony/translation-implementation": "2.0" + "symfony/translation-implementation": "2.3" }, "require-dev": { "psr/log": "~1.0", @@ -9499,6 +9711,7 @@ "symfony/finder": "^4.4|^5.0", "symfony/http-kernel": "^5.0", "symfony/intl": "^4.4|^5.0", + "symfony/polyfill-intl-icu": "^1.21", "symfony/service-contracts": "^1.1.2|^2", "symfony/yaml": "^4.4|^5.0" }, @@ -9533,10 +9746,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Translation Component", + "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.2.0-RC1" + "source": "https://github.com/symfony/translation/tree/v5.3.2" }, "funding": [ { @@ -9552,7 +9765,7 @@ "type": "tidelift" } ], - "time": "2020-10-28T21:46:03+00:00" + "time": "2021-06-06T09:51:56+00:00" }, { "name": "theseer/tokenizer", @@ -9606,24 +9819,24 @@ }, { "name": "vimeo/psalm", - "version": "4.1.1", + "version": "4.8.1", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "16bfbd9224698bd738c665f33039fade2a1a3977" + "reference": "f73f2299dbc59a3e6c4d66cff4605176e728ee69" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/16bfbd9224698bd738c665f33039fade2a1a3977", - "reference": "16bfbd9224698bd738c665f33039fade2a1a3977", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/f73f2299dbc59a3e6c4d66cff4605176e728ee69", + "reference": "f73f2299dbc59a3e6c4d66cff4605176e728ee69", "shasum": "" }, "require": { - "amphp/amp": "^2.1", + "amphp/amp": "^2.4.2", "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", + "composer/xdebug-handler": "^1.1 || ^2.0", "dnoegel/php-xdg-base-dir": "^0.1.1", "ext-dom": "*", "ext-json": "*", @@ -9632,9 +9845,9 @@ "ext-simplexml": "*", "ext-tokenizer": "*", "felixfbecker/advanced-json-rpc": "^3.0.3", - "felixfbecker/language-server-protocol": "^1.4", - "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0", - "nikic/php-parser": "^4.10.1", + "felixfbecker/language-server-protocol": "^1.5", + "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "nikic/php-parser": "^4.10.5", "openlss/lib-array2xml": "^1.0", "php": "^7.1|^8", "sebastian/diff": "^3.0 || ^4.0", @@ -9645,19 +9858,19 @@ "psalm/psalm": "self.version" }, "require-dev": { - "amphp/amp": "^2.4.2", "bamarni/composer-bin-plugin": "^1.2", - "brianium/paratest": "^4.0.0", + "brianium/paratest": "^4.0||^6.0", "ext-curl": "*", - "php": "^7.3|^8", + "php-parallel-lint/php-parallel-lint": "^1.2", "phpdocumentor/reflection-docblock": "^5", - "phpmyadmin/sql-parser": "5.1.0", + "phpmyadmin/sql-parser": "5.1.0||dev-master", "phpspec/prophecy": ">=1.9.0", "phpunit/phpunit": "^9.0", - "psalm/plugin-phpunit": "^0.13", - "slevomat/coding-standard": "^5.0", + "psalm/plugin-phpunit": "^0.16", + "slevomat/coding-standard": "^7.0", "squizlabs/php_codesniffer": "^3.5", - "symfony/process": "^4.3", + "symfony/process": "^4.3 || ^5.0", + "weirdan/phpunit-appveyor-reporter": "^1.0.0", "weirdan/prophecy-shim": "^1.0 || ^2.0" }, "suggest": { @@ -9705,36 +9918,41 @@ ], "support": { "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm/tree/4.1.1" + "source": "https://github.com/vimeo/psalm/tree/4.8.1" }, - "time": "2020-11-02T05:54:12+00:00" + "time": "2021-06-20T23:03:20+00:00" }, { "name": "webmozart/assert", - "version": "1.9.1", + "version": "1.10.0", "source": { "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", + "php": "^7.2 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" + "vimeo/psalm": "<4.6.1 || 4.6.2" }, "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" + "phpunit/phpunit": "^8.5.13" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, "autoload": { "psr-4": { "Webmozart\\Assert\\": "src/" @@ -9757,10 +9975,10 @@ "validate" ], "support": { - "issues": "https://github.com/webmozart/assert/issues", - "source": "https://github.com/webmozart/assert/tree/master" + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" }, - "time": "2020-07-08T17:02:28+00:00" + "time": "2021-03-09T10:59:23+00:00" }, { "name": "webmozart/path-util", diff --git a/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php b/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php index db71e85f0..52ec54166 100644 --- a/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php +++ b/src/Shared/Infrastructure/Doctrine/DoctrineEntityManagerFactory.php @@ -5,7 +5,6 @@ namespace CodelyTv\Shared\Infrastructure\Doctrine; use CodelyTv\Shared\Infrastructure\Doctrine\Dbal\DbalCustomTypesRegistrar; -use Doctrine\Common\Cache\ArrayCache; use Doctrine\DBAL\DriverManager; use Doctrine\DBAL\Schema\MySqlSchemaManager; use Doctrine\ORM\Configuration; @@ -13,6 +12,8 @@ use Doctrine\ORM\Mapping\Driver\SimplifiedXmlDriver; use Doctrine\ORM\Tools\Setup; use RuntimeException; +use Symfony\Component\Cache\Adapter\ArrayAdapter; +use Symfony\Component\Cache\DoctrineProvider; use function Lambdish\Phunctional\dissoc; final class DoctrineEntityManagerFactory @@ -69,7 +70,7 @@ private static function ensureSchemaFileExists(string $schemaFile): void private static function createConfiguration(array $contextPrefixes, bool $isDevMode): Configuration { - $config = Setup::createConfiguration($isDevMode, null, new ArrayCache()); + $config = Setup::createConfiguration($isDevMode, null, new DoctrineProvider(new ArrayAdapter())); $config->setMetadataDriverImpl(new SimplifiedXmlDriver(array_merge(self::$sharedPrefixes, $contextPrefixes))); 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 067/106] 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 068/106] 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 069/106] 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 070/106] 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 071/106] 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 072/106] 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 073/106] 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 074/106] 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 075/106] 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 076/106] 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 077/106] 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 078/106] 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 079/106] 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 080/106] 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 081/106] 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 082/106] =?UTF-8?q?Correcci=C3=B3n=20mensaje=20de=20error?= =?UTF-8?q?=20en=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 083/106] 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 084/106] 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 085/106] 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 086/106] 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 087/106] 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 088/106] 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 089/106] 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 090/106] 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 091/106] 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 092/106] 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 093/106] 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 094/106] 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 095/106] 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 096/106] 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 097/106] 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 098/106] 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 099/106] 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 100/106] 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 101/106] 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 102/106] 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 103/106] 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 104/106] 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 105/106] 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 106/106] 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