From 8329e477f32c98b00310e0122ef6eaf0f29f0138 Mon Sep 17 00:00:00 2001 From: Alex Patterson Date: Wed, 31 Mar 2021 21:30:57 +0000 Subject: [PATCH 1/9] - Range of new Handler factories for existing Monolog classes ErrorLogHandler, PsrHandler and SyslogHandler - New factory classes for MemoryProcessors - FactoryFormatterProviderTrait and FactoryLoggerProvidedTrait - New unit test coverage for ErrorLogHandler --- README.md | 20 +++++- config/module.config.php | 14 +++- src/Factory/FactoryFormatterProviderTrait.php | 57 +++++++++++++++ src/Factory/FactoryLoggerProviderTrait.php | 72 +++++++++++++++++++ .../Handler/ErrorLogHandlerFactory.php | 42 +++++++++++ src/Factory/Handler/PsrHandlerFactory.php | 58 +++++++++++++++ src/Factory/Handler/SyslogHandlerFactory.php | 50 +++++++++++++ .../MemoryPeakUsageProcessorFactory.php | 44 ++++++++++++ .../PsrLogMessageProcessorFactory.php | 2 +- src/Factory/Processor/TagProcessorFactory.php | 39 ++++++++++ src/Factory/Processor/UidProcessorFactory.php | 35 +++++++++ .../Handler/ErrorLogHandlerFactoryTest.php | 43 +++++++++++ test/unit/Factory/LoggerFactoryTest.php | 4 +- 13 files changed, 474 insertions(+), 6 deletions(-) create mode 100755 src/Factory/FactoryFormatterProviderTrait.php create mode 100755 src/Factory/FactoryLoggerProviderTrait.php create mode 100755 src/Factory/Handler/ErrorLogHandlerFactory.php create mode 100755 src/Factory/Handler/PsrHandlerFactory.php create mode 100755 src/Factory/Handler/SyslogHandlerFactory.php create mode 100755 src/Factory/Processor/MemoryPeakUsageProcessorFactory.php create mode 100755 src/Factory/Processor/TagProcessorFactory.php create mode 100755 src/Factory/Processor/UidProcessorFactory.php create mode 100755 test/unit/Factory/Handler/ErrorLogHandlerFactoryTest.php diff --git a/README.md b/README.md index b04cf08..30881c7 100755 --- a/README.md +++ b/README.md @@ -11,4 +11,22 @@ Monolog integration module for Laminas Applications Installation via [Composer](https://getcomposer.org). - require alex-patterson-webdev/laminas-monolog ^1 + require alex-patterson-webdev/laminas-monolog ^0.1 + +Register the modules services with the Laminas Service Manager by adding the module namespace to your applications `config/modules.config.php` file. + + // config/modules.config.php + return [ + // ... + 'Arp\\LaminasMonolog', + // ... + ]; + +## Loggers + +The easiest way to create a new Monolog logger is via configuration options. The `Arp\\Monolog` provides factory classes to allow +for _most_ of the default Monolog features to be optionally included, without having to write any code. + + + + diff --git a/config/module.config.php b/config/module.config.php index 690ac0f..b33dd12 100755 --- a/config/module.config.php +++ b/config/module.config.php @@ -11,8 +11,10 @@ use Arp\LaminasMonolog\Factory\Handler\NullHandlerFactory; use Arp\LaminasMonolog\Factory\Handler\StreamHandlerFactory; use Arp\LaminasMonolog\Factory\Processor\GitProcessorFactory; +use Arp\LaminasMonolog\Factory\Processor\MemoryPeakUsageProcessorFactory; use Arp\LaminasMonolog\Factory\Processor\MemoryUsageProcessorFactory; use Arp\LaminasMonolog\Factory\Processor\PsrLogMessageProcessorFactory; +use Arp\LaminasMonolog\Factory\Processor\TagProcessorFactory; use Arp\LaminasMonolog\Factory\Processor\WebProcessorFactory; use Laminas\ServiceManager\Factory\InvokableFactory; use Monolog\Formatter\HtmlFormatter; @@ -23,8 +25,12 @@ use Monolog\Handler\StreamHandler; use Monolog\Processor\GitProcessor; use Monolog\Processor\HostnameProcessor; +use Monolog\Processor\MemoryPeakUsageProcessor; use Monolog\Processor\MemoryUsageProcessor; +use Monolog\Processor\ProcessIdProcessor; use Monolog\Processor\PsrLogMessageProcessor; +use Monolog\Processor\TagProcessor; +use Monolog\Processor\UidProcessor; use Monolog\Processor\WebProcessor; return [ @@ -40,11 +46,15 @@ NoopHandler::class => NoopHandlerFactory::class, // Processors - MemoryUsageProcessor::class => MemoryUsageProcessorFactory::class, - PsrLogMessageProcessor::class => PsrLogMessageProcessorFactory::class, GitProcessor::class => GitProcessorFactory::class, HostnameProcessor::class => InvokableFactory::class, + MemoryPeakUsageProcessor::class => MemoryPeakUsageProcessorFactory::class, + MemoryUsageProcessor::class => MemoryUsageProcessorFactory::class, + PsrLogMessageProcessor::class => PsrLogMessageProcessorFactory::class, WebProcessor::class => WebProcessorFactory::class, + ProcessIdProcessor::class => InvokableFactory::class, + TagProcessor::class => TagProcessorFactory::class, + UidProcessor::class => UidProcessorFactory::class, // Formatter LineFormatter::class => LineFormatterFactory::class, diff --git a/src/Factory/FactoryFormatterProviderTrait.php b/src/Factory/FactoryFormatterProviderTrait.php new file mode 100755 index 0000000..5f13570 --- /dev/null +++ b/src/Factory/FactoryFormatterProviderTrait.php @@ -0,0 +1,57 @@ + + * @package Arp\LaminasMonolog\Factory + */ +trait FactoryFormatterProviderTrait +{ + /** + * @param ContainerInterface $container + * @param string|FormatterInterface $formatter + * @param string $serviceName + * + * @return FormatterInterface + * + * @throws ServiceNotCreatedException + */ + private function getFormatter( + ContainerInterface $container, + $formatter, + string $serviceName + ): FormatterInterface { + if (is_string($formatter)) { + if (!$container->has($formatter)) { + throw new ServiceNotFoundException( + sprintf('The formatter \'%s\' could not be found for service \'%s\'', $formatter, $serviceName) + ); + } + + $formatter = $container->get($formatter); + } + + if (!$formatter instanceof FormatterInterface) { + throw new ServiceNotCreatedException( + sprintf( + 'The resolved formatter must be an object of type \'%s\'; \'%s\' provided for service \'%s\'', + FormatterInterface::class, + is_object($formatter) ? get_class($formatter) : gettype($formatter), + $serviceName + ) + ); + } + + return $formatter; + } +} diff --git a/src/Factory/FactoryLoggerProviderTrait.php b/src/Factory/FactoryLoggerProviderTrait.php new file mode 100755 index 0000000..2f852a4 --- /dev/null +++ b/src/Factory/FactoryLoggerProviderTrait.php @@ -0,0 +1,72 @@ + + * @package Arp\LaminasMonolog\Factory + */ +trait FactoryLoggerProviderTrait +{ + /** + * @var string + */ + protected string $loggerService = Logger::class; + + /** + * @param ServiceLocatorInterface $container + * @param LoggerInterface|string|array $logger + * @param string $serviceName + * + * @return LoggerInterface + * + * @throws ServiceNotCreatedException + */ + public function getLogger(ServiceLocatorInterface $container, $logger, string $serviceName): LoggerInterface + { + if (is_string($logger)) { + if (!$container->has($logger)) { + throw new ServiceNotFoundException( + sprintf('The logger \'%s\' could not be found for service \'%s\'', $logger, $serviceName) + ); + } + + $logger = $container->get($logger); + } + + if (is_array($logger)) { + $logger = $container->build($this->loggerService, $logger); + } + + if (!$logger instanceof LoggerInterface) { + throw new ServiceNotCreatedException( + sprintf( + 'The resolved logger must be an object of type \'%s\'; \'%s\' provided for service \'%s\'', + LoggerInterface::class, + is_object($logger) ? get_class($logger) : gettype($logger), + $serviceName + ) + ); + } + + return $logger; + } + + /** + * @param string $loggerService + */ + public function setLoggerService(string $loggerService): void + { + $this->loggerService = $loggerService; + } +} diff --git a/src/Factory/Handler/ErrorLogHandlerFactory.php b/src/Factory/Handler/ErrorLogHandlerFactory.php new file mode 100755 index 0000000..cb71a64 --- /dev/null +++ b/src/Factory/Handler/ErrorLogHandlerFactory.php @@ -0,0 +1,42 @@ + + * @package Arp\LaminasMonolog\Factory\Handler + */ +final class ErrorLogHandlerFactory extends AbstractFactory +{ + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return ErrorLogHandler + * + * @throws ServiceNotCreatedException + */ + public function __invoke( + ContainerInterface $container, + string $requestedName, + array $options = null + ): ErrorLogHandler { + $options = $options ?? $this->getServiceOptions($container, $requestedName); + + return new ErrorLogHandler( + isset($options['message_type']) ? (int)$options['message_type'] : ErrorLogHandler::OPERATING_SYSTEM, + isset($options['level']) ? (int)$options['level'] : Logger::DEBUG, + isset($options['bubble']) ? (bool)$options['bubble'] : true, + isset($options['expand_new_lines']) ? (bool)$options['expand_new_lines'] : false + ); + } +} diff --git a/src/Factory/Handler/PsrHandlerFactory.php b/src/Factory/Handler/PsrHandlerFactory.php new file mode 100755 index 0000000..516451f --- /dev/null +++ b/src/Factory/Handler/PsrHandlerFactory.php @@ -0,0 +1,58 @@ + + * @package Arp\LaminasMonolog\Factory\Handler + */ +final class PsrHandlerFactory extends AbstractFactory +{ + use FactoryLoggerProviderTrait; + use FactoryFormatterProviderTrait; + + /** + * @param ContainerInterface&ServiceLocatorInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return PsrHandler + * + * @throws ServiceNotCreatedException + */ + public function __invoke(ContainerInterface $container, string $requestedName, array $options = null): PsrHandler + { + $options = $options ?? $this->getServiceOptions($container, $requestedName); + + if (empty($options['logger'])) { + throw new ServiceNotCreatedException( + sprintf('The required \'logger\' configuration option is missing for service \'%s\'', $requestedName) + ); + } + + $handler = new PsrHandler( + $this->getLogger($container, $options['logger'], $requestedName), + isset($options['level']) ? (int)$options['level'] : Logger::DEBUG, + isset($options['bubble']) ? (bool)$options['bubble'] : true + ); + + if (!empty($options['formatter'])) { + $handler->setFormatter( + $this->getFormatter($container, $options['formatter'], $requestedName) + ); + } + + return $handler; + } +} diff --git a/src/Factory/Handler/SyslogHandlerFactory.php b/src/Factory/Handler/SyslogHandlerFactory.php new file mode 100755 index 0000000..5e49313 --- /dev/null +++ b/src/Factory/Handler/SyslogHandlerFactory.php @@ -0,0 +1,50 @@ + + * @package Arp\LaminasMonolog\Factory\Handler + */ +final class SyslogHandlerFactory extends AbstractFactory +{ + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return SyslogHandler + * + * @throws ServiceNotCreatedException + */ + public function __invoke( + ContainerInterface $container, + string $requestedName, + array $options = null + ): SyslogHandler { + $options = $options ?? $this->getServiceOptions($container, $requestedName); + + $ident = $options['ident'] ?? ''; + if (empty($ident)) { + throw new ServiceNotCreatedException( + sprintf('The required \'ident\' configuration option is missing for service \'%s\'', $requestedName) + ); + } + + return new SyslogHandler( + $ident, + $options['facility'] ?? LOG_USER, + $options['level'] ?? Logger::DEBUG, + isset($options['bubble']) ? (bool)$options['bubble'] : true, + $options['logopts'] ?? LOG_PID + ); + } +} diff --git a/src/Factory/Processor/MemoryPeakUsageProcessorFactory.php b/src/Factory/Processor/MemoryPeakUsageProcessorFactory.php new file mode 100755 index 0000000..275e8b9 --- /dev/null +++ b/src/Factory/Processor/MemoryPeakUsageProcessorFactory.php @@ -0,0 +1,44 @@ + + * @package Arp\LaminasMonolog\Factory\Processor + */ +final class MemoryPeakUsageProcessorFactory extends AbstractFactory +{ + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return MemoryPeakUsageProcessor + * + * @throws ServiceNotCreatedException + */ + public function __invoke( + ContainerInterface $container, + string $requestedName, + array $options = null + ): MemoryPeakUsageProcessor { + $options = $options ?? $this->getServiceOptions($container, $requestedName); + + $realUsage = isset($options['real_usage']) + ? (bool)$options['real_usage'] + : true; + + $useFormatting = isset($options['use_formatting']) + ? (bool)$options['use_formatting'] + : true; + + return new MemoryPeakUsageProcessor($realUsage, $useFormatting); + } +} diff --git a/src/Factory/Processor/PsrLogMessageProcessorFactory.php b/src/Factory/Processor/PsrLogMessageProcessorFactory.php index 7b0e57b..e5587b9 100755 --- a/src/Factory/Processor/PsrLogMessageProcessorFactory.php +++ b/src/Factory/Processor/PsrLogMessageProcessorFactory.php @@ -32,7 +32,7 @@ public function __invoke( $options = $options ?? $this->getServiceOptions($container, $requestedName); return new PsrLogMessageProcessor( - is_string($options['date_format']) + (isset($options['date_format']) && is_string($options['date_format'])) ? $options['date_format'] : null, isset($options['remove_used_context_fields']) diff --git a/src/Factory/Processor/TagProcessorFactory.php b/src/Factory/Processor/TagProcessorFactory.php new file mode 100755 index 0000000..6dfc4f3 --- /dev/null +++ b/src/Factory/Processor/TagProcessorFactory.php @@ -0,0 +1,39 @@ + + * @package Arp\LaminasMonolog\Factory\Processor + */ +final class TagProcessorFactory extends AbstractFactory +{ + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return TagProcessor + * + * @throws ServiceNotCreatedException + */ + public function __invoke(ContainerInterface $container, string $requestedName, array $options = null): TagProcessor + { + $options = $options ?? $this->getServiceOptions($container, $requestedName); + + if (!isset($options['tags']) || !is_array($options['tags'])) { + throw new ServiceNotCreatedException( + sprintf('The required \'tags\' configuration option is missing for service \'%s\'', $requestedName) + ); + } + + return new TagProcessor($options['tags']); + } +} diff --git a/src/Factory/Processor/UidProcessorFactory.php b/src/Factory/Processor/UidProcessorFactory.php new file mode 100755 index 0000000..f6753ed --- /dev/null +++ b/src/Factory/Processor/UidProcessorFactory.php @@ -0,0 +1,35 @@ + + * @package Arp\LaminasMonolog\Factory\Processor + */ +final class UidProcessorFactory extends AbstractFactory +{ + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return UidProcessor + * + * @throws ServiceNotCreatedException + */ + public function __invoke(ContainerInterface $container, string $requestedName, array $options = null): UidProcessor + { + $options = $options ?? $this->getServiceOptions($container, $requestedName); + + return new UidProcessor( + isset($options['length']) ? (int)$options['length'] : 7 + ); + } +} diff --git a/test/unit/Factory/Handler/ErrorLogHandlerFactoryTest.php b/test/unit/Factory/Handler/ErrorLogHandlerFactoryTest.php new file mode 100755 index 0000000..3bc2956 --- /dev/null +++ b/test/unit/Factory/Handler/ErrorLogHandlerFactoryTest.php @@ -0,0 +1,43 @@ + + * @package ArpTest\LaminasMonolog\Factory\Handler + */ +final class ErrorLogHandlerFactoryTest extends TestCase +{ + /** + * @var ContainerInterface&MockObject + */ + private $container; + + /** + * Prepare the test case dependencies + */ + public function setUp(): void + { + $this->container = $this->createMock(ContainerInterface::class); + } + + /** + * Assert that the factory implements FactoryInterface + */ + public function testImplementsFactoryInterface(): void + { + $factory = new ErrorLogHandlerFactory(); + + $this->assertInstanceOf(FactoryInterface::class, $factory); + } +} diff --git a/test/unit/Factory/LoggerFactoryTest.php b/test/unit/Factory/LoggerFactoryTest.php index 0ebb32a..7dbb0ec 100755 --- a/test/unit/Factory/LoggerFactoryTest.php +++ b/test/unit/Factory/LoggerFactoryTest.php @@ -47,7 +47,7 @@ public function testImplementsFactoryInterface(): void } /** - * Assert that a ServiceNotCreatedException is thrown from invoke() if a handler is invalid + * Assert that a ServiceNotCreatedException is thrown from invoke() if a Handler is invalid */ public function testInvokeWillThrowServiceNotCreatedExceptionIfProvidingInvalidHandlerConfiguration(): void { @@ -64,7 +64,7 @@ public function testInvokeWillThrowServiceNotCreatedExceptionIfProvidingInvalidH $this->expectException(ServiceNotCreatedException::class); $this->expectExceptionMessage( sprintf( - 'The log handler \'%s\' must be an object of type \'%s\'; ' + 'The log Handler \'%s\' must be an object of type \'%s\'; ' . '\'%s\' provided for service \'%s\'', 'object', HandlerInterface::class, From ea52f778d84e23d66d5577ac8edcc493402382c3 Mon Sep 17 00:00:00 2001 From: Alex Patterson Date: Wed, 31 Mar 2021 21:36:30 +0000 Subject: [PATCH 2/9] Correct exception message test and updated trait comment --- src/Factory/FactoryLoggerProviderTrait.php | 6 +++--- test/unit/Factory/LoggerFactoryTest.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Factory/FactoryLoggerProviderTrait.php b/src/Factory/FactoryLoggerProviderTrait.php index 2f852a4..fa7262c 100755 --- a/src/Factory/FactoryLoggerProviderTrait.php +++ b/src/Factory/FactoryLoggerProviderTrait.php @@ -24,9 +24,9 @@ trait FactoryLoggerProviderTrait protected string $loggerService = Logger::class; /** - * @param ServiceLocatorInterface $container - * @param LoggerInterface|string|array $logger - * @param string $serviceName + * @param ServiceLocatorInterface $container + * @param LoggerInterface|string|array $logger + * @param string $serviceName * * @return LoggerInterface * diff --git a/test/unit/Factory/LoggerFactoryTest.php b/test/unit/Factory/LoggerFactoryTest.php index 7dbb0ec..a2e5268 100755 --- a/test/unit/Factory/LoggerFactoryTest.php +++ b/test/unit/Factory/LoggerFactoryTest.php @@ -64,7 +64,7 @@ public function testInvokeWillThrowServiceNotCreatedExceptionIfProvidingInvalidH $this->expectException(ServiceNotCreatedException::class); $this->expectExceptionMessage( sprintf( - 'The log Handler \'%s\' must be an object of type \'%s\'; ' + 'The log handler \'%s\' must be an object of type \'%s\'; ' . '\'%s\' provided for service \'%s\'', 'object', HandlerInterface::class, From 2e182159a889b75f13c01eeb950056fc45e494df Mon Sep 17 00:00:00 2001 From: Alex Patterson Date: Sun, 4 Apr 2021 21:01:38 +0000 Subject: [PATCH 3/9] Hard code the creation of a NullLogger as a fallback replacement to either invalid or missing logger configuration --- src/Factory/FactoryLoggerProviderTrait.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Factory/FactoryLoggerProviderTrait.php b/src/Factory/FactoryLoggerProviderTrait.php index fa7262c..350818c 100755 --- a/src/Factory/FactoryLoggerProviderTrait.php +++ b/src/Factory/FactoryLoggerProviderTrait.php @@ -9,6 +9,7 @@ use Laminas\ServiceManager\ServiceLocatorInterface; use Monolog\Logger; use Psr\Log\LoggerInterface; +use Psr\Log\NullLogger; /** * Provides service factories the ability to resolve loggers from the container @@ -48,6 +49,10 @@ public function getLogger(ServiceLocatorInterface $container, $logger, string $s $logger = $container->build($this->loggerService, $logger); } + if (null === $logger) { + $logger = new NullLogger(); + } + if (!$logger instanceof LoggerInterface) { throw new ServiceNotCreatedException( sprintf( From b21824dae0ca8be63a34ba07a6a5e1758af5fb22 Mon Sep 17 00:00:00 2001 From: Alex Patterson Date: Sun, 20 Mar 2022 03:08:02 +0000 Subject: [PATCH 4/9] Update projects configuration files for phpstan, composer, phpcs and php cs fixer --- .gitignore | 3 +- .php_cs.dist => .php-cs-fixer.dist | 0 composer.json | 18 +- composer.lock | 1247 ++++++++++++++-------------- config/module.config.php | 1 + phpcs.xml | 18 +- phpstan.neon | 5 + 7 files changed, 653 insertions(+), 639 deletions(-) rename .php_cs.dist => .php-cs-fixer.dist (100%) create mode 100755 phpstan.neon diff --git a/.gitignore b/.gitignore index d21ba1d..c186018 100755 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,6 @@ vendor/ .idea/ composer.phar .phpunit.result.cache -test/coverage/clover.xml +test/coverage/ .php_cs.cache +.php-cs-fixer.cache diff --git a/.php_cs.dist b/.php-cs-fixer.dist similarity index 100% rename from .php_cs.dist rename to .php-cs-fixer.dist diff --git a/composer.json b/composer.json index d2f0dbb..34ff1ed 100755 --- a/composer.json +++ b/composer.json @@ -12,14 +12,15 @@ ], "require" : { "php": ">=7.4 || >=8.0", - "alex-patterson-webdev/laminas-factory" : "dev-feature/3.0.0", + "alex-patterson-webdev/laminas-factory" : "^3.0.0", "monolog/monolog" : "^2.2" }, "require-dev" : { + "phpspec/prophecy": "^1.15.0", "phpunit/phpunit": "^9.5", - "squizlabs/php_codesniffer": "^3.5", - "phpstan/phpstan": ">=0.12", - "friendsofphp/php-cs-fixer": "^2.18" + "squizlabs/php_codesniffer": "^3.6", + "phpstan/phpstan": "^1.4.8", + "friendsofphp/php-cs-fixer": "^3.6.0" }, "autoload": { "psr-4": { @@ -42,14 +43,13 @@ "@arp:check", "@arp:lint", "@arp:fix", - "@arp:analyse-max", + "@arp:analyse", "@arp:unit-test" ], "arp:check": "php vendor/bin/phpcs -s --standard=phpcs.xml --colors src/ test/", - "arp:lint": "php vendor/bin/php-cs-fixer fix --dry-run --config=.php_cs.dist", - "arp:fix": "php vendor/bin/php-cs-fixer fix --config=.php_cs.dist", - "arp:analyse": "php vendor/bin/phpstan analyse src/ test/ --level=7", - "arp:analyse-max": "php vendor/bin/phpstan analyse src/ test/ --level=8", + "arp:lint": "php vendor/bin/php-cs-fixer fix --dry-run --verbose --config=.php-cs-fixer.dist", + "arp:fix": "php vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist", + "arp:analyse": "php vendor/bin/phpstan analyse -c phpstan.neon --level=7", "arp:unit-test": "php vendor/bin/phpunit", "arp:unit-test-with-coverage": [ "@putenv XDEBUG_MODE=coverage", diff --git a/composer.lock b/composer.lock index 4e57b5f..bd85dd5 100755 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c41e879b3299857f1bdfc22c5b7736b2", + "content-hash": "c44bdd3086d3e29ab4fe0b99023f6f62", "packages": [ { "name": "alex-patterson-webdev/laminas-factory", - "version": "dev-feature/3.0.0", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/alex-patterson-webdev/laminas-factory.git", - "reference": "3b268f15baf977bc48195020ffa6e4ff0f673975" + "reference": "9b68ef06290c7863f9249f57698d17a3a3abf6ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/alex-patterson-webdev/laminas-factory/zipball/3b268f15baf977bc48195020ffa6e4ff0f673975", - "reference": "3b268f15baf977bc48195020ffa6e4ff0f673975", + "url": "https://api.github.com/repos/alex-patterson-webdev/laminas-factory/zipball/9b68ef06290c7863f9249f57698d17a3a3abf6ad", + "reference": "9b68ef06290c7863f9249f57698d17a3a3abf6ad", "shasum": "" }, "require": { @@ -25,10 +25,11 @@ "php": ">=7.4 || >=8.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.18", - "phpstan/phpstan": ">=0.12", + "friendsofphp/php-cs-fixer": "^3.6.0", + "phpspec/prophecy": "^1.15.0", + "phpstan/phpstan": "^1.4.8", "phpunit/phpunit": "^9.5", - "squizlabs/php_codesniffer": "^3.5" + "squizlabs/php_codesniffer": "^3.6" }, "type": "library", "autoload": { @@ -49,9 +50,9 @@ "description": "Factory components used to create services in Laminas Framework applications", "support": { "issues": "https://github.com/alex-patterson-webdev/laminas-factory/issues", - "source": "https://github.com/alex-patterson-webdev/laminas-factory/tree/feature/3.0.0" + "source": "https://github.com/alex-patterson-webdev/laminas-factory/tree/3.0.0" }, - "time": "2021-03-29T19:41:04+00:00" + "time": "2022-03-18T03:18:26+00:00" }, { "name": "container-interop/container-interop", @@ -91,46 +92,45 @@ }, { "name": "laminas/laminas-servicemanager", - "version": "3.6.4", + "version": "3.10.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-servicemanager.git", - "reference": "b1445e1a7077c21b0fad0974a1b7a11b9dbe0828" + "reference": "e52b985909e0940bf22d34f322eb3f48bbef6bd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/b1445e1a7077c21b0fad0974a1b7a11b9dbe0828", - "reference": "b1445e1a7077c21b0fad0974a1b7a11b9dbe0828", + "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/e52b985909e0940bf22d34f322eb3f48bbef6bd1", + "reference": "e52b985909e0940bf22d34f322eb3f48bbef6bd1", "shasum": "" }, "require": { "container-interop/container-interop": "^1.2", "laminas/laminas-stdlib": "^3.2.1", - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^7.3 || ~8.0.0", + "php": "~7.4.0 || ~8.0.0 || ~8.1.0", "psr/container": "^1.0" }, "conflict": { "laminas/laminas-code": "<3.3.1", - "zendframework/zend-code": "<3.3.1" + "zendframework/zend-code": "<3.3.1", + "zendframework/zend-servicemanager": "*" }, "provide": { "container-interop/container-interop-implementation": "^1.2", "psr/container-implementation": "^1.0" }, - "replace": { - "zendframework/zend-servicemanager": "^3.4.0" - }, "require-dev": { "composer/package-versions-deprecated": "^1.0", - "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-coding-standard": "~2.2.1", "laminas/laminas-container-config-test": "^0.3", - "laminas/laminas-dependency-plugin": "^2.1", - "mikey179/vfsstream": "^1.6.8", - "ocramius/proxy-manager": "^2.2.3", - "phpbench/phpbench": "^1.0.0-alpha3", + "laminas/laminas-dependency-plugin": "^2.1.2", + "mikey179/vfsstream": "^1.6.10@alpha", + "ocramius/proxy-manager": "^2.11", + "phpbench/phpbench": "^1.1", "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.4" + "phpunit/phpunit": "^9.5.5", + "psalm/plugin-phpunit": "^0.16.1", + "vimeo/psalm": "^4.8" }, "suggest": { "ocramius/proxy-manager": "ProxyManager ^2.1.1 to handle lazy initialization of services" @@ -174,33 +174,34 @@ "type": "community_bridge" } ], - "time": "2021-02-03T08:44:41+00:00" + "time": "2021-09-18T20:19:36+00:00" }, { "name": "laminas/laminas-stdlib", - "version": "3.3.1", + "version": "3.7.1", "source": { "type": "git", "url": "https://github.com/laminas/laminas-stdlib.git", - "reference": "d81c7ffe602ed0e6ecb18691019111c0f4bf1efe" + "reference": "bcd869e2fe88d567800057c1434f2380354fe325" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/d81c7ffe602ed0e6ecb18691019111c0f4bf1efe", - "reference": "d81c7ffe602ed0e6ecb18691019111c0f4bf1efe", + "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/bcd869e2fe88d567800057c1434f2380354fe325", + "reference": "bcd869e2fe88d567800057c1434f2380354fe325", "shasum": "" }, "require": { - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^7.3 || ^8.0" + "php": "^7.3 || ~8.0.0 || ~8.1.0" }, - "replace": { - "zendframework/zend-stdlib": "^3.2.1" + "conflict": { + "zendframework/zend-stdlib": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "~1.0.0", - "phpbench/phpbench": "^0.17.1", - "phpunit/phpunit": "~9.3.7" + "laminas/laminas-coding-standard": "~2.3.0", + "phpbench/phpbench": "^1.0", + "phpunit/phpunit": "^9.3.7", + "psalm/plugin-phpunit": "^0.16.0", + "vimeo/psalm": "^4.7" }, "type": "library", "autoload": { @@ -232,90 +233,28 @@ "type": "community_bridge" } ], - "time": "2020-11-19T20:18:59+00:00" - }, - { - "name": "laminas/laminas-zendframework-bridge", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-zendframework-bridge.git", - "reference": "6cccbddfcfc742eb02158d6137ca5687d92cee32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6cccbddfcfc742eb02158d6137ca5687d92cee32", - "reference": "6cccbddfcfc742eb02158d6137ca5687d92cee32", - "shasum": "" - }, - "require": { - "php": "^7.3 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^9.3", - "psalm/plugin-phpunit": "^0.15.1", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.6" - }, - "type": "library", - "extra": { - "laminas": { - "module": "Laminas\\ZendFrameworkBridge" - } - }, - "autoload": { - "files": [ - "src/autoload.php" - ], - "psr-4": { - "Laminas\\ZendFrameworkBridge\\": "src//" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Alias legacy ZF class names to Laminas Project equivalents.", - "keywords": [ - "ZendFramework", - "autoloading", - "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": "2021-02-25T21:54:58+00:00" + "time": "2022-01-21T15:50:46+00:00" }, { "name": "monolog/monolog", - "version": "2.2.0", + "version": "2.4.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084" + "reference": "d7fd7450628561ba697b7097d86db72662f54aef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1cb1cde8e8dd0f70cc0fe51354a59acad9302084", - "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/d7fd7450628561ba697b7097d86db72662f54aef", + "reference": "d7fd7450628561ba697b7097d86db72662f54aef", "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", @@ -323,14 +262,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", + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": ">=0.90@dev", "swiftmailer/swiftmailer": "^5.3|^6.0" }, "suggest": { @@ -338,8 +277,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", @@ -378,7 +320,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.4.0" }, "funding": [ { @@ -390,24 +332,24 @@ "type": "tidelift" } ], - "time": "2020-12-14T13:15:25+00:00" + "time": "2022-03-14T12:44:37+00:00" }, { "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": { @@ -436,22 +378,22 @@ ], "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/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": { @@ -475,7 +417,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for logging libraries", @@ -486,31 +428,102 @@ "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" } ], "packages-dev": [ + { + "name": "composer/pcre", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd", + "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.0.0" + }, + "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-02-25T20:21:48+00:00" + }, { "name": "composer/semver", - "version": "3.2.4", + "version": "3.3.1", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "a02fdf930a3c1c3ed3a49b5f63859c0c20e10464" + "reference": "5d8e574bb0e69188786b8ef77d43341222a41a71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/a02fdf930a3c1c3ed3a49b5f63859c0c20e10464", - "reference": "a02fdf930a3c1c3ed3a49b5f63859c0c20e10464", + "url": "https://api.github.com/repos/composer/semver/zipball/5d8e574bb0e69188786b8ef77d43341222a41a71", + "reference": "5d8e574bb0e69188786b8ef77d43341222a41a71", "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", @@ -555,7 +568,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.3.1" }, "funding": [ { @@ -571,29 +584,31 @@ "type": "tidelift" } ], - "time": "2020-11-13T08:59:24+00:00" + "time": "2022-03-16T11:22:07+00:00" }, { "name": "composer/xdebug-handler", - "version": "1.4.6", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "f27e06cd9675801df441b3656569b328e04aa37c" + "reference": "ced299686f41dce890debac69273b47ffe98a40c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/f27e06cd9675801df441b3656569b328e04aa37c", - "reference": "f27e06cd9675801df441b3656569b328e04aa37c", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", + "reference": "ced299686f41dce890debac69273b47ffe98a40c", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1.0" + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" }, "require-dev": { - "phpstan/phpstan": "^0.12.55", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^6.0" }, "type": "library", "autoload": { @@ -619,7 +634,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.6" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" }, "funding": [ { @@ -635,32 +650,34 @@ "type": "tidelift" } ], - "time": "2021-03-25T17:01:18+00:00" + "time": "2022-02-25T21:32:43+00:00" }, { "name": "doctrine/annotations", - "version": "1.12.1", + "version": "1.13.2", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "b17c5014ef81d212ac539f07a1001832df1b6d3b" + "reference": "5b668aef16090008790395c02c893b1ba13f7e08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/b17c5014ef81d212ac539f07a1001832df1b6d3b", - "reference": "b17c5014ef81d212ac539f07a1001832df1b6d3b", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08", "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", "autoload": { @@ -703,35 +720,36 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.12.1" + "source": "https://github.com/doctrine/annotations/tree/1.13.2" }, - "time": "2021-02-21T21:00:45+00:00" + "time": "2021-08-05T19:00:23+00:00" }, { "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": { @@ -758,7 +776,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": [ { @@ -774,36 +792,32 @@ "type": "tidelift" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2022-03-03T08:28:38+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.1", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", "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" @@ -838,7 +852,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.3" }, "funding": [ { @@ -854,62 +868,60 @@ "type": "tidelift" } ], - "time": "2020-05-25T17:44:05+00:00" + "time": "2022-02-28T11:07:21+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v2.18.4", + "version": "v3.8.0", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "06f764e3cb6d60822d8f5135205f9d32b5508a31" + "reference": "cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/06f764e3cb6d60822d8f5135205f9d32b5508a31", - "reference": "06f764e3cb6d60822d8f5135205f9d32b5508a31", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3", + "reference": "cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3", "shasum": "" }, "require": { - "composer/semver": "^1.4 || ^2.0 || ^3.0", - "composer/xdebug-handler": "^1.2", - "doctrine/annotations": "^1.2", + "composer/semver": "^3.2", + "composer/xdebug-handler": "^3.0.3", + "doctrine/annotations": "^1.13", "ext-json": "*", "ext-tokenizer": "*", - "php": "^5.6 || ^7.0 || ^8.0", - "php-cs-fixer/diff": "^1.3", - "symfony/console": "^3.4.43 || ^4.1.6 || ^5.0", - "symfony/event-dispatcher": "^3.0 || ^4.0 || ^5.0", - "symfony/filesystem": "^3.0 || ^4.0 || ^5.0", - "symfony/finder": "^3.0 || ^4.0 || ^5.0", - "symfony/options-resolver": "^3.0 || ^4.0 || ^5.0", - "symfony/polyfill-php70": "^1.0", - "symfony/polyfill-php72": "^1.4", - "symfony/process": "^3.0 || ^4.0 || ^5.0", - "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0" + "php": "^7.4 || ^8.0", + "php-cs-fixer/diff": "^2.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/process": "^5.4 || ^6.0", + "symfony/stopwatch": "^5.4 || ^6.0" }, "require-dev": { - "justinrainbow/json-schema": "^5.0", - "keradus/cli-executor": "^1.4", - "mikey179/vfsstream": "^1.6", - "php-coveralls/php-coveralls": "^2.4.2", - "php-cs-fixer/accessible-object": "^1.0", + "justinrainbow/json-schema": "^5.2", + "keradus/cli-executor": "^1.5", + "mikey179/vfsstream": "^1.6.10", + "php-coveralls/php-coveralls": "^2.5.2", + "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-phpunit": "^1.1 || ^2.0", - "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.13 || ^9.5", + "phpspec/prophecy": "^1.15", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", "phpunitgoodpractices/polyfill": "^1.5", "phpunitgoodpractices/traits": "^1.9.1", - "sanmai/phpunit-legacy-adapter": "^6.4 || ^8.2.1", - "symfony/phpunit-bridge": "^5.2.1", - "symfony/yaml": "^3.0 || ^4.0 || ^5.0" + "symfony/phpunit-bridge": "^6.0", + "symfony/yaml": "^5.4 || ^6.0" }, "suggest": { "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters.", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.", - "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." + "ext-mbstring": "For handling non-UTF8 characters." }, "bin": [ "php-cs-fixer" @@ -918,20 +930,7 @@ "autoload": { "psr-4": { "PhpCsFixer\\": "src/" - }, - "classmap": [ - "tests/Test/AbstractFixerTestCase.php", - "tests/Test/AbstractIntegrationCaseFactory.php", - "tests/Test/AbstractIntegrationTestCase.php", - "tests/Test/Assert/AssertTokensTrait.php", - "tests/Test/IntegrationCase.php", - "tests/Test/IntegrationCaseFactory.php", - "tests/Test/IntegrationCaseFactoryInterface.php", - "tests/Test/InternalIntegrationCaseFactory.php", - "tests/Test/IsIdenticalConstraint.php", - "tests/Test/TokensWithObservedTransformers.php", - "tests/TestCase.php" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -950,7 +949,7 @@ "description": "A tool to automatically fix PHP code style", "support": { "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v2.18.4" + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.8.0" }, "funding": [ { @@ -958,41 +957,42 @@ "type": "github" } ], - "time": "2021-03-20T14:52:33+00:00" + "time": "2022-03-18T17:20:59+00:00" }, { "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" }, - "replace": { - "myclabs/deep-copy": "self.version" + "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": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, "files": [ "src/DeepCopy/deep_copy.php" - ] + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1008,7 +1008,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": [ { @@ -1016,20 +1016,20 @@ "type": "tidelift" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2022-03-03T13:19:32+00:00" }, { "name": "nikic/php-parser", - "version": "v4.10.4", + "version": "v4.13.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" + "reference": "210577fe3cf7badcc5814d99455df46564f3c077" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077", "shasum": "" }, "require": { @@ -1070,22 +1070,22 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" }, - "time": "2020-12-20T10:01:03+00:00" + "time": "2021-11-30T19:35:32+00:00" }, { "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": { @@ -1130,22 +1130,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.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "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/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { @@ -1181,22 +1181,22 @@ "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.2.1" }, - "time": "2021-02-23T14:00:09+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { "name": "php-cs-fixer/diff", - "version": "v1.3.1", + "version": "v2.0.2", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/diff.git", - "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759" + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/dbd31aeb251639ac0b9e7e29405c1441907f5759", - "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3", + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3", "shasum": "" }, "require": { @@ -1224,21 +1224,18 @@ { "name": "Kore Nordmann", "email": "mail@kore-nordmann.de" - }, - { - "name": "SpacePossum" } ], - "description": "sebastian/diff v2 backport support for PHP5.6", + "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/v1.3.1" + "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2" }, - "time": "2020-10-14T08:39:05+00:00" + "time": "2020-10-14T08:32:19+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -1295,16 +1292,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": { @@ -1315,7 +1312,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": { @@ -1345,22 +1343,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": { @@ -1368,7 +1366,8 @@ "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "ext-tokenizer": "*" + "ext-tokenizer": "*", + "psalm/phar": "^4.8" }, "type": "library", "extra": { @@ -1394,39 +1393,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": { @@ -1461,22 +1460,22 @@ ], "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": "phpstan/phpstan", - "version": "0.12.82", + "version": "1.4.10", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "3920f0fb0aff39263d3a4cb0bca120a67a1a6a11" + "reference": "898c479c39caa727bedf4311dd294a8f4e250e72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/3920f0fb0aff39263d3a4cb0bca120a67a1a6a11", - "reference": "3920f0fb0aff39263d3a4cb0bca120a67a1a6a11", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/898c479c39caa727bedf4311dd294a8f4e250e72", + "reference": "898c479c39caa727bedf4311dd294a8f4e250e72", "shasum": "" }, "require": { @@ -1490,11 +1489,6 @@ "phpstan.phar" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.12-dev" - } - }, "autoload": { "files": [ "bootstrap.php" @@ -1507,13 +1501,17 @@ "description": "PHPStan - PHP Static Analysis Tool", "support": { "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/0.12.82" + "source": "https://github.com/phpstan/phpstan/tree/1.4.10" }, "funding": [ { "url": "https://github.com/ondrejmirtes", "type": "github" }, + { + "url": "https://github.com/phpstan", + "type": "github" + }, { "url": "https://www.patreon.com/phpstan", "type": "patreon" @@ -1523,27 +1521,27 @@ "type": "tidelift" } ], - "time": "2021-03-19T06:08:17+00:00" + "time": "2022-03-14T10:25:45+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.6", + "version": "9.2.15", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f6293e1b30a2354e8428e004689671b83871edde" + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" }, "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/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", "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", @@ -1592,7 +1590,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.15" }, "funding": [ { @@ -1600,20 +1598,20 @@ "type": "github" } ], - "time": "2021-03-28T07:26:59+00:00" + "time": "2022-03-07T09:28:20+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": { @@ -1652,7 +1650,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": [ { @@ -1660,7 +1658,7 @@ "type": "github" } ], - "time": "2020-09-28T05:57:25+00:00" + "time": "2021-12-02T12:48:52+00:00" }, { "name": "phpunit/php-invoker", @@ -1845,16 +1843,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.4", + "version": "9.5.19", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c73c6737305e779771147af66c96ca6a7ed8a741" + "reference": "35ea4b7f3acabb26f4bb640f8c30866c401da807" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c73c6737305e779771147af66c96ca6a7ed8a741", - "reference": "c73c6737305e779771147af66c96ca6a7ed8a741", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/35ea4b7f3acabb26f4bb640f8c30866c401da807", + "reference": "35ea4b7f3acabb26f4bb640f8c30866c401da807", "shasum": "" }, "require": { @@ -1866,11 +1864,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.13", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", @@ -1884,7 +1882,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": "^3.0", "sebastian/version": "^3.0.2" }, "require-dev": { @@ -1905,11 +1903,11 @@ } }, "autoload": { - "classmap": [ - "src/" - ], "files": [ "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1932,11 +1930,11 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.4" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.19" }, "funding": [ { - "url": "https://phpunit.de/donate.html", + "url": "https://phpunit.de/sponsors.html", "type": "custom" }, { @@ -1944,7 +1942,56 @@ "type": "github" } ], - "time": "2021-03-23T07:16:29+00:00" + "time": "2022-03-15T09:57:31+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, + "time": "2016-08-06T20:24:11+00:00" }, { "name": "psr/event-dispatcher", @@ -2425,16 +2472,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": { @@ -2483,14 +2530,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": [ { @@ -2498,20 +2545,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.2", + "version": "5.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" }, "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/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", "shasum": "" }, "require": { @@ -2554,7 +2601,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.5" }, "funding": [ { @@ -2562,7 +2609,7 @@ "type": "github" } ], - "time": "2020-10-26T15:55:19+00:00" + "time": "2022-02-14T08:28:10+00:00" }, { "name": "sebastian/lines-of-code", @@ -2853,28 +2900,28 @@ }, { "name": "sebastian/type", - "version": "2.3.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "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": { @@ -2897,7 +2944,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/3.0.0" }, "funding": [ { @@ -2905,7 +2952,7 @@ "type": "github" } ], - "time": "2020-10-26T13:18:59+00:00" + "time": "2022-03-15T09:54:48+00:00" }, { "name": "sebastian/version", @@ -2962,16 +3009,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.5.8", + "version": "3.6.2", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "9d583721a7157ee997f235f327de038e7ea6dac4" + "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/9d583721a7157ee997f235f327de038e7ea6dac4", - "reference": "9d583721a7157ee997f235f327de038e7ea6dac4", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a", + "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a", "shasum": "" }, "require": { @@ -3014,31 +3061,33 @@ "source": "https://github.com/squizlabs/PHP_CodeSniffer", "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" }, - "time": "2020-10-23T02:01:07+00:00" + "time": "2021-12-12T21:44:58+00:00" }, { "name": "symfony/console", - "version": "v5.2.6", + "version": "v5.4.5", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "35f039df40a3b335ebf310f244cb242b3a83ac8d" + "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/35f039df40a3b335ebf310f244cb242b3a83ac8d", - "reference": "35f039df40a3b335ebf310f244cb242b3a83ac8d", + "url": "https://api.github.com/repos/symfony/console/zipball/d8111acc99876953f52fe16d4c50eb60940d49ad", + "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad", "shasum": "" }, "require": { "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", "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/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" }, "conflict": { + "psr/log": ">=3", "symfony/dependency-injection": "<4.4", "symfony/dotenv": "<5.1", "symfony/event-dispatcher": "<4.4", @@ -3046,16 +3095,16 @@ "symfony/process": "<4.4" }, "provide": { - "psr/log-implementation": "1.0" + "psr/log-implementation": "1.0|2.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", + "symfony/config": "^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/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" }, "suggest": { "psr/log": "For using the console logger", @@ -3095,7 +3144,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.2.6" + "source": "https://github.com/symfony/console/tree/v5.4.5" }, "funding": [ { @@ -3111,20 +3160,20 @@ "type": "tidelift" } ], - "time": "2021-03-28T09:42:18+00:00" + "time": "2022-02-24T12:45:35+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.2.0", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" + "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" }, "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/6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", "shasum": "" }, "require": { @@ -3133,7 +3182,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -3162,7 +3211,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.5.0" }, "funding": [ { @@ -3178,27 +3227,27 @@ "type": "tidelift" } ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2021-07-12T14:48:14+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.2.4", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "d08d6ec121a425897951900ab692b612a61d6240" + "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d08d6ec121a425897951900ab692b612a61d6240", - "reference": "d08d6ec121a425897951900ab692b612a61d6240", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dec8a9f58d20df252b9cd89f1c6c1530f747685d", + "reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/event-dispatcher-contracts": "^2", - "symfony/polyfill-php80": "^1.15" + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher-contracts": "^2|^3", + "symfony/polyfill-php80": "^1.16" }, "conflict": { "symfony/dependency-injection": "<4.4" @@ -3208,14 +3257,14 @@ "symfony/event-dispatcher-implementation": "2.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": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^4.4|^5.0|^6.0" }, "suggest": { "symfony/dependency-injection": "", @@ -3247,7 +3296,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.2.4" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.3" }, "funding": [ { @@ -3263,20 +3312,20 @@ "type": "tidelift" } ], - "time": "2021-02-18T17:12:37+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.2.0", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2" + "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a" }, "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/66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", + "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", "shasum": "" }, "require": { @@ -3289,7 +3338,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -3326,7 +3375,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.5.0" }, "funding": [ { @@ -3342,25 +3391,27 @@ "type": "tidelift" } ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2021-07-12T14:48:14+00:00" }, { "name": "symfony/filesystem", - "version": "v5.2.6", + "version": "v5.4.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "8c86a82f51658188119e62cff0a050a12d09836f" + "reference": "d53a45039974952af7f7ebc461ccdd4295e29440" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/8c86a82f51658188119e62cff0a050a12d09836f", - "reference": "8c86a82f51658188119e62cff0a050a12d09836f", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/d53a45039974952af7f7ebc461ccdd4295e29440", + "reference": "d53a45039974952af7f7ebc461ccdd4295e29440", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8" + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -3388,7 +3439,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.2.6" + "source": "https://github.com/symfony/filesystem/tree/v5.4.6" }, "funding": [ { @@ -3404,24 +3455,26 @@ "type": "tidelift" } ], - "time": "2021-03-28T14:30:26+00:00" + "time": "2022-03-02T12:42:23+00:00" }, { "name": "symfony/finder", - "version": "v5.2.4", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "0d639a0943822626290d169965804f79400e6a04" + "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/0d639a0943822626290d169965804f79400e6a04", - "reference": "0d639a0943822626290d169965804f79400e6a04", + "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d", + "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -3449,7 +3502,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.2.4" + "source": "https://github.com/symfony/finder/tree/v5.4.3" }, "funding": [ { @@ -3465,27 +3518,27 @@ "type": "tidelift" } ], - "time": "2021-02-15T18:55:04+00:00" + "time": "2022-01-26T16:34:36+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.2.4", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "5d0f633f9bbfcf7ec642a2b5037268e61b0a62ce" + "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/5d0f633f9bbfcf7ec642a2b5037268e61b0a62ce", - "reference": "5d0f633f9bbfcf7ec642a2b5037268e61b0a62ce", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/cc1147cb11af1b43f503ac18f31aa3bec213aba8", + "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-php73": "~1.0", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -3518,7 +3571,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.2.4" + "source": "https://github.com/symfony/options-resolver/tree/v5.4.3" }, "funding": [ { @@ -3534,32 +3587,35 @@ "type": "tidelift" } ], - "time": "2021-01-27T12:56:27+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.22.1", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" + "reference": "30885182c981ab175d4d034db0f6f469898070ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", - "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", + "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" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3567,12 +3623,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3597,7 +3653,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" }, "funding": [ { @@ -3613,20 +3669,20 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2021-10-20T20:35:02+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.22.1", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170" + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170", - "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", "shasum": "" }, "require": { @@ -3638,7 +3694,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3646,12 +3702,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3678,7 +3734,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0" }, "funding": [ { @@ -3694,20 +3750,20 @@ "type": "tidelift" } ], - "time": "2021-01-22T09:19:47+00:00" + "time": "2021-11-23T21:10:46+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.22.1", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248" + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248", - "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", "shasum": "" }, "require": { @@ -3719,7 +3775,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3727,12 +3783,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -3762,7 +3818,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0" }, "funding": [ { @@ -3778,32 +3834,35 @@ "type": "tidelift" } ], - "time": "2021-01-22T09:19:47+00:00" + "time": "2021-02-19T12:13:01+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.22.1", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", - "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", + "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" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3811,12 +3870,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3842,75 +3901,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.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": "2021-01-22T09:19:47+00:00" - }, - { - "name": "symfony/polyfill-php70", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644", - "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "metapackage", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php70/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" }, "funding": [ { @@ -3926,20 +3917,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-11-30T18:21:41+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.22.1", + "name": "symfony/polyfill-php73", + "version": "v1.25.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", - "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", + "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", "shasum": "" }, "require": { @@ -3948,7 +3939,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3956,11 +3947,14 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, "files": [ "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3977,7 +3971,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", @@ -3986,7 +3980,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.25.0" }, "funding": [ { @@ -4002,20 +3996,20 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2021-06-05T21:20:04+00:00" }, { - "name": "symfony/polyfill-php73", - "version": "v1.22.1", + "name": "symfony/polyfill-php80", + "version": "v1.25.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", - "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", "shasum": "" }, "require": { @@ -4024,7 +4018,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4032,12 +4026,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -4047,6 +4041,10 @@ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -4056,7 +4054,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", @@ -4065,7 +4063,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0" }, "funding": [ { @@ -4081,20 +4079,20 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2022-03-04T08:16:47+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.22.1", + "name": "symfony/polyfill-php81", + "version": "v1.25.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", "shasum": "" }, "require": { @@ -4103,7 +4101,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4111,12 +4109,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -4126,10 +4124,6 @@ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -4139,7 +4133,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -4148,7 +4142,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.25.0" }, "funding": [ { @@ -4164,25 +4158,25 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2021-09-13T13:58:11+00:00" }, { "name": "symfony/process", - "version": "v5.2.4", + "version": "v5.4.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "313a38f09c77fbcdc1d223e57d368cea76a2fd2f" + "reference": "95440409896f90a5f85db07a32b517ecec17fa4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/313a38f09c77fbcdc1d223e57d368cea76a2fd2f", - "reference": "313a38f09c77fbcdc1d223e57d368cea76a2fd2f", + "url": "https://api.github.com/repos/symfony/process/zipball/95440409896f90a5f85db07a32b517ecec17fa4c", + "reference": "95440409896f90a5f85db07a32b517ecec17fa4c", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -4210,7 +4204,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.2.4" + "source": "https://github.com/symfony/process/tree/v5.4.5" }, "funding": [ { @@ -4226,25 +4220,29 @@ "type": "tidelift" } ], - "time": "2021-01-27T10:15:41+00:00" + "time": "2022-01-30T18:16:22+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.2.0", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" + "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" }, "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/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/container": "^1.0" + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1" + }, + "conflict": { + "ext-psr": "<1.1|>=2" }, "suggest": { "symfony/service-implementation": "" @@ -4252,7 +4250,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -4289,7 +4287,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/master" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.0" }, "funding": [ { @@ -4305,25 +4303,25 @@ "type": "tidelift" } ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2021-11-04T16:48:04+00:00" }, { "name": "symfony/stopwatch", - "version": "v5.2.4", + "version": "v5.4.5", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "b12274acfab9d9850c52583d136a24398cdf1a0c" + "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/b12274acfab9d9850c52583d136a24398cdf1a0c", - "reference": "b12274acfab9d9850c52583d136a24398cdf1a0c", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", + "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/service-contracts": "^1.0|^2" + "symfony/service-contracts": "^1|^2|^3" }, "type": "library", "autoload": { @@ -4351,7 +4349,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.2.4" + "source": "https://github.com/symfony/stopwatch/tree/v5.4.5" }, "funding": [ { @@ -4367,20 +4365,20 @@ "type": "tidelift" } ], - "time": "2021-01-27T10:15:41+00:00" + "time": "2022-02-18T16:06:09+00:00" }, { "name": "symfony/string", - "version": "v5.2.6", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572" + "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572", - "reference": "ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572", + "url": "https://api.github.com/repos/symfony/string/zipball/92043b7d8383e48104e411bc9434b260dbeb5a10", + "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10", "shasum": "" }, "require": { @@ -4391,20 +4389,23 @@ "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php80": "~1.15" }, + "conflict": { + "symfony/translation-contracts": ">=3.0" + }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0", - "symfony/http-client": "^4.4|^5.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0" + "symfony/var-exporter": "^4.4|^5.0|^6.0" }, "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, "files": [ "Resources/functions.php" ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, "exclude-from-classmap": [ "/Tests/" ] @@ -4434,7 +4435,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.2.6" + "source": "https://github.com/symfony/string/tree/v5.4.3" }, "funding": [ { @@ -4450,20 +4451,20 @@ "type": "tidelift" } ], - "time": "2021-03-17T17:12:15+00:00" + "time": "2022-01-02T09:53:40+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": { @@ -4492,7 +4493,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": [ { @@ -4500,7 +4501,7 @@ "type": "github" } ], - "time": "2020-07-12T23:59:07+00:00" + "time": "2021-07-28T10:34:58+00:00" }, { "name": "webmozart/assert", @@ -4563,9 +4564,7 @@ ], "aliases": [], "minimum-stability": "dev", - "stability-flags": { - "alex-patterson-webdev/laminas-factory": 20 - }, + "stability-flags": [], "prefer-stable": true, "prefer-lowest": false, "platform": { diff --git a/config/module.config.php b/config/module.config.php index b33dd12..38c9853 100755 --- a/config/module.config.php +++ b/config/module.config.php @@ -15,6 +15,7 @@ use Arp\LaminasMonolog\Factory\Processor\MemoryUsageProcessorFactory; use Arp\LaminasMonolog\Factory\Processor\PsrLogMessageProcessorFactory; use Arp\LaminasMonolog\Factory\Processor\TagProcessorFactory; +use Arp\LaminasMonolog\Factory\Processor\UidProcessorFactory; use Arp\LaminasMonolog\Factory\Processor\WebProcessorFactory; use Laminas\ServiceManager\Factory\InvokableFactory; use Monolog\Formatter\HtmlFormatter; diff --git a/phpcs.xml b/phpcs.xml index 6f83c70..372912b 100755 --- a/phpcs.xml +++ b/phpcs.xml @@ -1,26 +1,34 @@ ARP coding standard - - - - 0 + + + + + + + + + + + + + - diff --git a/phpstan.neon b/phpstan.neon new file mode 100755 index 0000000..8b4dc29 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,5 @@ +parameters: + level: 7 + paths: + - src/ + - test/ From 12fb1b4d60e451ff566629e1f68ba7cb845c2f63 Mon Sep 17 00:00:00 2001 From: Alex Patterson Date: Sun, 20 Mar 2022 03:08:26 +0000 Subject: [PATCH 5/9] Correct phpstan static analysis errors --- .../Handler/ErrorLogHandlerFactory.php | 13 +++++++--- src/Factory/Handler/PsrHandlerFactory.php | 13 +++++++--- src/Factory/LoggerFactory.php | 6 ++--- .../Handler/ErrorLogHandlerFactoryTest.php | 24 ++++++++++++++++++- 4 files changed, 46 insertions(+), 10 deletions(-) diff --git a/src/Factory/Handler/ErrorLogHandlerFactory.php b/src/Factory/Handler/ErrorLogHandlerFactory.php index cb71a64..3e11b0f 100755 --- a/src/Factory/Handler/ErrorLogHandlerFactory.php +++ b/src/Factory/Handler/ErrorLogHandlerFactory.php @@ -9,10 +9,14 @@ use Monolog\Handler\ErrorLogHandler; use Monolog\Logger; use Psr\Container\ContainerInterface; +use Psr\Log\LogLevel; /** * @author Alex Patterson * @package Arp\LaminasMonolog\Factory\Handler + * + * @phpstan-import-type Level from \Monolog\Logger + * @phpstan-import-type LevelName from \Monolog\Logger */ final class ErrorLogHandlerFactory extends AbstractFactory { @@ -32,11 +36,14 @@ public function __invoke( ): ErrorLogHandler { $options = $options ?? $this->getServiceOptions($container, $requestedName); + /** @var Level|LevelName|LogLevel::* $level */ + $level = isset($options['level']) ? (int)$options['level'] : Logger::DEBUG; + return new ErrorLogHandler( isset($options['message_type']) ? (int)$options['message_type'] : ErrorLogHandler::OPERATING_SYSTEM, - isset($options['level']) ? (int)$options['level'] : Logger::DEBUG, - isset($options['bubble']) ? (bool)$options['bubble'] : true, - isset($options['expand_new_lines']) ? (bool)$options['expand_new_lines'] : false + $level, + !isset($options['bubble']) || $options['bubble'], + isset($options['expand_new_lines']) && $options['expand_new_lines'] ); } } diff --git a/src/Factory/Handler/PsrHandlerFactory.php b/src/Factory/Handler/PsrHandlerFactory.php index 516451f..f1f6429 100755 --- a/src/Factory/Handler/PsrHandlerFactory.php +++ b/src/Factory/Handler/PsrHandlerFactory.php @@ -12,10 +12,14 @@ use Monolog\Handler\PsrHandler; use Monolog\Logger; use Psr\Container\ContainerInterface; +use Psr\Log\LogLevel; /** - * @author Alex Patterson + * @author Alex Patterson * @package Arp\LaminasMonolog\Factory\Handler + * + * @phpstan-import-type Level from \Monolog\Logger + * @phpstan-import-type LevelName from \Monolog\Logger */ final class PsrHandlerFactory extends AbstractFactory { @@ -41,10 +45,13 @@ public function __invoke(ContainerInterface $container, string $requestedName, a ); } + /** @var Level|LevelName|LogLevel::* $level */ + $level = isset($options['level']) ? (int)$options['level'] : Logger::DEBUG; + $handler = new PsrHandler( $this->getLogger($container, $options['logger'], $requestedName), - isset($options['level']) ? (int)$options['level'] : Logger::DEBUG, - isset($options['bubble']) ? (bool)$options['bubble'] : true + $level, + !isset($options['bubble']) || $options['bubble'] ); if (!empty($options['formatter'])) { diff --git a/src/Factory/LoggerFactory.php b/src/Factory/LoggerFactory.php index c2aa38c..aa66771 100755 --- a/src/Factory/LoggerFactory.php +++ b/src/Factory/LoggerFactory.php @@ -45,7 +45,7 @@ public function __invoke(ContainerInterface $container, string $requestedName, a /** * @param ServiceLocatorInterface&ContainerInterface $container - * @param array $handlerConfigs + * @param array $handlerConfigs * @param string $serviceName * * @return array @@ -89,10 +89,10 @@ private function getHandlers( /** * @param ServiceLocatorInterface&ContainerInterface $container - * @param array $processorConfigs + * @param array $processorConfigs * @param string $serviceName * - * @return array + * @return array * * @throws ServiceNotCreatedException */ diff --git a/test/unit/Factory/Handler/ErrorLogHandlerFactoryTest.php b/test/unit/Factory/Handler/ErrorLogHandlerFactoryTest.php index 3bc2956..e59593d 100755 --- a/test/unit/Factory/Handler/ErrorLogHandlerFactoryTest.php +++ b/test/unit/Factory/Handler/ErrorLogHandlerFactoryTest.php @@ -6,6 +6,9 @@ use Arp\LaminasFactory\FactoryInterface; use Arp\LaminasMonolog\Factory\Handler\ErrorLogHandlerFactory; +use Laminas\ServiceManager\Exception\ServiceNotCreatedException; +use Monolog\Handler\ErrorLogHandler; +use Monolog\Logger; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Psr\Container\ContainerInterface; @@ -21,7 +24,7 @@ final class ErrorLogHandlerFactoryTest extends TestCase /** * @var ContainerInterface&MockObject */ - private $container; + private ContainerInterface $container; /** * Prepare the test case dependencies @@ -40,4 +43,23 @@ public function testImplementsFactoryInterface(): void $this->assertInstanceOf(FactoryInterface::class, $factory); } + + /** + * Assert that calls to __invoke() will return a configured ErrorLogHandler instance + * + * @throws ServiceNotCreatedException + */ + public function testInvokeWillReturnValidErrorLogHandler(): void + { + $factory = new ErrorLogHandlerFactory(); + + $options = [ + 'level' => Logger::DEBUG, + ]; + + $this->assertInstanceOf( + ErrorLogHandler::class, + $factory($this->container, ErrorLogHandler::class, $options) + ); + } } From 2022acfc76144a9846cdaa5c68b96e6b7125ac9d Mon Sep 17 00:00:00 2001 From: Alex Patterson Date: Sun, 20 Mar 2022 16:31:33 +0000 Subject: [PATCH 6/9] Add addtional test case coverage for Formatters and Handlers --- .../Formatter/HtmlFormatterFactory.php | 2 + .../Formatter/JsonFormatterFactory.php | 7 +- .../Formatter/LineFormatterFactory.php | 13 +-- .../Handler/ErrorLogHandlerFactory.php | 2 + src/Factory/Handler/NullHandlerFactory.php | 2 + .../MemoryPeakUsageProcessorFactory.php | 13 +-- .../Processor/MemoryUsageProcessorFactory.php | 13 +-- .../PsrLogMessageProcessorFactory.php | 4 +- .../Formatter/HtmlFormatterFactoryTest.php | 79 +++++++++++++ .../Formatter/JsonFormatterFactoryTest.php | 110 ++++++++++++++++++ .../Formatter/LineFormatterFactoryTest.php | 97 +++++++++++++++ .../Handler/NullHandlerFactoryTest.php | 81 +++++++++++++ 12 files changed, 393 insertions(+), 30 deletions(-) create mode 100755 test/unit/Factory/Formatter/HtmlFormatterFactoryTest.php create mode 100755 test/unit/Factory/Formatter/JsonFormatterFactoryTest.php create mode 100755 test/unit/Factory/Formatter/LineFormatterFactoryTest.php create mode 100755 test/unit/Factory/Handler/NullHandlerFactoryTest.php diff --git a/src/Factory/Formatter/HtmlFormatterFactory.php b/src/Factory/Formatter/HtmlFormatterFactory.php index d2805c9..49773e6 100755 --- a/src/Factory/Formatter/HtmlFormatterFactory.php +++ b/src/Factory/Formatter/HtmlFormatterFactory.php @@ -6,6 +6,7 @@ use Laminas\ServiceManager\Exception\ServiceNotCreatedException; use Monolog\Formatter\HtmlFormatter; +use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; /** @@ -22,6 +23,7 @@ final class HtmlFormatterFactory extends AbstractNormalizerFormatterFactory * @return HtmlFormatter * * @throws ServiceNotCreatedException + * @throws ContainerExceptionInterface */ public function __invoke(ContainerInterface $container, string $requestedName, array $options = null): HtmlFormatter { diff --git a/src/Factory/Formatter/JsonFormatterFactory.php b/src/Factory/Formatter/JsonFormatterFactory.php index 1511d7e..61a0f87 100755 --- a/src/Factory/Formatter/JsonFormatterFactory.php +++ b/src/Factory/Formatter/JsonFormatterFactory.php @@ -6,6 +6,7 @@ use Laminas\ServiceManager\Exception\ServiceNotCreatedException; use Monolog\Formatter\JsonFormatter; +use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; /** @@ -22,6 +23,7 @@ final class JsonFormatterFactory extends AbstractNormalizerFormatterFactory * @return JsonFormatter * * @throws ServiceNotCreatedException + * @throws ContainerExceptionInterface */ public function __invoke(ContainerInterface $container, string $requestedName, array $options = null): JsonFormatter { @@ -29,8 +31,9 @@ public function __invoke(ContainerInterface $container, string $requestedName, a $formatter = new JsonFormatter( $options['batch_mode'] ?? JsonFormatter::BATCH_MODE_JSON, - $options['append_new_Line'] ?? true, - $options['ignore_empty_context_and_extra'] ?? false + $options['append_new_line'] ?? true, + $options['ignore_empty_context_and_extra'] ?? false, + $options['include_stack_traces'] ?? false, ); $this->configureNormalizerFormatter($formatter, $options); diff --git a/src/Factory/Formatter/LineFormatterFactory.php b/src/Factory/Formatter/LineFormatterFactory.php index 048e810..69da2f4 100755 --- a/src/Factory/Formatter/LineFormatterFactory.php +++ b/src/Factory/Formatter/LineFormatterFactory.php @@ -6,6 +6,7 @@ use Laminas\ServiceManager\Exception\ServiceNotCreatedException; use Monolog\Formatter\LineFormatter; +use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; /** @@ -24,6 +25,7 @@ final class LineFormatterFactory extends AbstractNormalizerFormatterFactory * @return LineFormatter * * @throws ServiceNotCreatedException + * @throws ContainerExceptionInterface */ public function __invoke(ContainerInterface $container, string $requestedName, array $options = null): LineFormatter { @@ -31,13 +33,10 @@ public function __invoke(ContainerInterface $container, string $requestedName, a $formatter = new LineFormatter( $options['format'] ?? null, - null, - isset($options['allow_line_breaks']) - ? (bool)$options['allow_line_breaks'] - : false, - isset($options['ignore_empty_context_and_extra']) - ? (bool)$options['ignore_empty_context_and_extra'] - : false, + $options['date_format'] ?? null, + isset($options['allow_inline_line_breaks']) && $options['allow_inline_line_breaks'], + isset($options['ignore_empty_context_and_extra']) && $options['ignore_empty_context_and_extra'], + isset($options['include_stack_traces']) && $options['include_stack_traces'] ); $this->configureNormalizerFormatter($formatter, $options); diff --git a/src/Factory/Handler/ErrorLogHandlerFactory.php b/src/Factory/Handler/ErrorLogHandlerFactory.php index 3e11b0f..9592c3a 100755 --- a/src/Factory/Handler/ErrorLogHandlerFactory.php +++ b/src/Factory/Handler/ErrorLogHandlerFactory.php @@ -8,6 +8,7 @@ use Laminas\ServiceManager\Exception\ServiceNotCreatedException; use Monolog\Handler\ErrorLogHandler; use Monolog\Logger; +use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; use Psr\Log\LogLevel; @@ -28,6 +29,7 @@ final class ErrorLogHandlerFactory extends AbstractFactory * @return ErrorLogHandler * * @throws ServiceNotCreatedException + * @throws ContainerExceptionInterface */ public function __invoke( ContainerInterface $container, diff --git a/src/Factory/Handler/NullHandlerFactory.php b/src/Factory/Handler/NullHandlerFactory.php index e522208..2d634ef 100755 --- a/src/Factory/Handler/NullHandlerFactory.php +++ b/src/Factory/Handler/NullHandlerFactory.php @@ -8,6 +8,7 @@ use Laminas\ServiceManager\Exception\ServiceNotCreatedException; use Monolog\Handler\NullHandler; use Monolog\Logger; +use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; /** @@ -24,6 +25,7 @@ final class NullHandlerFactory extends AbstractFactory * @return NullHandler * * @throws ServiceNotCreatedException + * @throws ContainerExceptionInterface */ public function __invoke(ContainerInterface $container, string $requestedName, array $options = null): NullHandler { diff --git a/src/Factory/Processor/MemoryPeakUsageProcessorFactory.php b/src/Factory/Processor/MemoryPeakUsageProcessorFactory.php index 275e8b9..89ebec4 100755 --- a/src/Factory/Processor/MemoryPeakUsageProcessorFactory.php +++ b/src/Factory/Processor/MemoryPeakUsageProcessorFactory.php @@ -31,14 +31,9 @@ public function __invoke( ): MemoryPeakUsageProcessor { $options = $options ?? $this->getServiceOptions($container, $requestedName); - $realUsage = isset($options['real_usage']) - ? (bool)$options['real_usage'] - : true; - - $useFormatting = isset($options['use_formatting']) - ? (bool)$options['use_formatting'] - : true; - - return new MemoryPeakUsageProcessor($realUsage, $useFormatting); + return new MemoryPeakUsageProcessor( + !isset($options['real_usage']) || $options['real_usage'], + !isset($options['use_formatting']) || $options['use_formatting'] + ); } } diff --git a/src/Factory/Processor/MemoryUsageProcessorFactory.php b/src/Factory/Processor/MemoryUsageProcessorFactory.php index 99de367..c1b1b01 100755 --- a/src/Factory/Processor/MemoryUsageProcessorFactory.php +++ b/src/Factory/Processor/MemoryUsageProcessorFactory.php @@ -31,14 +31,9 @@ public function __invoke( ): MemoryUsageProcessor { $options = $options ?? $this->getServiceOptions($container, $requestedName); - $realUsage = isset($options['real_usage']) - ? (bool)$options['real_usage'] - : true; - - $useFormatting = isset($options['use_formatting']) - ? (bool)$options['use_formatting'] - : true; - - return new MemoryUsageProcessor($realUsage, $useFormatting); + return new MemoryUsageProcessor( + !isset($options['real_usage']) || $options['real_usage'], + !isset($options['use_formatting']) || $options['use_formatting'] + ); } } diff --git a/src/Factory/Processor/PsrLogMessageProcessorFactory.php b/src/Factory/Processor/PsrLogMessageProcessorFactory.php index e5587b9..354f44b 100755 --- a/src/Factory/Processor/PsrLogMessageProcessorFactory.php +++ b/src/Factory/Processor/PsrLogMessageProcessorFactory.php @@ -35,9 +35,7 @@ public function __invoke( (isset($options['date_format']) && is_string($options['date_format'])) ? $options['date_format'] : null, - isset($options['remove_used_context_fields']) - ? (bool)$options['remove_used_context_fields'] - : false + isset($options['remove_used_context_fields']) && $options['remove_used_context_fields'] ); } } diff --git a/test/unit/Factory/Formatter/HtmlFormatterFactoryTest.php b/test/unit/Factory/Formatter/HtmlFormatterFactoryTest.php new file mode 100755 index 0000000..2da2411 --- /dev/null +++ b/test/unit/Factory/Formatter/HtmlFormatterFactoryTest.php @@ -0,0 +1,79 @@ + + * @package ArpTest\LaminasMonolog\Factory\Formatter + */ +final class HtmlFormatterFactoryTest extends TestCase +{ + /** + * @var ContainerInterface&MockObject + */ + private ContainerInterface $container; + + public function setUp(): void + { + $this->container = $this->createMock(ContainerInterface::class); + } + + public function testImplementsFactoryInterface(): void + { + $factory = new HtmlFormatterFactory(); + + $this->assertInstanceOf(FactoryInterface::class, $factory); + } + + /** + * @dataProvider getInvokeWillReturnConfiguredHtmlFormatterInstanceData + * + * @param array $options + * + * @throws ServiceNotCreatedException + * @throws ContainerExceptionInterface + */ + public function testInvokeWillReturnConfiguredHtmlFormatterInstance(array $options): void + { + $factory = new HtmlFormatterFactory(); + + $formatter = $factory($this->container, HtmlFormatter::class, $options); + + if (isset($options['date_format'])) { + $this->assertSame($options['date_format'], $formatter->getDateFormat()); + } + + $this->assertInstanceOf(HtmlFormatter::class, $formatter); + } + + /** + * @return array + */ + public function getInvokeWillReturnConfiguredHtmlFormatterInstanceData(): array + { + return [ + [ + [], + ], + [ + [ + 'date_format' => 'Y-m-d H:i:s', + ] + ] + ]; + } +} diff --git a/test/unit/Factory/Formatter/JsonFormatterFactoryTest.php b/test/unit/Factory/Formatter/JsonFormatterFactoryTest.php new file mode 100755 index 0000000..3cefcfc --- /dev/null +++ b/test/unit/Factory/Formatter/JsonFormatterFactoryTest.php @@ -0,0 +1,110 @@ + + * @package ArpTest\LaminasMonolog\Factory\Formatter + */ +final class JsonFormatterFactoryTest extends TestCase +{ + /** + * @var ContainerInterface&MockObject + */ + private ContainerInterface $container; + + public function setUp(): void + { + $this->container = $this->createMock(ContainerInterface::class); + } + + public function testImplementsFactoryInterface(): void + { + $factory = new JsonFormatterFactory(); + + $this->assertInstanceOf(FactoryInterface::class, $factory); + } + + /** + * @dataProvider getInvokeReturnsConfiguredJsonFormatterInstanceData + * + * @param array $options + * + * @throws ServiceNotCreatedException + * @throws ContainerExceptionInterface + */ + public function testInvokeReturnsConfiguredJsonFormatterInstance(array $options): void + { + $factory = new JsonFormatterFactory(); + + $formatter = $factory($this->container, JsonFormatter::class, $options); + + $this->assertSame( + $options['batch_mode'] ?? JsonFormatter::BATCH_MODE_JSON, + $formatter->getBatchMode() + ); + + $this->assertSame( + $options['append_new_line'] ?? true, + $formatter->isAppendingNewlines() + ); + + if (isset($options['date_format'])) { + $this->assertSame($options['date_format'], $formatter->getDateFormat()); + } + + if (isset($options['max_normalize_depth'])) { + $this->assertSame($options['max_normalize_depth'], $formatter->getMaxNormalizeDepth()); + } + + $this->assertInstanceOf(JsonFormatter::class, $formatter); + } + + /** + * @return array + */ + public function getInvokeReturnsConfiguredJsonFormatterInstanceData(): array + { + return [ + [ + [], + ], + [ + [ + 'batch_mode' => JsonFormatter::BATCH_MODE_NEWLINES, + ] + ], + [ + [ + 'append_new_line' => false, + 'ignore_empty_context_and_extra' => true, + 'include_stack_traces' => true, + ] + ], + [ + [ + 'date_format' => 'Y-m-d H:i:s', + ] + ], + [ + [ + 'max_normalize_depth' => 1234, + ] + ] + ]; + } +} diff --git a/test/unit/Factory/Formatter/LineFormatterFactoryTest.php b/test/unit/Factory/Formatter/LineFormatterFactoryTest.php new file mode 100755 index 0000000..0f3c177 --- /dev/null +++ b/test/unit/Factory/Formatter/LineFormatterFactoryTest.php @@ -0,0 +1,97 @@ + + * @package ArpTest\LaminasMonolog\Factory\Formatter + */ +final class LineFormatterFactoryTest extends TestCase +{ + /** + * @var ContainerInterface&MockObject + */ + private ContainerInterface $container; + + public function setUp(): void + { + $this->container = $this->createMock(ContainerInterface::class); + } + + public function testImplementsFactoryInterface(): void + { + $factory = new LineFormatterFactory(); + + $this->assertInstanceOf(FactoryInterface::class, $factory); + } + + /** + * @dataProvider getInvokeWillReturnConfiguredLineFormatterInstanceData + * + * @param array $options + * + * @throws ServiceNotCreatedException + * @throws ContainerExceptionInterface + */ + public function testInvokeWillReturnConfiguredLineFormatterInstance(array $options): void + { + $factory = new LineFormatterFactory(); + + $formatter = $factory($this->container, LineFormatter::class, $options); + + if (isset($options['date_format'])) { + $this->assertSame($options['date_format'], $formatter->getDateFormat()); + } + + if (isset($options['max_normalize_depth'])) { + $this->assertSame($options['max_normalize_depth'], $formatter->getMaxNormalizeDepth()); + } + + $this->assertInstanceOf(LineFormatter::class, $formatter); + } + + /** + * @return array + */ + public function getInvokeWillReturnConfiguredLineFormatterInstanceData(): array + { + return [ + [ + [], + ], + [ + [ + 'date_format' => 'Y-m-d H:i:s', + ], + ], + [ + [ + 'max_normalize_depth' => 100, + ], + ], + [ + [ + 'max_normalize_item_count' => 2000, + 'json_pretty_print' => true, + 'json_encode_options' => [ + \JSON_THROW_ON_ERROR, + ] + ] + ], + ]; + } +} diff --git a/test/unit/Factory/Handler/NullHandlerFactoryTest.php b/test/unit/Factory/Handler/NullHandlerFactoryTest.php new file mode 100755 index 0000000..f6900c0 --- /dev/null +++ b/test/unit/Factory/Handler/NullHandlerFactoryTest.php @@ -0,0 +1,81 @@ + + * @package Factory\Handler + */ +final class NullHandlerFactoryTest extends TestCase +{ + /** + * @var ContainerInterface&MockObject + */ + private ContainerInterface $container; + + /** + * Prepare the test case dependencies + */ + public function setUp(): void + { + $this->container = $this->createMock(ContainerInterface::class); + } + + /** + * Assert that the factory implements FactoryInterface + */ + public function testImplementsFactoryInterface(): void + { + $factory = new NullHandlerFactory(); + + $this->assertInstanceOf(FactoryInterface::class, $factory); + } + + /** + * @dataProvider getInvokeWillReturnConfiguredNullHandlerInstanceData + * + * @param array $options + * + * @throws ServiceNotCreatedException + * @throws ContainerExceptionInterface + */ + public function testInvokeWillReturnConfiguredNullHandlerInstance(array $options): void + { + $factory = new NullHandlerFactory(); + + $handler = $factory($this->container, NullHandler::class, $options); + + $this->assertInstanceOf(NullHandler::class, $handler); + } + + /** + * @return array + */ + public function getInvokeWillReturnConfiguredNullHandlerInstanceData(): array + { + return [ + [ + [] + ], + [ + [ + 'level' => Logger::CRITICAL, + ] + ] + ]; + } +} From 1799f6c8b555e053fb32518b31ef2a724e6e71f6 Mon Sep 17 00:00:00 2001 From: Alex Patterson Date: Sun, 20 Mar 2022 16:31:49 +0000 Subject: [PATCH 7/9] Update composer.json and composer.lock --- composer.json | 3 ++- composer.lock | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 34ff1ed..1bd7def 100755 --- a/composer.json +++ b/composer.json @@ -13,7 +13,8 @@ "require" : { "php": ">=7.4 || >=8.0", "alex-patterson-webdev/laminas-factory" : "^3.0.0", - "monolog/monolog" : "^2.2" + "monolog/monolog" : "^2.2", + "ext-json": "*" }, "require-dev" : { "phpspec/prophecy": "^1.15.0", diff --git a/composer.lock b/composer.lock index bd85dd5..5e2f0b4 100755 --- 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": "c44bdd3086d3e29ab4fe0b99023f6f62", + "content-hash": "368974df1b829e15e4c7b89285673423", "packages": [ { "name": "alex-patterson-webdev/laminas-factory", @@ -4568,7 +4568,8 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": ">=7.4 || >=8.0" + "php": ">=7.4 || >=8.0", + "ext-json": "*" }, "platform-dev": [], "plugin-api-version": "2.0.0" From 8194f5b55d5e06c34ccde0c73cec3d656952bb31 Mon Sep 17 00:00:00 2001 From: Alex Patterson Date: Sun, 20 Mar 2022 16:45:41 +0000 Subject: [PATCH 8/9] Add new test case coverage for PsrHanlderFactrory --- src/Factory/FactoryFormatterProviderTrait.php | 4 + src/Factory/FactoryLoggerProviderTrait.php | 15 ++- src/Factory/Handler/PsrHandlerFactory.php | 8 +- .../Factory/Handler/PsrHandlerFactoryTest.php | 104 ++++++++++++++++++ 4 files changed, 123 insertions(+), 8 deletions(-) create mode 100755 test/unit/Factory/Handler/PsrHandlerFactoryTest.php diff --git a/src/Factory/FactoryFormatterProviderTrait.php b/src/Factory/FactoryFormatterProviderTrait.php index 5f13570..3ec7340 100755 --- a/src/Factory/FactoryFormatterProviderTrait.php +++ b/src/Factory/FactoryFormatterProviderTrait.php @@ -7,7 +7,9 @@ use Laminas\ServiceManager\Exception\ServiceNotCreatedException; use Laminas\ServiceManager\Exception\ServiceNotFoundException; use Monolog\Formatter\FormatterInterface; +use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; +use Psr\Container\NotFoundExceptionInterface; /** * Trait used to allow factories to resolve a Formatter from configuration options @@ -25,6 +27,8 @@ trait FactoryFormatterProviderTrait * @return FormatterInterface * * @throws ServiceNotCreatedException + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface */ private function getFormatter( ContainerInterface $container, diff --git a/src/Factory/FactoryLoggerProviderTrait.php b/src/Factory/FactoryLoggerProviderTrait.php index 350818c..2deb05a 100755 --- a/src/Factory/FactoryLoggerProviderTrait.php +++ b/src/Factory/FactoryLoggerProviderTrait.php @@ -8,6 +8,9 @@ use Laminas\ServiceManager\Exception\ServiceNotFoundException; use Laminas\ServiceManager\ServiceLocatorInterface; use Monolog\Logger; +use Psr\Container\ContainerExceptionInterface; +use Psr\Container\ContainerInterface; +use Psr\Container\NotFoundExceptionInterface; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; @@ -25,15 +28,17 @@ trait FactoryLoggerProviderTrait protected string $loggerService = Logger::class; /** - * @param ServiceLocatorInterface $container - * @param LoggerInterface|string|array $logger - * @param string $serviceName + * @param ContainerInterface|ServiceLocatorInterface $container + * @param LoggerInterface|string|array $logger + * @param string $serviceName * * @return LoggerInterface * * @throws ServiceNotCreatedException + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface */ - public function getLogger(ServiceLocatorInterface $container, $logger, string $serviceName): LoggerInterface + public function getLogger(ContainerInterface $container, $logger, string $serviceName): LoggerInterface { if (is_string($logger)) { if (!$container->has($logger)) { @@ -45,7 +50,7 @@ public function getLogger(ServiceLocatorInterface $container, $logger, string $s $logger = $container->get($logger); } - if (is_array($logger)) { + if (is_array($logger) && $container instanceof ServiceLocatorInterface) { $logger = $container->build($this->loggerService, $logger); } diff --git a/src/Factory/Handler/PsrHandlerFactory.php b/src/Factory/Handler/PsrHandlerFactory.php index f1f6429..a9138f9 100755 --- a/src/Factory/Handler/PsrHandlerFactory.php +++ b/src/Factory/Handler/PsrHandlerFactory.php @@ -11,6 +11,7 @@ use Laminas\ServiceManager\ServiceLocatorInterface; use Monolog\Handler\PsrHandler; use Monolog\Logger; +use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; use Psr\Log\LogLevel; @@ -27,13 +28,14 @@ final class PsrHandlerFactory extends AbstractFactory use FactoryFormatterProviderTrait; /** - * @param ContainerInterface&ServiceLocatorInterface $container - * @param string $requestedName - * @param array|null $options + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options * * @return PsrHandler * * @throws ServiceNotCreatedException + * @throws ContainerExceptionInterface */ public function __invoke(ContainerInterface $container, string $requestedName, array $options = null): PsrHandler { diff --git a/test/unit/Factory/Handler/PsrHandlerFactoryTest.php b/test/unit/Factory/Handler/PsrHandlerFactoryTest.php new file mode 100755 index 0000000..cbc7a44 --- /dev/null +++ b/test/unit/Factory/Handler/PsrHandlerFactoryTest.php @@ -0,0 +1,104 @@ + + * @package ArpTest\LaminasMonolog\Factory\Handler + */ +final class PsrHandlerFactoryTest extends TestCase +{ + /** + * @var ContainerInterface&MockObject + */ + private ContainerInterface $container; + + /** + * Prepare the test case dependencies + */ + public function setUp(): void + { + $this->container = $this->createMock(ContainerInterface::class); + } + + /** + * Assert that the factory implements FactoryInterface + */ + public function testImplementsFactoryInterface(): void + { + $factory = new PsrHandlerFactory(); + + $this->assertInstanceOf(FactoryInterface::class, $factory); + } + + /** + * @throws ContainerExceptionInterface + */ + public function testServiceNotCreatedExceptionIsThrownIfNotLoggerOptionIsProvided(): void + { + $factory = new PsrHandlerFactory(); + + $requestedName = 'LoggerServiceName'; + + $this->expectException(ServiceNotCreatedException::class); + $this->expectExceptionMessage( + sprintf('The required \'logger\' configuration option is missing for service \'%s\'', $requestedName) + ); + + $factory($this->container, $requestedName, []); + } + + /** + * @dataProvider getInvokeWillReturnConfiguredPsrHandlerInstanceData + * + * @param array $options + * + * @throws ServiceNotCreatedException + * @throws ContainerExceptionInterface + */ + public function testInvokeWillReturnConfiguredPsrHandlerInstance(array $options): void + { + $factory = new PsrHandlerFactory(); + + $handler = $factory($this->container, PsrHandler::class, $options); + + $this->assertInstanceOf(PsrHandler::class, $handler); + } + + /** + * @return array + */ + public function getInvokeWillReturnConfiguredPsrHandlerInstanceData(): array + { + return [ + [ + [ + 'logger' => $this->createMock(LoggerInterface::class), + ] + ], + [ + [ + 'logger' => $this->createMock(LoggerInterface::class), + 'level' => Logger::CRITICAL, + ] + ] + ]; + } +} From 31ac9428ae3c8e2be0167aa4a69d9ddfe7f7e57f Mon Sep 17 00:00:00 2001 From: Alex Patterson Date: Sun, 20 Mar 2022 16:47:48 +0000 Subject: [PATCH 9/9] Add new test case coverage for PsrHandlerFactory to include the setting of a Handler instance --- test/unit/Factory/Handler/PsrHandlerFactoryTest.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/unit/Factory/Handler/PsrHandlerFactoryTest.php b/test/unit/Factory/Handler/PsrHandlerFactoryTest.php index cbc7a44..007a6de 100755 --- a/test/unit/Factory/Handler/PsrHandlerFactoryTest.php +++ b/test/unit/Factory/Handler/PsrHandlerFactoryTest.php @@ -7,6 +7,7 @@ use Arp\LaminasFactory\FactoryInterface; use Arp\LaminasMonolog\Factory\Handler\PsrHandlerFactory; use Laminas\ServiceManager\Exception\ServiceNotCreatedException; +use Monolog\Handler\HandlerInterface; use Monolog\Handler\PsrHandler; use Monolog\Logger; use PHPUnit\Framework\MockObject\MockObject; @@ -98,6 +99,12 @@ public function getInvokeWillReturnConfiguredPsrHandlerInstanceData(): array 'logger' => $this->createMock(LoggerInterface::class), 'level' => Logger::CRITICAL, ] + ], + [ + [ + 'logger' => $this->createMock(LoggerInterface::class), + 'handler' => $this->createMock(HandlerInterface::class), + ] ] ]; }