From 7f40bc0c77007ac599bb02bf4c71cf8297cd7227 Mon Sep 17 00:00:00 2001 From: George Steel Date: Fri, 29 Jul 2022 21:57:30 +0100 Subject: [PATCH 01/13] Adds replacement `ServerUrl` helper Signed-off-by: George Steel --- src/ConfigProvider.php | 51 ++++++++++ src/Exception/ExceptionInterface.php | 11 +++ src/Exception/HostNameDetectionException.php | 15 +++ src/Helper/Factory/ServerUrlFactory.php | 69 ++++++++++++++ src/Helper/ServerUrl.php | 40 ++++++++ src/Module.php | 21 +++++ test/Helper/Factory/ServerUrlFactoryTest.php | 97 ++++++++++++++++++++ test/Helper/ServerUrlTest.php | 59 ++++++++++++ 8 files changed, 363 insertions(+) create mode 100644 src/ConfigProvider.php create mode 100644 src/Exception/ExceptionInterface.php create mode 100644 src/Exception/HostNameDetectionException.php create mode 100644 src/Helper/Factory/ServerUrlFactory.php create mode 100644 src/Helper/ServerUrl.php create mode 100644 src/Module.php create mode 100644 test/Helper/Factory/ServerUrlFactoryTest.php create mode 100644 test/Helper/ServerUrlTest.php diff --git a/src/ConfigProvider.php b/src/ConfigProvider.php new file mode 100644 index 0000000..3731eca --- /dev/null +++ b/src/ConfigProvider.php @@ -0,0 +1,51 @@ + */ + public function __invoke(): array + { + return [ + 'dependencies' => $this->getDependencyConfig(), + 'view_helpers' => $this->getViewHelperConfig(), + /** + * Configuration for Individual View Helpers + */ + 'view_helper_config' => [ + /** + * The server url can be statically configured - this is useful when you want to render views in + * processes outside a traditional web server environment. + * + * The value should be an absolute url, or left blank, in which case, it will be detected at runtime. + */ + 'server_url' => null, // i.e 'https://example.com' + ], + ]; + } + + /** @return ServiceManagerConfigurationType */ + public function getDependencyConfig(): array + { + return []; + } + + /** @return ServiceManagerConfigurationType */ + public function getViewHelperConfig(): array + { + return [ + 'factories' => [ + Helper\ServerUrl::class => Helper\Factory\ServerUrlFactory::class, + ], + 'aliases' => [ + 'serverUrl' => Helper\ServerUrl::class, + ], + ]; + } +} diff --git a/src/Exception/ExceptionInterface.php b/src/Exception/ExceptionInterface.php new file mode 100644 index 0000000..5a81cfb --- /dev/null +++ b/src/Exception/ExceptionInterface.php @@ -0,0 +1,11 @@ +fetchConfiguredServerUrl($container) ?? $this->detectServerUrlFromEnvironment($container) + ); + } + + /** @return non-empty-string|null */ + private function fetchConfiguredServerUrl(ContainerInterface $container): ?string + { + if (! $container->has('config')) { + return null; + } + + $config = $container->get('config'); + assert(is_array($config) || $config instanceof ArrayAccess); + + $helperConfig = $config['view_helper_config'] ?? []; + assert(is_array($helperConfig)); + + $serverUrl = $helperConfig['server_url'] ?? null; + assert(is_string($serverUrl) || $serverUrl === null); + + return $serverUrl === '' ? null : $serverUrl; + } + + /** @return non-empty-string */ + private function detectServerUrlFromEnvironment(ContainerInterface $container): string + { + /** + * laminas-mvc uses laminas-http + */ + $laminasRequest = $container->has(Request::class) + ? $container->get(Request::class) + : new Request(); + + $uri = clone $laminasRequest->getUri(); + $uri->setFragment(null); + $uri->setPath(null); + $uri->setQuery(null); + + if (! $uri->getHost() || ! $uri->getScheme()) { + throw HostNameDetectionException::withMissingHostOrScheme(); + } + + $uri = (string) $uri; + assert($uri !== ''); + + return $uri; + } +} diff --git a/src/Helper/ServerUrl.php b/src/Helper/ServerUrl.php new file mode 100644 index 0000000..c632285 --- /dev/null +++ b/src/Helper/ServerUrl.php @@ -0,0 +1,40 @@ +serverUrl = $serverUrl; + } + + /** + * Return an absolute URL, optionally prepended to the given path + * + * @param string|null $path Optional path to be appended to the base server url + * @return non-empty-string + */ + public function __invoke(?string $path = null): string + { + $path = is_string($path) && $path !== '' + ? '/' . ltrim($path, '/') + : ''; + + return $this->serverUrl . $path; + } +} diff --git a/src/Module.php b/src/Module.php new file mode 100644 index 0000000..07583f6 --- /dev/null +++ b/src/Module.php @@ -0,0 +1,21 @@ + $provider->getDependencyConfig(), + ], $config); + } +} diff --git a/test/Helper/Factory/ServerUrlFactoryTest.php b/test/Helper/Factory/ServerUrlFactoryTest.php new file mode 100644 index 0000000..bc498dc --- /dev/null +++ b/test/Helper/Factory/ServerUrlFactoryTest.php @@ -0,0 +1,97 @@ +factory = new ServerUrlFactory(); + } + + public function testThatWhenAUriIsConfiguredItWillBeUsedToSeedTheHelper(): void + { + $container = $this->createMock(ContainerInterface::class); + $container->expects(self::once()) + ->method('has') + ->with('config') + ->willReturn(true); + $container->expects(self::once()) + ->method('get') + ->with('config') + ->willReturn([ + 'view_helper_config' => [ + 'server_url' => 'https://muppets.com', + ], + ]); + + self::assertSame( + 'https://muppets.com', + $this->factory->__invoke($container)->__invoke() + ); + } + + /** + * @backupGlobals enabled + */ + public function testThatWhenThereIsNoConfigAndNoRequestInTheContainerANewRequestWillBeCreatedFromServerVars(): void + { + $_SERVER['SERVER_NAME'] = 'goats.com'; + $_SERVER['HTTPS'] = 'on'; + + $container = $this->createMock(ContainerInterface::class); + $container->expects(self::exactly(2)) + ->method('has') + ->willReturn(false); + + self::assertSame( + 'https://goats.com', + $this->factory->__invoke($container)->__invoke() + ); + } + + public function testAnExceptionWillBeThrownWhenTheUrlCannotBeDeterminedViaSuperGlobals(): void + { + $container = $this->createMock(ContainerInterface::class); + $container->expects(self::exactly(2)) + ->method('has') + ->willReturn(false); + + $this->expectException(HostNameDetectionException::class); + $this->factory->__invoke($container); + } + + public function testTheRequestWillBeRetrievedFromTheContainerWhenAvailable(): void + { + $request = new Request(); + $request->setUri('https://elephants.com/foo?bar=baz'); + + $container = $this->createMock(ContainerInterface::class); + $container->expects(self::exactly(2)) + ->method('has') + ->willReturnMap([ + ['config', false], + [Request::class, true], + ]); + $container->expects(self::once()) + ->method('get') + ->with(Request::class) + ->willReturn($request); + + self::assertSame( + 'https://elephants.com', + $this->factory->__invoke($container)->__invoke() + ); + } +} diff --git a/test/Helper/ServerUrlTest.php b/test/Helper/ServerUrlTest.php new file mode 100644 index 0000000..c0cc83e --- /dev/null +++ b/test/Helper/ServerUrlTest.php @@ -0,0 +1,59 @@ +helper = new ServerUrl('https://example.com'); + } + + public function testHelperWillReturnTheConfiguredUrlWhenCalledWithoutArgument(): void + { + self::assertSame('https://example.com', $this->helper->__invoke()); + } + + /** @return list */ + public function pathProvider(): array + { + return [ + ['/foo', 'https://example.com/foo'], + ['foo', 'https://example.com/foo'], + ['/foo/bar', 'https://example.com/foo/bar'], + ['///foo', 'https://example.com/foo'], + ['/foo/', 'https://example.com/foo/'], + ['/', 'https://example.com/'], + ]; + } + + /** + * @param non-empty-string $path + * @dataProvider pathProvider + */ + public function testPathArgumentsYieldTheExpectedUrl(string $path, string $expect): void + { + self::assertSame($expect, $this->helper->__invoke($path)); + } + + public function testAnEmptyStringCanBeGivenAsAPathWithTheSameResultAsNoPathArgument(): void + { + /** @psalm-suppress InvalidArgument */ + self::assertSame('https://example.com', $this->helper->__invoke('')); + } + + public function testThatTheBaseUrlHasTrailingSlashesTrimmed(): void + { + $helper = new ServerUrl('https://foo.com////'); + self::assertSame('https://foo.com', $helper->__invoke()); + } +} From b5c74441d7e37b6a39a4680da498161b2e136efa Mon Sep 17 00:00:00 2001 From: George Steel Date: Mon, 8 Aug 2022 15:25:25 +0100 Subject: [PATCH 02/13] config.platform should be 7.4.99 Signed-off-by: George Steel --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 642625d..b19622d 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,7 @@ "config": { "sort-packages": true, "platform": { - "php": "7.4" + "php": "7.4.99" }, "allow-plugins": { "dealerdirect/phpcodesniffer-composer-installer": true From e160df6e0ff6136f111f0a55813cac2160667219 Mon Sep 17 00:00:00 2001 From: George Steel Date: Mon, 8 Aug 2022 15:27:18 +0100 Subject: [PATCH 03/13] Introduce a thin wrapper around webmozart/assert marking as `@internal` Signed-off-by: George Steel --- composer.json | 3 ++- src/Assert.php | 23 ++++++++++++++++++++++ src/Exception/AssertionFailedException.php | 11 +++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 src/Assert.php create mode 100644 src/Exception/AssertionFailedException.php diff --git a/composer.json b/composer.json index b19622d..3f149fe 100644 --- a/composer.json +++ b/composer.json @@ -28,7 +28,8 @@ "php": "^7.4 || ~8.0.0 || ~8.1.0", "laminas/laminas-http": "^2.15", "laminas/laminas-servicemanager": "^3.16.0", - "psr/container": "^1 || ^2" + "psr/container": "^1 || ^2", + "webmozart/assert": "^1.11.0" }, "require-dev": { "laminas/laminas-coding-standard": "~2.3.0", diff --git a/src/Assert.php b/src/Assert.php new file mode 100644 index 0000000..2a76114 --- /dev/null +++ b/src/Assert.php @@ -0,0 +1,23 @@ + Date: Mon, 8 Aug 2022 15:58:54 +0100 Subject: [PATCH 04/13] Introduce a factory for the Doctype view helper. This factory and default configuration preserves the historic method of configuring the doctype for an MVC application Signed-off-by: George Steel --- composer.json | 1 + src/ConfigProvider.php | 15 ++++ src/Helper/Factory/DoctypeFactory.php | 39 +++++++++ test/Helper/Factory/DoctypeFactoryTest.php | 95 ++++++++++++++++++++++ 4 files changed, 150 insertions(+) create mode 100644 src/Helper/Factory/DoctypeFactory.php create mode 100644 test/Helper/Factory/DoctypeFactoryTest.php diff --git a/composer.json b/composer.json index 3f149fe..e9fd186 100644 --- a/composer.json +++ b/composer.json @@ -28,6 +28,7 @@ "php": "^7.4 || ~8.0.0 || ~8.1.0", "laminas/laminas-http": "^2.15", "laminas/laminas-servicemanager": "^3.16.0", + "laminas/laminas-view": "^2.22.0", "psr/container": "^1 || ^2", "webmozart/assert": "^1.11.0" }, diff --git a/src/ConfigProvider.php b/src/ConfigProvider.php index 3731eca..933ef37 100644 --- a/src/ConfigProvider.php +++ b/src/ConfigProvider.php @@ -5,6 +5,7 @@ namespace Laminas\Mvc\View; use Laminas\ServiceManager\ConfigInterface; +use Laminas\View\Helper as ViewHelper; /** @psalm-import-type ServiceManagerConfigurationType from ConfigInterface */ final class ConfigProvider @@ -27,6 +28,16 @@ public function __invoke(): array */ 'server_url' => null, // i.e 'https://example.com' ], + /** + * MVC has historically used the `view_manager` top-level key for a range of configuration options + */ + 'view_manager' => [ + /** + * Configure a doctype for HTML views by selecting one of the available constants in the + * {@link ViewHelper\Doctype} helper class. + */ + 'doctype' => null, + ], ]; } @@ -42,6 +53,10 @@ public function getViewHelperConfig(): array return [ 'factories' => [ Helper\ServerUrl::class => Helper\Factory\ServerUrlFactory::class, + /** + * Factories for helpers in Laminas\View + */ + ViewHelper\Doctype::class => Helper\Factory\DoctypeFactory::class, ], 'aliases' => [ 'serverUrl' => Helper\ServerUrl::class, diff --git a/src/Helper/Factory/DoctypeFactory.php b/src/Helper/Factory/DoctypeFactory.php new file mode 100644 index 0000000..27c7b4e --- /dev/null +++ b/src/Helper/Factory/DoctypeFactory.php @@ -0,0 +1,39 @@ +has('config')) { + return $helper; + } + + $config = $container->get('config'); + assert(is_array($config) || $config instanceof ArrayAccess); + + $options = $config['view_manager'] ?? []; + assert(is_array($options)); + + /** @var mixed $doctype */ + $doctype = $options['doctype'] ?? null; + if (is_string($doctype)) { + $helper->setDoctype($doctype); + } + + return $helper; + } +} diff --git a/test/Helper/Factory/DoctypeFactoryTest.php b/test/Helper/Factory/DoctypeFactoryTest.php new file mode 100644 index 0000000..87e34ed --- /dev/null +++ b/test/Helper/Factory/DoctypeFactoryTest.php @@ -0,0 +1,95 @@ +factory = new DoctypeFactory(); + $this->container = $this->createMock(ContainerInterface::class); + Doctype::unsetDoctypeRegistry(); // Overcome nasty static state + } + + public function testAHelperWillBeReturnedWhenNoConfigIsFound(): void + { + $this->container->expects(self::once()) + ->method('has') + ->with('config') + ->willReturn(false); + + $this->container->expects(self::never()) + ->method('get'); + + $this->factory->__invoke($this->container); + } + + public function testThatTheDoctypeWillBeAsConfiguredWhenAppropriateConfigCanBeFound(): void + { + $config = [ + 'view_manager' => [ + 'doctype' => Doctype::HTML4_FRAMESET, + ], + ]; + + $this->container->expects(self::once()) + ->method('has') + ->with('config') + ->willReturn(true); + + $this->container->expects(self::once()) + ->method('get') + ->with('config') + ->willReturn($config); + + $helper = $this->factory->__invoke($this->container); + + self::assertEquals(Doctype::HTML4_FRAMESET, $helper->getDoctype()); + } + + /** @return array, 1: string}> */ + public function configProvider(): array + { + $helper = new Doctype(); + $default = $helper->getDoctype(); + + return [ + 'Empty Config' => [[], $default], + 'Missing Doctype Key' => [['view_manager' => []], $default], + 'Doctype Configured' => [['view_manager' => ['doctype' => Doctype::XHTML1_RDFA]], Doctype::XHTML1_RDFA], + 'Doctype Explicit Null' => [['view_manager' => ['doctype' => null]], $default], + ]; + } + + /** @dataProvider configProvider */ + public function testConfigScenarios(iterable $config, string $expectedDoctype): void + { + $this->container->expects(self::once()) + ->method('has') + ->with('config') + ->willReturn(true); + + $this->container->expects(self::once()) + ->method('get') + ->with('config') + ->willReturn($config); + + $helper = $this->factory->__invoke($this->container); + + self::assertEquals($expectedDoctype, $helper->getDoctype()); + } +} From f29846fbb2e9a9e73ae414af428e8297359c87c3 Mon Sep 17 00:00:00 2001 From: George Steel Date: Mon, 8 Aug 2022 17:10:34 +0100 Subject: [PATCH 05/13] Add Url helper to preserve BC with legacy `Laminas\View\Helper\Url` Signed-off-by: George Steel --- composer.json | 5 +- composer.lock | 1218 +++++++++++++++----- psalm-baseline.xml | 8 + psalm.xml | 1 + src/ConfigProvider.php | 2 + src/Exception/RouteNotMatchedException.php | 15 + src/Helper/Factory/UrlFactory.php | 39 + src/Helper/Url.php | 95 ++ test/Helper/Factory/UrlFactoryTest.php | 44 + test/Helper/UrlTest.php | 199 ++++ 10 files changed, 1333 insertions(+), 293 deletions(-) create mode 100644 psalm-baseline.xml create mode 100644 src/Exception/RouteNotMatchedException.php create mode 100644 src/Helper/Factory/UrlFactory.php create mode 100644 src/Helper/Url.php create mode 100644 test/Helper/Factory/UrlFactoryTest.php create mode 100644 test/Helper/UrlTest.php diff --git a/composer.json b/composer.json index e9fd186..6815020 100644 --- a/composer.json +++ b/composer.json @@ -26,8 +26,11 @@ }, "require": { "php": "^7.4 || ~8.0.0 || ~8.1.0", - "laminas/laminas-http": "^2.15", + "laminas/laminas-http": "^2.15.1", + "laminas/laminas-mvc": "^3.3.3", + "laminas/laminas-router": "^3.7.0", "laminas/laminas-servicemanager": "^3.16.0", + "laminas/laminas-stdlib": "^3.11", "laminas/laminas-view": "^2.22.0", "psr/container": "^1 || ^2", "webmozart/assert": "^1.11.0" diff --git a/composer.lock b/composer.lock index 4c1c070..ed8068e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,125 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "1787c715b2f93009e4894d132a3de23f", + "content-hash": "a59befc7b96df3a9a3ecd520b3c272b0", "packages": [ + { + "name": "brick/varexporter", + "version": "0.3.7", + "source": { + "type": "git", + "url": "https://github.com/brick/varexporter.git", + "reference": "3e263cd718d242594c52963760fee2059fd5833c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/varexporter/zipball/3e263cd718d242594c52963760fee2059fd5833c", + "reference": "3e263cd718d242594c52963760fee2059fd5833c", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.0", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^8.5 || ^9.0", + "vimeo/psalm": "4.23.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\VarExporter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A powerful alternative to var_export(), which can export closures and objects without __set_state()", + "keywords": [ + "var_export" + ], + "support": { + "issues": "https://github.com/brick/varexporter/issues", + "source": "https://github.com/brick/varexporter/tree/0.3.7" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2022-06-29T23:37:57+00:00" + }, + { + "name": "laminas/laminas-config", + "version": "3.7.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-config.git", + "reference": "e43d13dcfc273d4392812eb395ce636f73f34dfd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-config/zipball/e43d13dcfc273d4392812eb395ce636f73f34dfd", + "reference": "e43d13dcfc273d4392812eb395ce636f73f34dfd", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laminas/laminas-stdlib": "^3.6", + "php": "^7.3 || ~8.0.0 || ~8.1.0", + "psr/container": "^1.0" + }, + "conflict": { + "container-interop/container-interop": "<1.2.0", + "zendframework/zend-config": "*" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-filter": "^2.7.2", + "laminas/laminas-i18n": "^2.10.3", + "laminas/laminas-servicemanager": "^3.7", + "phpunit/phpunit": "^9.5.5" + }, + "suggest": { + "laminas/laminas-filter": "^2.7.2; install if you want to use the Filter processor", + "laminas/laminas-i18n": "^2.7.4; install if you want to use the Translator processor", + "laminas/laminas-servicemanager": "^2.7.8 || ^3.3; if you need an extensible plugin manager for use with the Config Factory" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Config\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a nested object property based user interface for accessing this configuration data within application code", + "homepage": "https://laminas.dev", + "keywords": [ + "config", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-config/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-config/issues", + "rss": "https://github.com/laminas/laminas-config/releases.atom", + "source": "https://github.com/laminas/laminas-config" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-10-01T16:07:46+00:00" + }, { "name": "laminas/laminas-escaper", "version": "2.10.0", @@ -68,6 +185,73 @@ ], "time": "2022-03-08T20:15:36+00:00" }, + { + "name": "laminas/laminas-eventmanager", + "version": "3.5.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-eventmanager.git", + "reference": "41f7209428f37cab9573365e361f4078209aaafa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/41f7209428f37cab9573365e361f4078209aaafa", + "reference": "41f7209428f37cab9573365e361f4078209aaafa", + "shasum": "" + }, + "require": { + "php": "^7.4 || ~8.0.0 || ~8.1.0" + }, + "conflict": { + "container-interop/container-interop": "<1.2", + "zendframework/zend-eventmanager": "*" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~2.2.1", + "laminas/laminas-stdlib": "^3.6", + "phpbench/phpbench": "^1.1", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5.5", + "psr/container": "^1.1.2 || ^2.0.2" + }, + "suggest": { + "laminas/laminas-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature", + "psr/container": "^1.1.2 || ^2.0.2, to use the lazy listeners feature" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\EventManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Trigger and listen to events within a PHP application", + "homepage": "https://laminas.dev", + "keywords": [ + "event", + "eventmanager", + "events", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-eventmanager/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-eventmanager/issues", + "rss": "https://github.com/laminas/laminas-eventmanager/releases.atom", + "source": "https://github.com/laminas/laminas-eventmanager" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2022-04-06T21:05:17+00:00" + }, { "name": "laminas/laminas-http", "version": "2.15.1", @@ -133,6 +317,67 @@ ], "time": "2021-12-03T10:17:11+00:00" }, + { + "name": "laminas/laminas-json", + "version": "3.3.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-json.git", + "reference": "9a0ce9f330b7d11e70c4acb44d67e8c4f03f437f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-json/zipball/9a0ce9f330b7d11e70c4acb44d67e8c4f03f437f", + "reference": "9a0ce9f330b7d11e70c4acb44d67e8c4f03f437f", + "shasum": "" + }, + "require": { + "php": "^7.3 || ~8.0.0 || ~8.1.0" + }, + "conflict": { + "zendframework/zend-json": "*" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~2.2.1", + "laminas/laminas-stdlib": "^2.7.7 || ^3.1", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "laminas/laminas-json-server": "For implementing JSON-RPC servers", + "laminas/laminas-xml2json": "For converting XML documents to JSON" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Json\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP", + "homepage": "https://laminas.dev", + "keywords": [ + "json", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-json/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-json/issues", + "rss": "https://github.com/laminas/laminas-json/releases.atom", + "source": "https://github.com/laminas/laminas-json" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-09-02T18:02:31+00:00" + }, { "name": "laminas/laminas-loader", "version": "2.8.0", @@ -190,87 +435,66 @@ "time": "2021-09-02T18:30:53+00:00" }, { - "name": "laminas/laminas-servicemanager", - "version": "3.16.0", + "name": "laminas/laminas-modulemanager", + "version": "2.11.0", "source": { "type": "git", - "url": "https://github.com/laminas/laminas-servicemanager.git", - "reference": "863c66733740cd36ebf5e700f4258ef2c68a2a24" + "url": "https://github.com/laminas/laminas-modulemanager.git", + "reference": "6acf5991d10b0b38a2edb08729ed48981b2a5dad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/863c66733740cd36ebf5e700f4258ef2c68a2a24", - "reference": "863c66733740cd36ebf5e700f4258ef2c68a2a24", + "url": "https://api.github.com/repos/laminas/laminas-modulemanager/zipball/6acf5991d10b0b38a2edb08729ed48981b2a5dad", + "reference": "6acf5991d10b0b38a2edb08729ed48981b2a5dad", "shasum": "" }, "require": { - "laminas/laminas-stdlib": "^3.2.1", - "php": "~7.4.0 || ~8.0.0 || ~8.1.0", - "psr/container": "^1.0" + "brick/varexporter": "^0.3.2", + "laminas/laminas-config": "^3.7", + "laminas/laminas-eventmanager": "^3.4", + "laminas/laminas-stdlib": "^3.6", + "php": "^7.3 || ~8.0.0 || ~8.1.0", + "webimpress/safe-writer": "^1.0.2 || ^2.1" }, "conflict": { - "ext-psr": "*", - "laminas/laminas-code": "<3.3.1", - "zendframework/zend-code": "<3.3.1", - "zendframework/zend-servicemanager": "*" - }, - "provide": { - "psr/container-implementation": "^1.0" - }, - "replace": { - "container-interop/container-interop": "^1.2.0" + "zendframework/zend-modulemanager": "*" }, "require-dev": { - "composer/package-versions-deprecated": "^1.0", - "laminas/laminas-coding-standard": "~2.3.0", - "laminas/laminas-container-config-test": "^0.7", - "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.5.5", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.8" + "laminas/laminas-coding-standard": "^2.3", + "laminas/laminas-loader": "^2.8", + "laminas/laminas-mvc": "^3.1.1", + "laminas/laminas-servicemanager": "^3.7", + "phpunit/phpunit": "^9.5.5" }, "suggest": { - "ocramius/proxy-manager": "ProxyManager ^2.1.1 to handle lazy initialization of services" + "laminas/laminas-console": "Laminas\\Console component", + "laminas/laminas-loader": "Laminas\\Loader component if you are not using Composer autoloading for your modules", + "laminas/laminas-mvc": "Laminas\\Mvc component", + "laminas/laminas-servicemanager": "Laminas\\ServiceManager component" }, - "bin": [ - "bin/generate-deps-for-config-factory", - "bin/generate-factory-for-class" - ], "type": "library", "autoload": { - "files": [ - "src/autoload.php" - ], "psr-4": { - "Laminas\\ServiceManager\\": "src/" + "Laminas\\ModuleManager\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "Factory-Driven Dependency Injection Container", + "description": "Modular application system for laminas-mvc applications", "homepage": "https://laminas.dev", "keywords": [ - "PSR-11", - "dependency-injection", - "di", - "dic", "laminas", - "service-manager", - "servicemanager" + "modulemanager" ], "support": { "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-servicemanager/", + "docs": "https://docs.laminas.dev/laminas-modulemanager/", "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-servicemanager/issues", - "rss": "https://github.com/laminas/laminas-servicemanager/releases.atom", - "source": "https://github.com/laminas/laminas-servicemanager" + "issues": "https://github.com/laminas/laminas-modulemanager/issues", + "rss": "https://github.com/laminas/laminas-modulemanager/releases.atom", + "source": "https://github.com/laminas/laminas-modulemanager" }, "funding": [ { @@ -278,58 +502,81 @@ "type": "community_bridge" } ], - "time": "2022-07-27T14:58:17+00:00" + "time": "2021-10-13T17:05:17+00:00" }, { - "name": "laminas/laminas-stdlib", - "version": "3.11.0", + "name": "laminas/laminas-mvc", + "version": "3.3.3", "source": { "type": "git", - "url": "https://github.com/laminas/laminas-stdlib.git", - "reference": "aad7d2b11ba0069ba0d9b40f6dde3c2fa664b57f" + "url": "https://github.com/laminas/laminas-mvc.git", + "reference": "7ff2bfbe64048aa83c6d1c7edcbab849123f0150" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/aad7d2b11ba0069ba0d9b40f6dde3c2fa664b57f", - "reference": "aad7d2b11ba0069ba0d9b40f6dde3c2fa664b57f", + "url": "https://api.github.com/repos/laminas/laminas-mvc/zipball/7ff2bfbe64048aa83c6d1c7edcbab849123f0150", + "reference": "7ff2bfbe64048aa83c6d1c7edcbab849123f0150", "shasum": "" }, "require": { + "container-interop/container-interop": "^1.2", + "laminas/laminas-eventmanager": "^3.4", + "laminas/laminas-http": "^2.15", + "laminas/laminas-modulemanager": "^2.8", + "laminas/laminas-router": "^3.5", + "laminas/laminas-servicemanager": "^3.7", + "laminas/laminas-stdlib": "^3.6", + "laminas/laminas-view": "^2.14", "php": "^7.3 || ~8.0.0 || ~8.1.0" }, "conflict": { - "zendframework/zend-stdlib": "*" + "zendframework/zend-mvc": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "~2.3.0", - "phpbench/phpbench": "^1.0", - "phpunit/phpunit": "^9.3.7", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.7" + "http-interop/http-middleware": "^0.4.1", + "laminas/laminas-coding-standard": "^1.0.0", + "laminas/laminas-json": "^3.3", + "laminas/laminas-psr7bridge": "^1.0", + "laminas/laminas-stratigility": ">=2.0.1 <2.2", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5.5" + }, + "suggest": { + "laminas/laminas-json": "(^2.6.1 || ^3.0) To auto-deserialize JSON body content in AbstractRestfulController extensions, when json_decode is unavailable", + "laminas/laminas-log": "^2.9.1 To provide log functionality via LogFilterManager, LogFormatterManager, and LogProcessorManager", + "laminas/laminas-mvc-console": "laminas-mvc-console provides the ability to expose laminas-mvc as a console application", + "laminas/laminas-mvc-i18n": "laminas-mvc-i18n provides integration with laminas-i18n, including a translation bridge and translatable route segments", + "laminas/laminas-mvc-middleware": "To dispatch middleware in your laminas-mvc application", + "laminas/laminas-mvc-plugin-fileprg": "To provide Post/Redirect/Get functionality around forms that container file uploads", + "laminas/laminas-mvc-plugin-flashmessenger": "To provide flash messaging capabilities between requests", + "laminas/laminas-mvc-plugin-identity": "To access the authenticated identity (per laminas-authentication) in controllers", + "laminas/laminas-mvc-plugin-prg": "To provide Post/Redirect/Get functionality within controllers", + "laminas/laminas-paginator": "^2.7 To provide pagination functionality via PaginatorPluginManager", + "laminas/laminas-servicemanager-di": "laminas-servicemanager-di provides utilities for integrating laminas-di and laminas-servicemanager in your laminas-mvc application" }, "type": "library", "autoload": { "psr-4": { - "Laminas\\Stdlib\\": "src/" + "Laminas\\Mvc\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "description": "SPL extensions, array utilities, error handlers, and more", + "description": "Laminas's event-driven MVC layer, including MVC Applications, Controllers, and Plugins", "homepage": "https://laminas.dev", "keywords": [ "laminas", - "stdlib" + "mvc" ], "support": { "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-stdlib/", + "docs": "https://docs.laminas.dev/laminas-mvc/", "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-stdlib/issues", - "rss": "https://github.com/laminas/laminas-stdlib/releases.atom", - "source": "https://github.com/laminas/laminas-stdlib" + "issues": "https://github.com/laminas/laminas-mvc/issues", + "rss": "https://github.com/laminas/laminas-mvc/releases.atom", + "source": "https://github.com/laminas/laminas-mvc" }, "funding": [ { @@ -337,29 +584,250 @@ "type": "community_bridge" } ], - "time": "2022-07-27T12:28:58+00:00" + "time": "2022-02-21T20:21:58+00:00" }, { - "name": "laminas/laminas-uri", - "version": "2.9.1", + "name": "laminas/laminas-router", + "version": "3.7.0", "source": { "type": "git", - "url": "https://github.com/laminas/laminas-uri.git", - "reference": "7e837dc15c8fd3949df7d1213246fd7c8640032b" + "url": "https://github.com/laminas/laminas-router.git", + "reference": "0227cc29f62583dd1ca50d17d117b832edaa8cd8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-uri/zipball/7e837dc15c8fd3949df7d1213246fd7c8640032b", - "reference": "7e837dc15c8fd3949df7d1213246fd7c8640032b", + "url": "https://api.github.com/repos/laminas/laminas-router/zipball/0227cc29f62583dd1ca50d17d117b832edaa8cd8", + "reference": "0227cc29f62583dd1ca50d17d117b832edaa8cd8", "shasum": "" }, "require": { - "laminas/laminas-escaper": "^2.9", - "laminas/laminas-validator": "^2.15", - "php": "^7.3 || ~8.0.0 || ~8.1.0" + "laminas/laminas-http": "^2.15", + "laminas/laminas-servicemanager": "^3.14.0", + "laminas/laminas-stdlib": "^3.10.1", + "php": "^7.4 || ~8.0.0 || ~8.1.0" }, "conflict": { - "zendframework/zend-uri": "*" + "zendframework/zend-router": "*" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~2.2.1", + "laminas/laminas-i18n": "^2.15.0", + "phpunit/phpunit": "^9.5.5", + "psalm/plugin-phpunit": "^0.17.0", + "vimeo/psalm": "^4.24.0" + }, + "suggest": { + "laminas/laminas-i18n": "^2.15.0 if defining translatable HTTP path segments" + }, + "type": "library", + "extra": { + "laminas": { + "component": "Laminas\\Router", + "config-provider": "Laminas\\Router\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Laminas\\Router\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Flexible routing system for HTTP and console applications", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "routing" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-router/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-router/issues", + "rss": "https://github.com/laminas/laminas-router/releases.atom", + "source": "https://github.com/laminas/laminas-router" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2022-07-18T01:39:51+00:00" + }, + { + "name": "laminas/laminas-servicemanager", + "version": "3.16.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-servicemanager.git", + "reference": "863c66733740cd36ebf5e700f4258ef2c68a2a24" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/863c66733740cd36ebf5e700f4258ef2c68a2a24", + "reference": "863c66733740cd36ebf5e700f4258ef2c68a2a24", + "shasum": "" + }, + "require": { + "laminas/laminas-stdlib": "^3.2.1", + "php": "~7.4.0 || ~8.0.0 || ~8.1.0", + "psr/container": "^1.0" + }, + "conflict": { + "ext-psr": "*", + "laminas/laminas-code": "<3.3.1", + "zendframework/zend-code": "<3.3.1", + "zendframework/zend-servicemanager": "*" + }, + "provide": { + "psr/container-implementation": "^1.0" + }, + "replace": { + "container-interop/container-interop": "^1.2.0" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.0", + "laminas/laminas-coding-standard": "~2.3.0", + "laminas/laminas-container-config-test": "^0.7", + "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.5.5", + "psalm/plugin-phpunit": "^0.17.0", + "vimeo/psalm": "^4.8" + }, + "suggest": { + "ocramius/proxy-manager": "ProxyManager ^2.1.1 to handle lazy initialization of services" + }, + "bin": [ + "bin/generate-deps-for-config-factory", + "bin/generate-factory-for-class" + ], + "type": "library", + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Laminas\\ServiceManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Factory-Driven Dependency Injection Container", + "homepage": "https://laminas.dev", + "keywords": [ + "PSR-11", + "dependency-injection", + "di", + "dic", + "laminas", + "service-manager", + "servicemanager" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-servicemanager/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-servicemanager/issues", + "rss": "https://github.com/laminas/laminas-servicemanager/releases.atom", + "source": "https://github.com/laminas/laminas-servicemanager" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2022-07-27T14:58:17+00:00" + }, + { + "name": "laminas/laminas-stdlib", + "version": "3.11.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-stdlib.git", + "reference": "aad7d2b11ba0069ba0d9b40f6dde3c2fa664b57f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/aad7d2b11ba0069ba0d9b40f6dde3c2fa664b57f", + "reference": "aad7d2b11ba0069ba0d9b40f6dde3c2fa664b57f", + "shasum": "" + }, + "require": { + "php": "^7.3 || ~8.0.0 || ~8.1.0" + }, + "conflict": { + "zendframework/zend-stdlib": "*" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~2.3.0", + "phpbench/phpbench": "^1.0", + "phpunit/phpunit": "^9.3.7", + "psalm/plugin-phpunit": "^0.17.0", + "vimeo/psalm": "^4.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Stdlib\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "SPL extensions, array utilities, error handlers, and more", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "stdlib" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-stdlib/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-stdlib/issues", + "rss": "https://github.com/laminas/laminas-stdlib/releases.atom", + "source": "https://github.com/laminas/laminas-stdlib" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2022-07-27T12:28:58+00:00" + }, + { + "name": "laminas/laminas-uri", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-uri.git", + "reference": "7e837dc15c8fd3949df7d1213246fd7c8640032b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-uri/zipball/7e837dc15c8fd3949df7d1213246fd7c8640032b", + "reference": "7e837dc15c8fd3949df7d1213246fd7c8640032b", + "shasum": "" + }, + "require": { + "laminas/laminas-escaper": "^2.9", + "laminas/laminas-validator": "^2.15", + "php": "^7.3 || ~8.0.0 || ~8.1.0" + }, + "conflict": { + "zendframework/zend-uri": "*" }, "require-dev": { "laminas/laminas-coding-standard": "~2.2.1", @@ -370,140 +838,423 @@ "psr-4": { "Laminas\\Uri\\": "src/" } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "A component that aids in manipulating and validating ยป Uniform Resource Identifiers (URIs)", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "uri" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-uri/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-uri/issues", + "rss": "https://github.com/laminas/laminas-uri/releases.atom", + "source": "https://github.com/laminas/laminas-uri" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-09-09T18:37:15+00:00" + }, + { + "name": "laminas/laminas-validator", + "version": "2.23.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-validator.git", + "reference": "6d61b6cc3b222f13807a18d9247cdfb084958b03" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-validator/zipball/6d61b6cc3b222f13807a18d9247cdfb084958b03", + "reference": "6d61b6cc3b222f13807a18d9247cdfb084958b03", + "shasum": "" + }, + "require": { + "laminas/laminas-servicemanager": "^3.12.0", + "laminas/laminas-stdlib": "^3.10", + "php": "^7.4 || ~8.0.0 || ~8.1.0" + }, + "conflict": { + "zendframework/zend-validator": "*" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~2.3.0", + "laminas/laminas-db": "^2.7", + "laminas/laminas-filter": "^2.14.0", + "laminas/laminas-http": "^2.14.2", + "laminas/laminas-i18n": "^2.15.0", + "laminas/laminas-session": "^2.12.1", + "laminas/laminas-uri": "^2.9.1", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5.21", + "psalm/plugin-phpunit": "^0.17.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "vimeo/psalm": "^4.24.0" + }, + "suggest": { + "laminas/laminas-db": "Laminas\\Db component, required by the (No)RecordExists validator", + "laminas/laminas-filter": "Laminas\\Filter component, required by the Digits validator", + "laminas/laminas-i18n": "Laminas\\I18n component to allow translation of validation error messages", + "laminas/laminas-i18n-resources": "Translations of validator messages", + "laminas/laminas-servicemanager": "Laminas\\ServiceManager component to allow using the ValidatorPluginManager and validator chains", + "laminas/laminas-session": "Laminas\\Session component, ^2.8; required by the Csrf validator", + "laminas/laminas-uri": "Laminas\\Uri component, required by the Uri and Sitemap\\Loc validators", + "psr/http-message": "psr/http-message, required when validating PSR-7 UploadedFileInterface instances via the Upload and UploadFile validators" + }, + "type": "library", + "extra": { + "laminas": { + "component": "Laminas\\Validator", + "config-provider": "Laminas\\Validator\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Laminas\\Validator\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Validation classes for a wide range of domains, and the ability to chain validators to create complex validation criteria", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "validator" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-validator/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-validator/issues", + "rss": "https://github.com/laminas/laminas-validator/releases.atom", + "source": "https://github.com/laminas/laminas-validator" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2022-07-27T19:17:59+00:00" + }, + { + "name": "laminas/laminas-view", + "version": "2.22.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-view.git", + "reference": "ae32391bdec45ca9fc73dd0882cd7301ab07ecf3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-view/zipball/ae32391bdec45ca9fc73dd0882cd7301ab07ecf3", + "reference": "ae32391bdec45ca9fc73dd0882cd7301ab07ecf3", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.2", + "ext-dom": "*", + "ext-filter": "*", + "ext-json": "*", + "laminas/laminas-escaper": "^2.5", + "laminas/laminas-eventmanager": "^3.4", + "laminas/laminas-json": "^3.3", + "laminas/laminas-servicemanager": "^3.14.0", + "laminas/laminas-stdlib": "^3.10.1", + "php": "^7.4 || ~8.0.0 || ~8.1.0", + "psr/container": "^1 || ^2" + }, + "conflict": { + "container-interop/container-interop": "<1.2", + "laminas/laminas-router": "<3.0.1", + "laminas/laminas-servicemanager": "<3.3", + "laminas/laminas-session": "<2.12", + "zendframework/zend-view": "*" + }, + "require-dev": { + "laminas/laminas-authentication": "^2.5", + "laminas/laminas-coding-standard": "~2.3.0", + "laminas/laminas-console": "^2.6", + "laminas/laminas-feed": "^2.15", + "laminas/laminas-filter": "^2.13.0", + "laminas/laminas-http": "^2.15", + "laminas/laminas-i18n": "^2.6", + "laminas/laminas-modulemanager": "^2.7.1", + "laminas/laminas-mvc": "^3.0", + "laminas/laminas-mvc-i18n": "^1.1", + "laminas/laminas-mvc-plugin-flashmessenger": "^1.5.0", + "laminas/laminas-navigation": "^2.13.1", + "laminas/laminas-paginator": "^2.11.0", + "laminas/laminas-permissions-acl": "^2.6", + "laminas/laminas-router": "^3.0.1", + "laminas/laminas-uri": "^2.5", + "phpspec/prophecy": "^1.12", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5.5", + "psalm/plugin-phpunit": "^0.17.0", + "vimeo/psalm": "^4.10" + }, + "suggest": { + "laminas/laminas-authentication": "Laminas\\Authentication component", + "laminas/laminas-escaper": "Laminas\\Escaper component", + "laminas/laminas-feed": "Laminas\\Feed component", + "laminas/laminas-filter": "Laminas\\Filter component", + "laminas/laminas-http": "Laminas\\Http component", + "laminas/laminas-i18n": "Laminas\\I18n component", + "laminas/laminas-mvc": "Laminas\\Mvc component", + "laminas/laminas-mvc-plugin-flashmessenger": "laminas-mvc-plugin-flashmessenger component, if you want to use the FlashMessenger view helper with laminas-mvc versions 3 and up", + "laminas/laminas-navigation": "Laminas\\Navigation component", + "laminas/laminas-paginator": "Laminas\\Paginator component", + "laminas/laminas-permissions-acl": "Laminas\\Permissions\\Acl component", + "laminas/laminas-servicemanager": "Laminas\\ServiceManager component", + "laminas/laminas-uri": "Laminas\\Uri component" + }, + "bin": [ + "bin/templatemap_generator.php" + ], + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\View\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Flexible view layer supporting and providing multiple view layers, helpers, and more", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "view" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-view/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-view/issues", + "rss": "https://github.com/laminas/laminas-view/releases.atom", + "source": "https://github.com/laminas/laminas-view" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2022-07-19T09:25:16+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.14.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" + }, + "time": "2022-05-31T20:59:12+00:00" + }, + { + "name": "psr/container", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } ], - "description": "A component that aids in manipulating and validating ยป Uniform Resource Identifiers (URIs)", - "homepage": "https://laminas.dev", + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", "keywords": [ - "laminas", - "uri" + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" ], "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-uri/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-uri/issues", - "rss": "https://github.com/laminas/laminas-uri/releases.atom", - "source": "https://github.com/laminas/laminas-uri" + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.2" }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2021-09-09T18:37:15+00:00" + "time": "2021-11-05T16:50:12+00:00" }, { - "name": "laminas/laminas-validator", - "version": "2.23.0", + "name": "webimpress/safe-writer", + "version": "2.2.0", "source": { "type": "git", - "url": "https://github.com/laminas/laminas-validator.git", - "reference": "6d61b6cc3b222f13807a18d9247cdfb084958b03" + "url": "https://github.com/webimpress/safe-writer.git", + "reference": "9d37cc8bee20f7cb2f58f6e23e05097eab5072e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-validator/zipball/6d61b6cc3b222f13807a18d9247cdfb084958b03", - "reference": "6d61b6cc3b222f13807a18d9247cdfb084958b03", + "url": "https://api.github.com/repos/webimpress/safe-writer/zipball/9d37cc8bee20f7cb2f58f6e23e05097eab5072e6", + "reference": "9d37cc8bee20f7cb2f58f6e23e05097eab5072e6", "shasum": "" }, "require": { - "laminas/laminas-servicemanager": "^3.12.0", - "laminas/laminas-stdlib": "^3.10", - "php": "^7.4 || ~8.0.0 || ~8.1.0" - }, - "conflict": { - "zendframework/zend-validator": "*" + "php": "^7.3 || ^8.0" }, "require-dev": { - "laminas/laminas-coding-standard": "~2.3.0", - "laminas/laminas-db": "^2.7", - "laminas/laminas-filter": "^2.14.0", - "laminas/laminas-http": "^2.14.2", - "laminas/laminas-i18n": "^2.15.0", - "laminas/laminas-session": "^2.12.1", - "laminas/laminas-uri": "^2.9.1", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5.21", - "psalm/plugin-phpunit": "^0.17.0", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", - "vimeo/psalm": "^4.24.0" - }, - "suggest": { - "laminas/laminas-db": "Laminas\\Db component, required by the (No)RecordExists validator", - "laminas/laminas-filter": "Laminas\\Filter component, required by the Digits validator", - "laminas/laminas-i18n": "Laminas\\I18n component to allow translation of validation error messages", - "laminas/laminas-i18n-resources": "Translations of validator messages", - "laminas/laminas-servicemanager": "Laminas\\ServiceManager component to allow using the ValidatorPluginManager and validator chains", - "laminas/laminas-session": "Laminas\\Session component, ^2.8; required by the Csrf validator", - "laminas/laminas-uri": "Laminas\\Uri component, required by the Uri and Sitemap\\Loc validators", - "psr/http-message": "psr/http-message, required when validating PSR-7 UploadedFileInterface instances via the Upload and UploadFile validators" + "phpunit/phpunit": "^9.5.4", + "vimeo/psalm": "^4.7", + "webimpress/coding-standard": "^1.2.2" }, "type": "library", "extra": { - "laminas": { - "component": "Laminas\\Validator", - "config-provider": "Laminas\\Validator\\ConfigProvider" + "branch-alias": { + "dev-master": "2.2.x-dev", + "dev-develop": "2.3.x-dev", + "dev-release-1.0": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Laminas\\Validator\\": "src/" + "Webimpress\\SafeWriter\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "BSD-2-Clause" ], - "description": "Validation classes for a wide range of domains, and the ability to chain validators to create complex validation criteria", - "homepage": "https://laminas.dev", + "description": "Tool to write files safely, to avoid race conditions", "keywords": [ - "laminas", - "validator" + "concurrent write", + "file writer", + "race condition", + "safe writer", + "webimpress" ], "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-validator/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-validator/issues", - "rss": "https://github.com/laminas/laminas-validator/releases.atom", - "source": "https://github.com/laminas/laminas-validator" + "issues": "https://github.com/webimpress/safe-writer/issues", + "source": "https://github.com/webimpress/safe-writer/tree/2.2.0" }, "funding": [ { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" + "url": "https://github.com/michalbundyra", + "type": "github" } ], - "time": "2022-07-27T19:17:59+00:00" + "time": "2021-04-19T16:34:45+00:00" }, { - "name": "psr/container", - "version": "1.1.2", + "name": "webmozart/assert", + "version": "1.11.0", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "php": ">=7.4.0" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, "autoload": { "psr-4": { - "Psr\\Container\\": "src/" + "Webmozart\\Assert\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -512,24 +1263,21 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", + "description": "Assertions to validate method input/output with nice error messages.", "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" + "assert", + "check", + "validate" ], "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, - "time": "2021-11-05T16:50:12+00:00" + "time": "2022-06-03T18:03:27+00:00" } ], "packages-dev": [ @@ -1516,62 +2264,6 @@ }, "time": "2020-12-01T19:48:11+00:00" }, - { - "name": "nikic/php-parser", - "version": "v4.14.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" - }, - "time": "2022-05-31T20:59:12+00:00" - }, { "name": "openlss/lib-array2xml", "version": "1.0.0", @@ -4658,64 +5350,6 @@ ], "time": "2022-02-15T19:52:12+00:00" }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" - }, { "name": "webmozart/glob", "version": "4.6.0", @@ -4827,7 +5461,7 @@ }, "platform-dev": [], "platform-overrides": { - "php": "7.4" + "php": "7.4.99" }, "plugin-api-version": "2.3.0" } diff --git a/psalm-baseline.xml b/psalm-baseline.xml new file mode 100644 index 0000000..b452b87 --- /dev/null +++ b/psalm-baseline.xml @@ -0,0 +1,8 @@ + + + + + (string) $this->routeMatch->getMatchedRouteName() + + + diff --git a/psalm.xml b/psalm.xml index d0e3638..0d10f54 100644 --- a/psalm.xml +++ b/psalm.xml @@ -4,6 +4,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://getpsalm.org/schema/config" xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd" + errorBaseline="psalm-baseline.xml" > diff --git a/src/ConfigProvider.php b/src/ConfigProvider.php index 933ef37..1fb5b28 100644 --- a/src/ConfigProvider.php +++ b/src/ConfigProvider.php @@ -53,6 +53,7 @@ public function getViewHelperConfig(): array return [ 'factories' => [ Helper\ServerUrl::class => Helper\Factory\ServerUrlFactory::class, + Helper\Url::class => Helper\Factory\UrlFactory::class, /** * Factories for helpers in Laminas\View */ @@ -60,6 +61,7 @@ public function getViewHelperConfig(): array ], 'aliases' => [ 'serverUrl' => Helper\ServerUrl::class, + 'url' => Helper\Url::class, ], ]; } diff --git a/src/Exception/RouteNotMatchedException.php b/src/Exception/RouteNotMatchedException.php new file mode 100644 index 0000000..cd14629 --- /dev/null +++ b/src/Exception/RouteNotMatchedException.php @@ -0,0 +1,15 @@ +get('HttpRouter'); + Assert::isInstanceOf($router, RouteStackInterface::class); + + /** + * The RouteMatch instance must be retrieved from the MVC Event + */ + $mvcApplication = $container->get('Application'); + assert($mvcApplication instanceof Application); + $routeMatch = $mvcApplication->getMvcEvent()->getRouteMatch(); + Assert::isInstanceOf($routeMatch, RouteMatch::class); + + return new Url( + $routeMatch, + $router + ); + } +} diff --git a/src/Helper/Url.php b/src/Helper/Url.php new file mode 100644 index 0000000..64eeedc --- /dev/null +++ b/src/Helper/Url.php @@ -0,0 +1,95 @@ +routeMatch = $routeMatch; + $this->router = $router; + } + + /** + * Generates an url given the name of a route. + * + * @see RouteInterface::assemble() + * + * @param string|null $name Name of the route + * @param iterable $params Parameters for the link + * @param iterable|bool $options Options for the route, or bool $reuseMatchedParams to skip the 4th argument + * @param bool $reuseMatchedParams Whether to reuse matched parameters + * @return string Url For the link href attribute + * @throws RouteNotMatchedException If RouteMatch didn't contain a matched route name. + */ + public function __invoke( + ?string $name = null, + iterable $params = [], + $options = [], + bool $reuseMatchedParams = false + ): string { + $name = $name ?? (string) $this->routeMatch->getMatchedRouteName(); + if ($name === '') { + throw RouteNotMatchedException::withEmptyRouteName(); + } + + if (is_object($params)) { + $params = ArrayUtils::iteratorToArray($params); + } + + if (is_object($options)) { + $options = ArrayUtils::iteratorToArray($options); + } + + if (func_num_args() === 3 && is_bool($options)) { + $reuseMatchedParams = $options; + $options = []; + } + + assert(is_array($options)); + + if ($reuseMatchedParams) { + $routeMatchParams = $this->routeMatch->getParams(); + + /** @var mixed $controller */ + $controller = $routeMatchParams[ModuleRouteListener::ORIGINAL_CONTROLLER] ?? null; + + if (is_string($controller)) { + $routeMatchParams['controller'] = $controller; + unset($routeMatchParams[ModuleRouteListener::ORIGINAL_CONTROLLER]); + } + + if (isset($routeMatchParams[ModuleRouteListener::MODULE_NAMESPACE])) { + unset($routeMatchParams[ModuleRouteListener::MODULE_NAMESPACE]); + } + + $params = array_merge($routeMatchParams, $params); + } + + $options['name'] = $name; + + return (string) $this->router->assemble($params, $options); + } +} diff --git a/test/Helper/Factory/UrlFactoryTest.php b/test/Helper/Factory/UrlFactoryTest.php new file mode 100644 index 0000000..6d9ba6a --- /dev/null +++ b/test/Helper/Factory/UrlFactoryTest.php @@ -0,0 +1,44 @@ +setRouteMatch($match); + + $application = $this->createMock(Application::class); + $application->expects(self::once()) + ->method('getMvcEvent') + ->willReturn($event); + + $container = $this->createMock(ContainerInterface::class); + $container->expects(self::exactly(2)) + ->method('get') + ->willReturnMap([ + ['HttpRouter', $router], + ['Application', $application], + ]); + + (new UrlFactory())->__invoke($container); + } +} diff --git a/test/Helper/UrlTest.php b/test/Helper/UrlTest.php new file mode 100644 index 0000000..866be47 --- /dev/null +++ b/test/Helper/UrlTest.php @@ -0,0 +1,199 @@ +router = new TreeRouteStack(); + $this->router->addRoute('home', [ + 'type' => Literal::class, + 'options' => [ + 'route' => '/', + ], + ]); + $this->router->addRoute('default', [ + 'type' => Segment::class, + 'options' => [ + 'route' => '/:controller[/:action]', + ], + ]); + + $this->routeMatch = new RouteMatch([]); + $this->helper = new Url($this->routeMatch, $this->router); + } + + public function testNamedStaticRouteCanBeRetrieved(): void + { + self::assertEquals('/', $this->helper->__invoke('home')); + } + + public function testItIsExceptionalToCallTheHelperWithoutARouteName(): void + { + $this->expectException(RouteNotMatchedException::class); + $this->expectExceptionMessage( + 'A route name was not provided or RouteMatch does not contain a matched route name' + ); + $this->helper->__invoke(); + } + + public function testDefaultModuleRouting(): void + { + self::assertEquals( + '/my/route', + $this->helper->__invoke('default', ['controller' => 'my', 'action' => 'route']) + ); + } + + public function testDefaultModuleRoutingWithTraversable(): void + { + $arrayObject = new ArrayObject(['controller' => 'my', 'action' => 'route']); + self::assertEquals( + '/my/route', + $this->helper->__invoke('default', $arrayObject) + ); + } + + public function testThatMatchedRouteParametersCanBeReused(): void + { + $this->routeMatch->setMatchedRouteName('replace'); + $this->routeMatch->setParam('controller', 'groovy'); + + $this->router->addRoute('replace', [ + 'type' => Segment::class, + 'options' => [ + 'route' => '/:controller/:action', + 'defaults' => [ + 'controller' => 'default', + ], + ], + ]); + + self::assertEquals( + '/groovy/bar', + $this->helper->__invoke('replace', ['action' => 'bar'], [], true) + ); + } + + public function testThatOptionsAreUsed(): void + { + self::assertEquals( + '/#foo', + $this->helper->__invoke('home', [], ['fragment' => 'foo'], false) + ); + } + + public function testThatOptionsCanBeTraversable(): void + { + $options = new ArrayObject(['fragment' => 'foo']); + self::assertEquals( + '/#foo', + $this->helper->__invoke('home', [], $options, false) + ); + } + + public function testThatReuseMatchedRouteParamsCanBeProvidedAsTheThirdArgument(): void + { + $this->routeMatch->setMatchedRouteName('replace'); + $this->routeMatch->setParam('controller', 'groovy'); + + $this->router->addRoute('replace', [ + 'type' => Segment::class, + 'options' => [ + 'route' => '/:controller/:action', + 'defaults' => [ + 'controller' => 'default', + ], + ], + ]); + + self::assertEquals( + '/groovy/bar', + $this->helper->__invoke('replace', ['action' => 'bar'], true) + ); + } + + public function testThatMatchedRouteParamsAreNotReusedByDefault(): void + { + $this->routeMatch->setMatchedRouteName('replace'); + $this->routeMatch->setParam('controller', 'groovy'); + + $this->router->addRoute('replace', [ + 'type' => Segment::class, + 'options' => [ + 'route' => '/:controller/:action', + 'defaults' => [ + 'controller' => 'default', + ], + ], + ]); + + self::assertEquals( + '/default/bar', + $this->helper->__invoke('replace', ['action' => 'bar']) + ); + } + + public function testThatControllerIsSourcedFromModuleRouteListenerWhenAvailable(): void + { + $this->routeMatch->setMatchedRouteName('default'); + $this->routeMatch->setParam(ModuleRouteListener::ORIGINAL_CONTROLLER, 'groovy'); + + self::assertEquals( + '/groovy/bar', + $this->helper->__invoke('default', ['action' => 'bar'], [], true) + ); + } + + public function testThatGivenControllerOverridesControllerFoundInModuleRouteListener(): void + { + $this->routeMatch->setMatchedRouteName('default'); + $this->routeMatch->setParam(ModuleRouteListener::ORIGINAL_CONTROLLER, 'groovy'); + + self::assertEquals( + '/bing/bar', + $this->helper->__invoke('default', ['controller' => 'bing', 'action' => 'bar'], [], true) + ); + } + + public function testModuleNamespaceIsStrippedFromRouteParams(): void + { + $this->router->addRoute('replace', [ + 'type' => Segment::class, + 'options' => [ + 'route' => '/:controller/:action[/:' . ModuleRouteListener::MODULE_NAMESPACE . ']', + 'defaults' => [ + 'controller' => 'default', + ], + ], + ]); + + $this->routeMatch->setMatchedRouteName('replace'); + $this->routeMatch->setParam('controller', 'groovy'); + $this->routeMatch->setParam(ModuleRouteListener::MODULE_NAMESPACE, 'Muppets'); + + self::assertEquals( + '/groovy/bar', + $this->helper->__invoke('default', ['action' => 'bar'], [], true) + ); + } +} From 70fcbc68b8711514fae109da5b9e0d0b8775136e Mon Sep 17 00:00:00 2001 From: George Steel Date: Mon, 22 Aug 2022 21:48:48 +0100 Subject: [PATCH 06/13] Removes affordance to the deprecated `ModuleRouteListener` in Url helper Ref: https://github.com/laminas/laminas-mvc/pull/123 Signed-off-by: George Steel --- src/Helper/Url.php | 18 +----------------- test/Helper/UrlTest.php | 11 ----------- 2 files changed, 1 insertion(+), 28 deletions(-) diff --git a/src/Helper/Url.php b/src/Helper/Url.php index 64eeedc..9f04e9c 100644 --- a/src/Helper/Url.php +++ b/src/Helper/Url.php @@ -4,7 +4,6 @@ namespace Laminas\Mvc\View\Helper; -use Laminas\Mvc\ModuleRouteListener; use Laminas\Mvc\View\Exception\RouteNotMatchedException; use Laminas\Router\RouteInterface; use Laminas\Router\RouteMatch; @@ -17,7 +16,6 @@ use function is_array; use function is_bool; use function is_object; -use function is_string; final class Url { @@ -71,21 +69,7 @@ public function __invoke( assert(is_array($options)); if ($reuseMatchedParams) { - $routeMatchParams = $this->routeMatch->getParams(); - - /** @var mixed $controller */ - $controller = $routeMatchParams[ModuleRouteListener::ORIGINAL_CONTROLLER] ?? null; - - if (is_string($controller)) { - $routeMatchParams['controller'] = $controller; - unset($routeMatchParams[ModuleRouteListener::ORIGINAL_CONTROLLER]); - } - - if (isset($routeMatchParams[ModuleRouteListener::MODULE_NAMESPACE])) { - unset($routeMatchParams[ModuleRouteListener::MODULE_NAMESPACE]); - } - - $params = array_merge($routeMatchParams, $params); + $params = array_merge($this->routeMatch->getParams(), $params); } $options['name'] = $name; diff --git a/test/Helper/UrlTest.php b/test/Helper/UrlTest.php index 866be47..baa80cc 100644 --- a/test/Helper/UrlTest.php +++ b/test/Helper/UrlTest.php @@ -153,17 +153,6 @@ public function testThatMatchedRouteParamsAreNotReusedByDefault(): void ); } - public function testThatControllerIsSourcedFromModuleRouteListenerWhenAvailable(): void - { - $this->routeMatch->setMatchedRouteName('default'); - $this->routeMatch->setParam(ModuleRouteListener::ORIGINAL_CONTROLLER, 'groovy'); - - self::assertEquals( - '/groovy/bar', - $this->helper->__invoke('default', ['action' => 'bar'], [], true) - ); - } - public function testThatGivenControllerOverridesControllerFoundInModuleRouteListener(): void { $this->routeMatch->setMatchedRouteName('default'); From ffbcaf600617f300772b21c6c8d35f669f34a925 Mon Sep 17 00:00:00 2001 From: George Steel Date: Mon, 22 Aug 2022 21:49:27 +0100 Subject: [PATCH 07/13] Adds notes for changes required to MVC Signed-off-by: George Steel --- MVC-TODO.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 MVC-TODO.md diff --git a/MVC-TODO.md b/MVC-TODO.md new file mode 100644 index 0000000..567691c --- /dev/null +++ b/MVC-TODO.md @@ -0,0 +1,5 @@ +# Changes Required for `laminas/mvc` + +The URL view helper factory is a [closure created here](https://github.com/laminas/laminas-mvc/blob/3.4.x/src/Service/ViewHelperManagerFactory.php#L73-L100). This closure will need to be changed to inject the router and route match instances into the helper constructor, or, removed completely to favour the shipped `UrlFactory`. + +The [Doctype factory in ViewHelperManagerFactory](https://github.com/laminas/laminas-mvc/blob/3.4.x/src/Service/ViewHelperManagerFactory.php#L131-L152) can be dropped in favour of the shipped factory. From 7dc660442d8643e11b38211bb81937875d645413 Mon Sep 17 00:00:00 2001 From: George Steel Date: Mon, 22 Aug 2022 21:50:37 +0100 Subject: [PATCH 08/13] Updates locked dependencies Signed-off-by: George Steel --- composer.json | 1 + composer.lock | 151 +++++++++++++------------------------------------- 2 files changed, 41 insertions(+), 111 deletions(-) diff --git a/composer.json b/composer.json index 6815020..530f807 100644 --- a/composer.json +++ b/composer.json @@ -55,6 +55,7 @@ "scripts": { "check": [ "@cs-check", + "psalm --stats", "@test" ], "cs-check": "phpcs", diff --git a/composer.lock b/composer.lock index ed8068e..82802e4 100644 --- a/composer.lock +++ b/composer.lock @@ -254,16 +254,16 @@ }, { "name": "laminas/laminas-http", - "version": "2.15.1", + "version": "2.16.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-http.git", - "reference": "261f079c3dffcf6f123484db43c40e44c4bf1c79" + "reference": "7300482d3e570e81b6a6ecf6b28da1b12334bf63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-http/zipball/261f079c3dffcf6f123484db43c40e44c4bf1c79", - "reference": "261f079c3dffcf6f123484db43c40e44c4bf1c79", + "url": "https://api.github.com/repos/laminas/laminas-http/zipball/7300482d3e570e81b6a6ecf6b28da1b12334bf63", + "reference": "7300482d3e570e81b6a6ecf6b28da1b12334bf63", "shasum": "" }, "require": { @@ -315,7 +315,7 @@ "type": "community_bridge" } ], - "time": "2021-12-03T10:17:11+00:00" + "time": "2022-08-17T17:22:15+00:00" }, { "name": "laminas/laminas-json", @@ -506,16 +506,16 @@ }, { "name": "laminas/laminas-mvc", - "version": "3.3.3", + "version": "3.3.4", "source": { "type": "git", "url": "https://github.com/laminas/laminas-mvc.git", - "reference": "7ff2bfbe64048aa83c6d1c7edcbab849123f0150" + "reference": "46a3be585582788721c3533eb25226787cbd4359" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-mvc/zipball/7ff2bfbe64048aa83c6d1c7edcbab849123f0150", - "reference": "7ff2bfbe64048aa83c6d1c7edcbab849123f0150", + "url": "https://api.github.com/repos/laminas/laminas-mvc/zipball/46a3be585582788721c3533eb25226787cbd4359", + "reference": "46a3be585582788721c3533eb25226787cbd4359", "shasum": "" }, "require": { @@ -584,7 +584,7 @@ "type": "community_bridge" } ], - "time": "2022-02-21T20:21:58+00:00" + "time": "2022-08-20T11:01:41+00:00" }, { "name": "laminas/laminas-router", @@ -953,16 +953,16 @@ }, { "name": "laminas/laminas-view", - "version": "2.22.0", + "version": "2.22.1", "source": { "type": "git", "url": "https://github.com/laminas/laminas-view.git", - "reference": "ae32391bdec45ca9fc73dd0882cd7301ab07ecf3" + "reference": "dd4f49fccdc45ce9c39ec03b533d86f0ace62345" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-view/zipball/ae32391bdec45ca9fc73dd0882cd7301ab07ecf3", - "reference": "ae32391bdec45ca9fc73dd0882cd7301ab07ecf3", + "url": "https://api.github.com/repos/laminas/laminas-view/zipball/dd4f49fccdc45ce9c39ec03b533d86f0ace62345", + "reference": "dd4f49fccdc45ce9c39ec03b533d86f0ace62345", "shasum": "" }, "require": { @@ -1056,7 +1056,7 @@ "type": "community_bridge" } ], - "time": "2022-07-19T09:25:16+00:00" + "time": "2022-08-17T21:06:17+00:00" }, { "name": "nikic/php-parser", @@ -2588,85 +2588,18 @@ }, "time": "2022-03-15T21:29:03+00:00" }, - { - "name": "phpspec/prophecy", - "version": "v1.15.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" - }, - "time": "2021-12-08T12:19:24+00:00" - }, { "name": "phpstan/phpdoc-parser", - "version": "1.6.4", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "135607f9ccc297d6923d49c2bcf309f509413215" + "reference": "367a8d9d5f7da2a0136422d27ce8840583926955" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/135607f9ccc297d6923d49c2bcf309f509413215", - "reference": "135607f9ccc297d6923d49c2bcf309f509413215", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/367a8d9d5f7da2a0136422d27ce8840583926955", + "reference": "367a8d9d5f7da2a0136422d27ce8840583926955", "shasum": "" }, "require": { @@ -2696,29 +2629,29 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.6.4" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.7.0" }, - "time": "2022-06-26T13:09:08+00:00" + "time": "2022-08-09T12:23:23+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.15", + "version": "9.2.16", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + "reference": "2593003befdcc10db5e213f9f28814f5aa8ac073" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2593003befdcc10db5e213f9f28814f5aa8ac073", + "reference": "2593003befdcc10db5e213f9f28814f5aa8ac073", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", + "nikic/php-parser": "^4.14", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -2767,7 +2700,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.16" }, "funding": [ { @@ -2775,7 +2708,7 @@ "type": "github" } ], - "time": "2022-03-07T09:28:20+00:00" + "time": "2022-08-20T05:26:47+00:00" }, { "name": "phpunit/php-file-iterator", @@ -3020,16 +2953,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.21", + "version": "9.5.23", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1" + "reference": "888556852e7e9bbeeedb9656afe46118765ade34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0e32b76be457de00e83213528f6bb37e2a38fcb1", - "reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/888556852e7e9bbeeedb9656afe46118765ade34", + "reference": "888556852e7e9bbeeedb9656afe46118765ade34", "shasum": "" }, "require": { @@ -3044,7 +2977,6 @@ "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", "phpunit/php-code-coverage": "^9.2.13", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", @@ -3062,9 +2994,6 @@ "sebastian/type": "^3.0", "sebastian/version": "^3.0.2" }, - "require-dev": { - "phpspec/prophecy-phpunit": "^2.0.1" - }, "suggest": { "ext-soap": "*", "ext-xdebug": "*" @@ -3106,7 +3035,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.21" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.23" }, "funding": [ { @@ -3118,7 +3047,7 @@ "type": "github" } ], - "time": "2022-06-19T12:14:25+00:00" + "time": "2022-08-22T14:01:36+00:00" }, { "name": "psalm/plugin-phpunit", @@ -5190,16 +5119,16 @@ }, { "name": "vimeo/psalm", - "version": "v4.25.0", + "version": "4.26.0", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "d7cd84c4ebca74ba3419b9601f81d177bcbe2aac" + "reference": "6998fabb2bf528b65777bf9941920888d23c03ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/d7cd84c4ebca74ba3419b9601f81d177bcbe2aac", - "reference": "d7cd84c4ebca74ba3419b9601f81d177bcbe2aac", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/6998fabb2bf528b65777bf9941920888d23c03ac", + "reference": "6998fabb2bf528b65777bf9941920888d23c03ac", "shasum": "" }, "require": { @@ -5291,9 +5220,9 @@ ], "support": { "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm/tree/v4.25.0" + "source": "https://github.com/vimeo/psalm/tree/4.26.0" }, - "time": "2022-07-25T17:04:37+00:00" + "time": "2022-07-31T13:10:26+00:00" }, { "name": "webimpress/coding-standard", From 23f947e819df50926802892e52f06a43fe18079b Mon Sep 17 00:00:00 2001 From: George Steel Date: Wed, 9 Nov 2022 08:41:16 +0000 Subject: [PATCH 09/13] Drop support for PHP 7.4, add support for PHP 8.2 Signed-off-by: George Steel --- composer.json | 28 +- composer.lock | 716 ++++++++++++++++++++------------------------- src/Helper/Url.php | 9 +- 3 files changed, 336 insertions(+), 417 deletions(-) diff --git a/composer.json b/composer.json index 530f807..a3dea69 100644 --- a/composer.json +++ b/composer.json @@ -18,29 +18,29 @@ "config": { "sort-packages": true, "platform": { - "php": "7.4.99" + "php": "8.0.99" }, "allow-plugins": { "dealerdirect/phpcodesniffer-composer-installer": true } }, "require": { - "php": "^7.4 || ~8.0.0 || ~8.1.0", - "laminas/laminas-http": "^2.15.1", - "laminas/laminas-mvc": "^3.3.3", - "laminas/laminas-router": "^3.7.0", - "laminas/laminas-servicemanager": "^3.16.0", - "laminas/laminas-stdlib": "^3.11", - "laminas/laminas-view": "^2.22.0", - "psr/container": "^1 || ^2", + "php": "~8.0.0 || ~8.1.0 || ~8.2.0", + "laminas/laminas-http": "^2.17", + "laminas/laminas-mvc": "^3.5", + "laminas/laminas-router": "^3.10", + "laminas/laminas-servicemanager": "^3.19", + "laminas/laminas-stdlib": "^3.15", + "laminas/laminas-view": "^2.25", + "psr/container": "^1.1.2 || ^2", "webmozart/assert": "^1.11.0" }, "require-dev": { - "laminas/laminas-coding-standard": "~2.3.0", - "maglnet/composer-require-checker": "^3.8", - "phpunit/phpunit": "^9.5.21", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.25.0" + "laminas/laminas-coding-standard": "~2.4.0", + "maglnet/composer-require-checker": "^4.2.0", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.30" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index 82802e4..48f21b0 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "a59befc7b96df3a9a3ecd520b3c272b0", + "content-hash": "3bc4d6a8b2edf5b9f184b1f8ad9c8902", "packages": [ { "name": "brick/varexporter", @@ -57,22 +57,22 @@ }, { "name": "laminas/laminas-config", - "version": "3.7.0", + "version": "3.8.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-config.git", - "reference": "e43d13dcfc273d4392812eb395ce636f73f34dfd" + "reference": "46baad58d0b12cf98539e04334eff40a1fdfb9a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-config/zipball/e43d13dcfc273d4392812eb395ce636f73f34dfd", - "reference": "e43d13dcfc273d4392812eb395ce636f73f34dfd", + "url": "https://api.github.com/repos/laminas/laminas-config/zipball/46baad58d0b12cf98539e04334eff40a1fdfb9a0", + "reference": "46baad58d0b12cf98539e04334eff40a1fdfb9a0", "shasum": "" }, "require": { "ext-json": "*", "laminas/laminas-stdlib": "^3.6", - "php": "^7.3 || ~8.0.0 || ~8.1.0", + "php": "~8.0.0 || ~8.1.0 || ~8.2.0", "psr/container": "^1.0" }, "conflict": { @@ -80,11 +80,11 @@ "zendframework/zend-config": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "~1.0.0", - "laminas/laminas-filter": "^2.7.2", - "laminas/laminas-i18n": "^2.10.3", - "laminas/laminas-servicemanager": "^3.7", - "phpunit/phpunit": "^9.5.5" + "laminas/laminas-coding-standard": "~2.4.0", + "laminas/laminas-filter": "~2.23.0", + "laminas/laminas-i18n": "~2.19.0", + "laminas/laminas-servicemanager": "~3.19.0", + "phpunit/phpunit": "~9.5.25" }, "suggest": { "laminas/laminas-filter": "^2.7.2; install if you want to use the Filter processor", @@ -121,36 +121,36 @@ "type": "community_bridge" } ], - "time": "2021-10-01T16:07:46+00:00" + "time": "2022-10-16T14:21:22+00:00" }, { "name": "laminas/laminas-escaper", - "version": "2.10.0", + "version": "2.12.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-escaper.git", - "reference": "58af67282db37d24e584a837a94ee55b9c7552be" + "reference": "ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/58af67282db37d24e584a837a94ee55b9c7552be", - "reference": "58af67282db37d24e584a837a94ee55b9c7552be", + "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490", + "reference": "ee7a4c37bf3d0e8c03635d5bddb5bb3184ead490", "shasum": "" }, "require": { "ext-ctype": "*", "ext-mbstring": "*", - "php": "^7.4 || ~8.0.0 || ~8.1.0" + "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0" }, "conflict": { "zendframework/zend-escaper": "*" }, "require-dev": { "infection/infection": "^0.26.6", - "laminas/laminas-coding-standard": "~2.3.0", + "laminas/laminas-coding-standard": "~2.4.0", "maglnet/composer-require-checker": "^3.8.0", "phpunit/phpunit": "^9.5.18", - "psalm/plugin-phpunit": "^0.16.1", + "psalm/plugin-phpunit": "^0.17.0", "vimeo/psalm": "^4.22.0" }, "type": "library", @@ -183,36 +183,37 @@ "type": "community_bridge" } ], - "time": "2022-03-08T20:15:36+00:00" + "time": "2022-10-10T10:11:09+00:00" }, { "name": "laminas/laminas-eventmanager", - "version": "3.5.0", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-eventmanager.git", - "reference": "41f7209428f37cab9573365e361f4078209aaafa" + "reference": "3f1afbad86cd34a431fdc069f265cfe6f8fc8308" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/41f7209428f37cab9573365e361f4078209aaafa", - "reference": "41f7209428f37cab9573365e361f4078209aaafa", + "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/3f1afbad86cd34a431fdc069f265cfe6f8fc8308", + "reference": "3f1afbad86cd34a431fdc069f265cfe6f8fc8308", "shasum": "" }, "require": { - "php": "^7.4 || ~8.0.0 || ~8.1.0" + "php": "~8.0.0 || ~8.1.0 || ~8.2.0" }, "conflict": { "container-interop/container-interop": "<1.2", "zendframework/zend-eventmanager": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "~2.2.1", - "laminas/laminas-stdlib": "^3.6", - "phpbench/phpbench": "^1.1", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5.5", - "psr/container": "^1.1.2 || ^2.0.2" + "laminas/laminas-coding-standard": "~2.4.0", + "laminas/laminas-stdlib": "^3.15", + "phpbench/phpbench": "^1.2.6", + "phpunit/phpunit": "^9.5.25", + "psalm/plugin-phpunit": "^0.17.0", + "psr/container": "^1.1.2 || ^2.0.2", + "vimeo/psalm": "^4.28" }, "suggest": { "laminas/laminas-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature", @@ -250,20 +251,20 @@ "type": "community_bridge" } ], - "time": "2022-04-06T21:05:17+00:00" + "time": "2022-10-11T12:46:13+00:00" }, { "name": "laminas/laminas-http", - "version": "2.16.0", + "version": "2.17.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-http.git", - "reference": "7300482d3e570e81b6a6ecf6b28da1b12334bf63" + "reference": "ac4588d698c93b56bb7c0608d9a7537a3f057239" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-http/zipball/7300482d3e570e81b6a6ecf6b28da1b12334bf63", - "reference": "7300482d3e570e81b6a6ecf6b28da1b12334bf63", + "url": "https://api.github.com/repos/laminas/laminas-http/zipball/ac4588d698c93b56bb7c0608d9a7537a3f057239", + "reference": "ac4588d698c93b56bb7c0608d9a7537a3f057239", "shasum": "" }, "require": { @@ -271,15 +272,15 @@ "laminas/laminas-stdlib": "^3.6", "laminas/laminas-uri": "^2.9.1", "laminas/laminas-validator": "^2.15", - "php": "^7.3 || ~8.0.0 || ~8.1.0" + "php": "~8.0.0 || ~8.1.0 || ~8.2.0" }, "conflict": { "zendframework/zend-http": "*" }, "require-dev": { "ext-curl": "*", - "laminas/laminas-coding-standard": "~2.2.1", - "phpunit/phpunit": "^9.5.5" + "laminas/laminas-coding-standard": "~2.4.0", + "phpunit/phpunit": "^9.5.25" }, "suggest": { "paragonie/certainty": "For automated management of cacert.pem" @@ -315,32 +316,32 @@ "type": "community_bridge" } ], - "time": "2022-08-17T17:22:15+00:00" + "time": "2022-10-16T15:51:48+00:00" }, { "name": "laminas/laminas-json", - "version": "3.3.0", + "version": "3.5.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-json.git", - "reference": "9a0ce9f330b7d11e70c4acb44d67e8c4f03f437f" + "reference": "7a8a1d7bf2d05dd6c1fbd7c0868d3848cf2b57ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-json/zipball/9a0ce9f330b7d11e70c4acb44d67e8c4f03f437f", - "reference": "9a0ce9f330b7d11e70c4acb44d67e8c4f03f437f", + "url": "https://api.github.com/repos/laminas/laminas-json/zipball/7a8a1d7bf2d05dd6c1fbd7c0868d3848cf2b57ec", + "reference": "7a8a1d7bf2d05dd6c1fbd7c0868d3848cf2b57ec", "shasum": "" }, "require": { - "php": "^7.3 || ~8.0.0 || ~8.1.0" + "php": "~8.0.0 || ~8.1.0 || ~8.2.0" }, "conflict": { "zendframework/zend-json": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "~2.2.1", + "laminas/laminas-coding-standard": "~2.4.0", "laminas/laminas-stdlib": "^2.7.7 || ^3.1", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.5.25" }, "suggest": { "laminas/laminas-json-server": "For implementing JSON-RPC servers", @@ -376,31 +377,31 @@ "type": "community_bridge" } ], - "time": "2021-09-02T18:02:31+00:00" + "time": "2022-10-17T04:06:45+00:00" }, { "name": "laminas/laminas-loader", - "version": "2.8.0", + "version": "2.9.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-loader.git", - "reference": "d0589ec9dd48365fd95ad10d1c906efd7711c16b" + "reference": "51ed9c3fa42d1098a9997571730c0cbf42d078d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-loader/zipball/d0589ec9dd48365fd95ad10d1c906efd7711c16b", - "reference": "d0589ec9dd48365fd95ad10d1c906efd7711c16b", + "url": "https://api.github.com/repos/laminas/laminas-loader/zipball/51ed9c3fa42d1098a9997571730c0cbf42d078d3", + "reference": "51ed9c3fa42d1098a9997571730c0cbf42d078d3", "shasum": "" }, "require": { - "php": "^7.3 || ~8.0.0 || ~8.1.0" + "php": "~8.0.0 || ~8.1.0 || ~8.2.0" }, "conflict": { "zendframework/zend-loader": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "~2.2.1", - "phpunit/phpunit": "^9.3" + "laminas/laminas-coding-standard": "~2.4.0", + "phpunit/phpunit": "~9.5.25" }, "type": "library", "autoload": { @@ -432,20 +433,20 @@ "type": "community_bridge" } ], - "time": "2021-09-02T18:30:53+00:00" + "time": "2022-10-16T12:50:49+00:00" }, { "name": "laminas/laminas-modulemanager", - "version": "2.11.0", + "version": "2.14.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-modulemanager.git", - "reference": "6acf5991d10b0b38a2edb08729ed48981b2a5dad" + "reference": "fb0a2c34423f7d3321dd7c42dc5fc4db905a99ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-modulemanager/zipball/6acf5991d10b0b38a2edb08729ed48981b2a5dad", - "reference": "6acf5991d10b0b38a2edb08729ed48981b2a5dad", + "url": "https://api.github.com/repos/laminas/laminas-modulemanager/zipball/fb0a2c34423f7d3321dd7c42dc5fc4db905a99ac", + "reference": "fb0a2c34423f7d3321dd7c42dc5fc4db905a99ac", "shasum": "" }, "require": { @@ -453,7 +454,7 @@ "laminas/laminas-config": "^3.7", "laminas/laminas-eventmanager": "^3.4", "laminas/laminas-stdlib": "^3.6", - "php": "^7.3 || ~8.0.0 || ~8.1.0", + "php": "~8.0.0 || ~8.1.0 || ~8.2.0", "webimpress/safe-writer": "^1.0.2 || ^2.1" }, "conflict": { @@ -461,10 +462,12 @@ }, "require-dev": { "laminas/laminas-coding-standard": "^2.3", - "laminas/laminas-loader": "^2.8", - "laminas/laminas-mvc": "^3.1.1", - "laminas/laminas-servicemanager": "^3.7", - "phpunit/phpunit": "^9.5.5" + "laminas/laminas-loader": "^2.9.0", + "laminas/laminas-mvc": "^3.5.0", + "laminas/laminas-servicemanager": "^3.19.0", + "phpunit/phpunit": "^9.5.25", + "psalm/plugin-phpunit": "^0.17.0", + "vimeo/psalm": "^4.29" }, "suggest": { "laminas/laminas-console": "Laminas\\Console component", @@ -502,20 +505,20 @@ "type": "community_bridge" } ], - "time": "2021-10-13T17:05:17+00:00" + "time": "2022-10-28T09:21:04+00:00" }, { "name": "laminas/laminas-mvc", - "version": "3.3.4", + "version": "3.5.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-mvc.git", - "reference": "46a3be585582788721c3533eb25226787cbd4359" + "reference": "111e08a9c27274af570260c83abe77204ccf3366" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-mvc/zipball/46a3be585582788721c3533eb25226787cbd4359", - "reference": "46a3be585582788721c3533eb25226787cbd4359", + "url": "https://api.github.com/repos/laminas/laminas-mvc/zipball/111e08a9c27274af570260c83abe77204ccf3366", + "reference": "111e08a9c27274af570260c83abe77204ccf3366", "shasum": "" }, "require": { @@ -527,19 +530,20 @@ "laminas/laminas-servicemanager": "^3.7", "laminas/laminas-stdlib": "^3.6", "laminas/laminas-view": "^2.14", - "php": "^7.3 || ~8.0.0 || ~8.1.0" + "php": "~8.0.0 || ~8.1.0 || ~8.2.0" }, "conflict": { "zendframework/zend-mvc": "*" }, "require-dev": { "http-interop/http-middleware": "^0.4.1", - "laminas/laminas-coding-standard": "^1.0.0", + "laminas/laminas-coding-standard": "^2.4.0", "laminas/laminas-json": "^3.3", - "laminas/laminas-psr7bridge": "^1.0", + "laminas/laminas-psr7bridge": "^1.8", "laminas/laminas-stratigility": ">=2.0.1 <2.2", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5.5" + "phpspec/prophecy": "^1.15.0", + "phpspec/prophecy-phpunit": "^2.0.1", + "phpunit/phpunit": "^9.5.25" }, "suggest": { "laminas/laminas-json": "(^2.6.1 || ^3.0) To auto-deserialize JSON body content in AbstractRestfulController extensions, when json_decode is unavailable", @@ -584,37 +588,37 @@ "type": "community_bridge" } ], - "time": "2022-08-20T11:01:41+00:00" + "time": "2022-10-21T14:19:57+00:00" }, { "name": "laminas/laminas-router", - "version": "3.7.0", + "version": "3.10.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-router.git", - "reference": "0227cc29f62583dd1ca50d17d117b832edaa8cd8" + "reference": "84aa1047389270cc2b05e2fe85667efb592fbf5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-router/zipball/0227cc29f62583dd1ca50d17d117b832edaa8cd8", - "reference": "0227cc29f62583dd1ca50d17d117b832edaa8cd8", + "url": "https://api.github.com/repos/laminas/laminas-router/zipball/84aa1047389270cc2b05e2fe85667efb592fbf5e", + "reference": "84aa1047389270cc2b05e2fe85667efb592fbf5e", "shasum": "" }, "require": { "laminas/laminas-http": "^2.15", "laminas/laminas-servicemanager": "^3.14.0", "laminas/laminas-stdlib": "^3.10.1", - "php": "^7.4 || ~8.0.0 || ~8.1.0" + "php": "~8.0.0 || ~8.1.0 || ~8.2.0" }, "conflict": { "zendframework/zend-router": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "~2.2.1", - "laminas/laminas-i18n": "^2.15.0", - "phpunit/phpunit": "^9.5.5", + "laminas/laminas-coding-standard": "~2.4.0", + "laminas/laminas-i18n": "^2.17", + "phpunit/phpunit": "^9.5.25", "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.24.0" + "vimeo/psalm": "^4.28" }, "suggest": { "laminas/laminas-i18n": "^2.15.0 if defining translatable HTTP path segments" @@ -655,25 +659,25 @@ "type": "community_bridge" } ], - "time": "2022-07-18T01:39:51+00:00" + "time": "2022-10-10T15:38:09+00:00" }, { "name": "laminas/laminas-servicemanager", - "version": "3.16.0", + "version": "3.19.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-servicemanager.git", - "reference": "863c66733740cd36ebf5e700f4258ef2c68a2a24" + "reference": "ed160729bb8721127efdaac799f9a298963345b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/863c66733740cd36ebf5e700f4258ef2c68a2a24", - "reference": "863c66733740cd36ebf5e700f4258ef2c68a2a24", + "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/ed160729bb8721127efdaac799f9a298963345b1", + "reference": "ed160729bb8721127efdaac799f9a298963345b1", "shasum": "" }, "require": { "laminas/laminas-stdlib": "^3.2.1", - "php": "~7.4.0 || ~8.0.0 || ~8.1.0", + "php": "~8.0.0 || ~8.1.0 || ~8.2.0", "psr/container": "^1.0" }, "conflict": { @@ -689,17 +693,16 @@ "container-interop/container-interop": "^1.2.0" }, "require-dev": { - "composer/package-versions-deprecated": "^1.0", - "laminas/laminas-coding-standard": "~2.3.0", + "composer/package-versions-deprecated": "^1.11.99.5", + "laminas/laminas-coding-standard": "~2.4.0", "laminas/laminas-container-config-test": "^0.7", - "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.5.5", + "laminas/laminas-dependency-plugin": "^2.2", + "mikey179/vfsstream": "^1.6.11@alpha", + "ocramius/proxy-manager": "^2.14.1", + "phpbench/phpbench": "^1.2.6", + "phpunit/phpunit": "^9.5.25", "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.8" + "vimeo/psalm": "^4.28" }, "suggest": { "ocramius/proxy-manager": "ProxyManager ^2.1.1 to handle lazy initialization of services" @@ -746,34 +749,34 @@ "type": "community_bridge" } ], - "time": "2022-07-27T14:58:17+00:00" + "time": "2022-10-10T20:59:22+00:00" }, { "name": "laminas/laminas-stdlib", - "version": "3.11.0", + "version": "3.15.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-stdlib.git", - "reference": "aad7d2b11ba0069ba0d9b40f6dde3c2fa664b57f" + "reference": "63b66bd4b696f024f42616b9d95cdb10e5109c27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/aad7d2b11ba0069ba0d9b40f6dde3c2fa664b57f", - "reference": "aad7d2b11ba0069ba0d9b40f6dde3c2fa664b57f", + "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/63b66bd4b696f024f42616b9d95cdb10e5109c27", + "reference": "63b66bd4b696f024f42616b9d95cdb10e5109c27", "shasum": "" }, "require": { - "php": "^7.3 || ~8.0.0 || ~8.1.0" + "php": "~8.0.0 || ~8.1.0 || ~8.2.0" }, "conflict": { "zendframework/zend-stdlib": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "~2.3.0", - "phpbench/phpbench": "^1.0", - "phpunit/phpunit": "^9.3.7", + "laminas/laminas-coding-standard": "^2.4.0", + "phpbench/phpbench": "^1.2.6", + "phpunit/phpunit": "^9.5.25", "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.7" + "vimeo/psalm": "^4.28" }, "type": "library", "autoload": { @@ -805,33 +808,33 @@ "type": "community_bridge" } ], - "time": "2022-07-27T12:28:58+00:00" + "time": "2022-10-10T19:10:24+00:00" }, { "name": "laminas/laminas-uri", - "version": "2.9.1", + "version": "2.10.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-uri.git", - "reference": "7e837dc15c8fd3949df7d1213246fd7c8640032b" + "reference": "663b050294945c7345cc3a61f3ca661d5f9e1f80" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-uri/zipball/7e837dc15c8fd3949df7d1213246fd7c8640032b", - "reference": "7e837dc15c8fd3949df7d1213246fd7c8640032b", + "url": "https://api.github.com/repos/laminas/laminas-uri/zipball/663b050294945c7345cc3a61f3ca661d5f9e1f80", + "reference": "663b050294945c7345cc3a61f3ca661d5f9e1f80", "shasum": "" }, "require": { "laminas/laminas-escaper": "^2.9", "laminas/laminas-validator": "^2.15", - "php": "^7.3 || ~8.0.0 || ~8.1.0" + "php": "~8.0.0 || ~8.1.0 || ~8.2.0" }, "conflict": { "zendframework/zend-uri": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "~2.2.1", - "phpunit/phpunit": "^9.5.5" + "laminas/laminas-coding-standard": "~2.4.0", + "phpunit/phpunit": "^9.5.25" }, "type": "library", "autoload": { @@ -863,45 +866,44 @@ "type": "community_bridge" } ], - "time": "2021-09-09T18:37:15+00:00" + "time": "2022-10-16T15:02:45+00:00" }, { "name": "laminas/laminas-validator", - "version": "2.23.0", + "version": "2.26.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-validator.git", - "reference": "6d61b6cc3b222f13807a18d9247cdfb084958b03" + "reference": "a995b21d18c63cd1f5d123d0d2cd31a1c2d828dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-validator/zipball/6d61b6cc3b222f13807a18d9247cdfb084958b03", - "reference": "6d61b6cc3b222f13807a18d9247cdfb084958b03", + "url": "https://api.github.com/repos/laminas/laminas-validator/zipball/a995b21d18c63cd1f5d123d0d2cd31a1c2d828dc", + "reference": "a995b21d18c63cd1f5d123d0d2cd31a1c2d828dc", "shasum": "" }, "require": { "laminas/laminas-servicemanager": "^3.12.0", - "laminas/laminas-stdlib": "^3.10", - "php": "^7.4 || ~8.0.0 || ~8.1.0" + "laminas/laminas-stdlib": "^3.13", + "php": "~8.0.0 || ~8.1.0 || ~8.2.0" }, "conflict": { "zendframework/zend-validator": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "~2.3.0", - "laminas/laminas-db": "^2.7", - "laminas/laminas-filter": "^2.14.0", - "laminas/laminas-http": "^2.14.2", - "laminas/laminas-i18n": "^2.15.0", - "laminas/laminas-session": "^2.12.1", + "laminas/laminas-coding-standard": "^2.4.0", + "laminas/laminas-db": "^2.15.0", + "laminas/laminas-filter": "^2.22", + "laminas/laminas-http": "^2.16.0", + "laminas/laminas-i18n": "^2.19", + "laminas/laminas-session": "^2.13.0", "laminas/laminas-uri": "^2.9.1", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5.21", + "phpunit/phpunit": "^9.5.25", "psalm/plugin-phpunit": "^0.17.0", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", - "vimeo/psalm": "^4.24.0" + "psr/http-client": "^1.0.1", + "psr/http-factory": "^1.0.1", + "psr/http-message": "^1.0.1", + "vimeo/psalm": "^4.28" }, "suggest": { "laminas/laminas-db": "Laminas\\Db component, required by the (No)RecordExists validator", @@ -949,24 +951,23 @@ "type": "community_bridge" } ], - "time": "2022-07-27T19:17:59+00:00" + "time": "2022-10-11T12:58:36+00:00" }, { "name": "laminas/laminas-view", - "version": "2.22.1", + "version": "2.25.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-view.git", - "reference": "dd4f49fccdc45ce9c39ec03b533d86f0ace62345" + "reference": "77a4b6d78445ae2f30625c5af09a05ad4e4434eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-view/zipball/dd4f49fccdc45ce9c39ec03b533d86f0ace62345", - "reference": "dd4f49fccdc45ce9c39ec03b533d86f0ace62345", + "url": "https://api.github.com/repos/laminas/laminas-view/zipball/77a4b6d78445ae2f30625c5af09a05ad4e4434eb", + "reference": "77a4b6d78445ae2f30625c5af09a05ad4e4434eb", "shasum": "" }, "require": { - "container-interop/container-interop": "^1.2", "ext-dom": "*", "ext-filter": "*", "ext-json": "*", @@ -975,42 +976,38 @@ "laminas/laminas-json": "^3.3", "laminas/laminas-servicemanager": "^3.14.0", "laminas/laminas-stdlib": "^3.10.1", - "php": "^7.4 || ~8.0.0 || ~8.1.0", + "php": "~8.0.0 || ~8.1.0 || ~8.2.0", "psr/container": "^1 || ^2" }, "conflict": { "container-interop/container-interop": "<1.2", "laminas/laminas-router": "<3.0.1", - "laminas/laminas-servicemanager": "<3.3", "laminas/laminas-session": "<2.12", "zendframework/zend-view": "*" }, "require-dev": { - "laminas/laminas-authentication": "^2.5", - "laminas/laminas-coding-standard": "~2.3.0", - "laminas/laminas-console": "^2.6", - "laminas/laminas-feed": "^2.15", - "laminas/laminas-filter": "^2.13.0", - "laminas/laminas-http": "^2.15", - "laminas/laminas-i18n": "^2.6", - "laminas/laminas-modulemanager": "^2.7.1", - "laminas/laminas-mvc": "^3.0", - "laminas/laminas-mvc-i18n": "^1.1", - "laminas/laminas-mvc-plugin-flashmessenger": "^1.5.0", - "laminas/laminas-navigation": "^2.13.1", - "laminas/laminas-paginator": "^2.11.0", - "laminas/laminas-permissions-acl": "^2.6", - "laminas/laminas-router": "^3.0.1", - "laminas/laminas-uri": "^2.5", - "phpspec/prophecy": "^1.12", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5.5", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.10" + "laminas/laminas-authentication": "^2.13", + "laminas/laminas-coding-standard": "~2.4.0", + "laminas/laminas-console": "^2.8", + "laminas/laminas-feed": "^2.19", + "laminas/laminas-filter": "^2.25", + "laminas/laminas-http": "^2.17", + "laminas/laminas-i18n": "^2.19", + "laminas/laminas-modulemanager": "^2.14", + "laminas/laminas-mvc": "^3.5", + "laminas/laminas-mvc-i18n": "^1.6", + "laminas/laminas-mvc-plugin-flashmessenger": "^1.9", + "laminas/laminas-navigation": "^2.16", + "laminas/laminas-paginator": "^2.15", + "laminas/laminas-permissions-acl": "^2.12", + "laminas/laminas-router": "^3.10", + "laminas/laminas-uri": "^2.10", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.30" }, "suggest": { "laminas/laminas-authentication": "Laminas\\Authentication component", - "laminas/laminas-escaper": "Laminas\\Escaper component", "laminas/laminas-feed": "Laminas\\Feed component", "laminas/laminas-filter": "Laminas\\Filter component", "laminas/laminas-http": "Laminas\\Http component", @@ -1020,7 +1017,6 @@ "laminas/laminas-navigation": "Laminas\\Navigation component", "laminas/laminas-paginator": "Laminas\\Paginator component", "laminas/laminas-permissions-acl": "Laminas\\Permissions\\Acl component", - "laminas/laminas-servicemanager": "Laminas\\ServiceManager component", "laminas/laminas-uri": "Laminas\\Uri component" }, "bin": [ @@ -1056,20 +1052,20 @@ "type": "community_bridge" } ], - "time": "2022-08-17T21:06:17+00:00" + "time": "2022-11-07T08:01:13+00:00" }, { "name": "nikic/php-parser", - "version": "v4.14.0", + "version": "v4.15.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", "shasum": "" }, "require": { @@ -1110,9 +1106,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1" }, - "time": "2022-05-31T20:59:12+00:00" + "time": "2022-09-04T07:30:47+00:00" }, { "name": "psr/container", @@ -1522,16 +1518,16 @@ }, { "name": "composer/pcre", - "version": "3.0.0", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd" + "reference": "4482b6409ca6bfc2af043a5711cd21ac3e7a8dfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd", - "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd", + "url": "https://api.github.com/repos/composer/pcre/zipball/4482b6409ca6bfc2af043a5711cd21ac3e7a8dfb", + "reference": "4482b6409ca6bfc2af043a5711cd21ac3e7a8dfb", "shasum": "" }, "require": { @@ -1573,7 +1569,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.0.0" + "source": "https://github.com/composer/pcre/tree/3.0.2" }, "funding": [ { @@ -1589,7 +1585,7 @@ "type": "tidelift" } ], - "time": "2022-02-25T20:21:48+00:00" + "time": "2022-11-03T20:24:16+00:00" }, { "name": "composer/semver", @@ -2023,25 +2019,28 @@ }, { "name": "laminas/laminas-coding-standard", - "version": "2.3.0", + "version": "2.4.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-coding-standard.git", - "reference": "bcf6e07fe4690240be7beb6d884d0b0fafa6a251" + "reference": "eb076dd86aa93dd424856b150c9b6f76c1fdfabc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-coding-standard/zipball/bcf6e07fe4690240be7beb6d884d0b0fafa6a251", - "reference": "bcf6e07fe4690240be7beb6d884d0b0fafa6a251", + "url": "https://api.github.com/repos/laminas/laminas-coding-standard/zipball/eb076dd86aa93dd424856b150c9b6f76c1fdfabc", + "reference": "eb076dd86aa93dd424856b150c9b6f76c1fdfabc", "shasum": "" }, "require": { "dealerdirect/phpcodesniffer-composer-installer": "^0.7", - "php": "^7.3 || ^8.0", + "php": "^7.4 || ^8.0", "slevomat/coding-standard": "^7.0", "squizlabs/php_codesniffer": "^3.6", "webimpress/coding-standard": "^1.2" }, + "conflict": { + "phpstan/phpdoc-parser": ">=1.6.0" + }, "type": "phpcodesniffer-standard", "autoload": { "psr-4": { @@ -2072,29 +2071,28 @@ "type": "community_bridge" } ], - "time": "2021-05-29T15:53:59+00:00" + "time": "2022-08-24T17:45:47+00:00" }, { "name": "maglnet/composer-require-checker", - "version": "3.8.0", + "version": "4.2.0", "source": { "type": "git", "url": "https://github.com/maglnet/ComposerRequireChecker.git", - "reference": "537138b833ab0f9ad72b667a72bece2a765e88ab" + "reference": "fb2a69aa2b7307541233536f179275e99451b339" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maglnet/ComposerRequireChecker/zipball/537138b833ab0f9ad72b667a72bece2a765e88ab", - "reference": "537138b833ab0f9ad72b667a72bece2a765e88ab", + "url": "https://api.github.com/repos/maglnet/ComposerRequireChecker/zipball/fb2a69aa2b7307541233536f179275e99451b339", + "reference": "fb2a69aa2b7307541233536f179275e99451b339", "shasum": "" }, "require": { "composer-runtime-api": "^2.0.0", - "ext-json": "*", "ext-phar": "*", "nikic/php-parser": "^4.13.0", - "php": "^7.4 || ^8.0", - "symfony/console": "^5.4.0", + "php": "^8.0", + "symfony/console": "^6.0.0", "webmozart/assert": "^1.9.1", "webmozart/glob": "^4.4.0" }, @@ -2105,7 +2103,8 @@ "phing/phing": "^2.17.0", "phpstan/phpstan": "^1.2.0", "phpunit/phpunit": "^9.5.10", - "vimeo/psalm": "^4.14.0" + "roave/infection-static-analysis-plugin": "1.13.x-dev as 1.13.0", + "vimeo/psalm": "^4.15" }, "bin": [ "bin/composer-require-checker" @@ -2150,9 +2149,9 @@ ], "support": { "issues": "https://github.com/maglnet/ComposerRequireChecker/issues", - "source": "https://github.com/maglnet/ComposerRequireChecker/tree/3.8.0" + "source": "https://github.com/maglnet/ComposerRequireChecker/tree/4.2.0" }, - "time": "2021-12-07T14:25:47+00:00" + "time": "2022-08-30T09:36:29+00:00" }, { "name": "myclabs/deep-copy", @@ -2540,25 +2539,30 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.1", + "version": "1.6.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "77a32518733312af16a44300404e945338981de3" + "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", - "reference": "77a32518733312af16a44300404e945338981de3", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/48f445a408c131e38cab1c235aa6d2bb7a0bb20d", + "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", + "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { "ext-tokenizer": "*", - "psalm/phar": "^4.8" + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" }, "type": "library", "extra": { @@ -2584,22 +2588,22 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.2" }, - "time": "2022-03-15T21:29:03+00:00" + "time": "2022-10-14T12:47:21+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.7.0", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "367a8d9d5f7da2a0136422d27ce8840583926955" + "reference": "981cc368a216c988e862a75e526b6076987d1b50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/367a8d9d5f7da2a0136422d27ce8840583926955", - "reference": "367a8d9d5f7da2a0136422d27ce8840583926955", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/981cc368a216c988e862a75e526b6076987d1b50", + "reference": "981cc368a216c988e862a75e526b6076987d1b50", "shasum": "" }, "require": { @@ -2609,7 +2613,6 @@ "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^1.5", - "phpstan/phpstan-phpunit": "^1.1", "phpstan/phpstan-strict-rules": "^1.0", "phpunit/phpunit": "^9.5", "symfony/process": "^5.2" @@ -2629,22 +2632,22 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.7.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.5.1" }, - "time": "2022-08-09T12:23:23+00:00" + "time": "2022-05-05T11:32:40+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.16", + "version": "9.2.18", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2593003befdcc10db5e213f9f28814f5aa8ac073" + "reference": "12fddc491826940cf9b7e88ad9664cf51f0f6d0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2593003befdcc10db5e213f9f28814f5aa8ac073", - "reference": "2593003befdcc10db5e213f9f28814f5aa8ac073", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/12fddc491826940cf9b7e88ad9664cf51f0f6d0a", + "reference": "12fddc491826940cf9b7e88ad9664cf51f0f6d0a", "shasum": "" }, "require": { @@ -2700,7 +2703,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.16" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.18" }, "funding": [ { @@ -2708,7 +2711,7 @@ "type": "github" } ], - "time": "2022-08-20T05:26:47+00:00" + "time": "2022-10-27T13:35:33+00:00" }, { "name": "phpunit/php-file-iterator", @@ -2953,16 +2956,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.23", + "version": "9.5.26", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "888556852e7e9bbeeedb9656afe46118765ade34" + "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/888556852e7e9bbeeedb9656afe46118765ade34", - "reference": "888556852e7e9bbeeedb9656afe46118765ade34", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/851867efcbb6a1b992ec515c71cdcf20d895e9d2", + "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2", "shasum": "" }, "require": { @@ -2984,14 +2987,14 @@ "phpunit/php-timer": "^5.0.2", "sebastian/cli-parser": "^1.0.1", "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", + "sebastian/comparator": "^4.0.8", "sebastian/diff": "^4.0.3", "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", + "sebastian/exporter": "^4.0.5", "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.0", + "sebastian/type": "^3.2", "sebastian/version": "^3.0.2" }, "suggest": { @@ -3035,7 +3038,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.23" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.26" }, "funding": [ { @@ -3045,22 +3048,26 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2022-08-22T14:01:36+00:00" + "time": "2022-10-28T06:00:21+00:00" }, { "name": "psalm/plugin-phpunit", - "version": "0.17.0", + "version": "0.18.3", "source": { "type": "git", "url": "https://github.com/psalm/psalm-plugin-phpunit.git", - "reference": "45951541beef07e93e3ad197daf01da88e85c31d" + "reference": "057c1cdf7546c1e427f6fd83b635d0cc18c252bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psalm/psalm-plugin-phpunit/zipball/45951541beef07e93e3ad197daf01da88e85c31d", - "reference": "45951541beef07e93e3ad197daf01da88e85c31d", + "url": "https://api.github.com/repos/psalm/psalm-plugin-phpunit/zipball/057c1cdf7546c1e427f6fd83b635d0cc18c252bf", + "reference": "057c1cdf7546c1e427f6fd83b635d0cc18c252bf", "shasum": "" }, "require": { @@ -3068,7 +3075,7 @@ "composer/semver": "^1.4 || ^2.0 || ^3.0", "ext-simplexml": "*", "php": "^7.1 || ^8.0", - "vimeo/psalm": "dev-master || dev-4.x || ^4.5" + "vimeo/psalm": "dev-master || dev-4.x || ^4.5 || ^5@beta" }, "conflict": { "phpunit/phpunit": "<7.5" @@ -3105,36 +3112,36 @@ "description": "Psalm plugin for PHPUnit", "support": { "issues": "https://github.com/psalm/psalm-plugin-phpunit/issues", - "source": "https://github.com/psalm/psalm-plugin-phpunit/tree/0.17.0" + "source": "https://github.com/psalm/psalm-plugin-phpunit/tree/0.18.3" }, - "time": "2022-06-14T17:05:57+00:00" + "time": "2022-11-03T18:17:28+00:00" }, { "name": "psr/log", - "version": "1.1.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -3155,9 +3162,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "source": "https://github.com/php-fig/log/tree/3.0.0" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2021-07-14T16:46:02+00:00" }, { "name": "sebastian/cli-parser", @@ -3328,16 +3335,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { @@ -3390,7 +3397,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -3398,7 +3405,7 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", @@ -3588,16 +3595,16 @@ }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", "shasum": "" }, "require": { @@ -3653,7 +3660,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" }, "funding": [ { @@ -3661,7 +3668,7 @@ "type": "github" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2022-09-14T06:03:37+00:00" }, { "name": "sebastian/global-state", @@ -4016,16 +4023,16 @@ }, { "name": "sebastian/type", - "version": "3.0.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", "shasum": "" }, "require": { @@ -4037,7 +4044,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -4060,7 +4067,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" }, "funding": [ { @@ -4068,7 +4075,7 @@ "type": "github" } ], - "time": "2022-03-15T09:54:48+00:00" + "time": "2022-09-12T14:47:03+00:00" }, { "name": "sebastian/version", @@ -4242,46 +4249,42 @@ }, { "name": "symfony/console", - "version": "v5.4.11", + "version": "v6.0.15", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "535846c7ee6bc4dd027ca0d93220601456734b10" + "reference": "b0b910724a0a0326b4481e4f8a30abb2dd442efb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/535846c7ee6bc4dd027ca0d93220601456734b10", - "reference": "535846c7ee6bc4dd027ca0d93220601456734b10", + "url": "https://api.github.com/repos/symfony/console/zipball/b0b910724a0a0326b4481e4f8a30abb2dd442efb", + "reference": "b0b910724a0a0326b4481e4f8a30abb2dd442efb", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.0.2", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" + "symfony/string": "^5.4|^6.0" }, "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" }, "provide": { - "psr/log-implementation": "1.0|2.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "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" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" }, "suggest": { "psr/log": "For using the console logger", @@ -4321,7 +4324,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.11" + "source": "https://github.com/symfony/console/tree/v6.0.15" }, "funding": [ { @@ -4337,29 +4340,29 @@ "type": "tidelift" } ], - "time": "2022-07-22T10:42:43+00:00" + "time": "2022-10-26T21:42:20+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.2", + "version": "v3.0.2", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.0.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -4388,7 +4391,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.2" }, "funding": [ { @@ -4404,7 +4407,7 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/polyfill-ctype", @@ -4736,85 +4739,6 @@ ], "time": "2022-05-24T11:49:31+00:00" }, - { - "name": "symfony/polyfill-php73", - "version": "v1.26.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-24T11:49:31+00:00" - }, { "name": "symfony/polyfill-php80", "version": "v1.26.0", @@ -4983,34 +4907,33 @@ }, { "name": "symfony/string", - "version": "v5.4.11", + "version": "v6.0.15", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "5eb661e49ad389e4ae2b6e4df8d783a8a6548322" + "reference": "51ac0fa0ccf132a00519b87c97e8f775fa14e771" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/5eb661e49ad389e4ae2b6e4df8d783a8a6548322", - "reference": "5eb661e49ad389e4ae2b6e4df8d783a8a6548322", + "url": "https://api.github.com/repos/symfony/string/zipball/51ac0fa0ccf132a00519b87c97e8f775fa14e771", + "reference": "51ac0fa0ccf132a00519b87c97e8f775fa14e771", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": ">=3.0" + "symfony/translation-contracts": "<2.0" }, "require-dev": { - "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|^6.0" + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -5049,7 +4972,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.11" + "source": "https://github.com/symfony/string/tree/v6.0.15" }, "funding": [ { @@ -5065,7 +4988,7 @@ "type": "tidelift" } ], - "time": "2022-07-24T16:15:25+00:00" + "time": "2022-10-10T09:34:08+00:00" }, { "name": "theseer/tokenizer", @@ -5119,16 +5042,16 @@ }, { "name": "vimeo/psalm", - "version": "4.26.0", + "version": "4.30.0", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "6998fabb2bf528b65777bf9941920888d23c03ac" + "reference": "d0bc6e25d89f649e4f36a534f330f8bb4643dd69" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/6998fabb2bf528b65777bf9941920888d23c03ac", - "reference": "6998fabb2bf528b65777bf9941920888d23c03ac", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/d0bc6e25d89f649e4f36a534f330f8bb4643dd69", + "reference": "d0bc6e25d89f649e4f36a534f330f8bb4643dd69", "shasum": "" }, "require": { @@ -5167,6 +5090,7 @@ "phpdocumentor/reflection-docblock": "^5", "phpmyadmin/sql-parser": "5.1.0||dev-master", "phpspec/prophecy": ">=1.9.0", + "phpstan/phpdoc-parser": "1.2.* || 1.6.4", "phpunit/phpunit": "^9.0", "psalm/plugin-phpunit": "^0.16", "slevomat/coding-standard": "^7.0", @@ -5220,9 +5144,9 @@ ], "support": { "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm/tree/4.26.0" + "source": "https://github.com/vimeo/psalm/tree/4.30.0" }, - "time": "2022-07-31T13:10:26+00:00" + "time": "2022-11-06T20:37:08+00:00" }, { "name": "webimpress/coding-standard", @@ -5386,11 +5310,11 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^7.4 || ~8.0.0 || ~8.1.0" + "php": "~8.0.0 || ~8.1.0 || ~8.2.0" }, "platform-dev": [], "platform-overrides": { - "php": "7.4.99" + "php": "8.0.99" }, "plugin-api-version": "2.3.0" } diff --git a/src/Helper/Url.php b/src/Helper/Url.php index 9f04e9c..def7bf5 100644 --- a/src/Helper/Url.php +++ b/src/Helper/Url.php @@ -19,15 +19,10 @@ final class Url { - private RouteMatch $routeMatch; - private RouteStackInterface $router; - public function __construct( - RouteMatch $routeMatch, - RouteStackInterface $router + private RouteMatch $routeMatch, + private RouteStackInterface $router ) { - $this->routeMatch = $routeMatch; - $this->router = $router; } /** From a33c128f4461c07b8bbab75df408fcdfe371bcec Mon Sep 17 00:00:00 2001 From: George Steel Date: Wed, 9 Nov 2022 09:26:12 +0000 Subject: [PATCH 10/13] Remove baseline in favour of inline suppression Signed-off-by: George Steel --- psalm-baseline.xml | 8 -------- psalm.xml | 2 +- src/Helper/Url.php | 1 + test/Helper/ServerUrlTest.php | 1 - 4 files changed, 2 insertions(+), 10 deletions(-) delete mode 100644 psalm-baseline.xml diff --git a/psalm-baseline.xml b/psalm-baseline.xml deleted file mode 100644 index b452b87..0000000 --- a/psalm-baseline.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - (string) $this->routeMatch->getMatchedRouteName() - - - diff --git a/psalm.xml b/psalm.xml index 0d10f54..7b8d39f 100644 --- a/psalm.xml +++ b/psalm.xml @@ -4,7 +4,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://getpsalm.org/schema/config" xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd" - errorBaseline="psalm-baseline.xml" + findUnusedPsalmSuppress="true" > diff --git a/src/Helper/Url.php b/src/Helper/Url.php index def7bf5..fa7a14e 100644 --- a/src/Helper/Url.php +++ b/src/Helper/Url.php @@ -43,6 +43,7 @@ public function __invoke( $options = [], bool $reuseMatchedParams = false ): string { + /** @psalm-suppress RedundantCastGivenDocblockType */ $name = $name ?? (string) $this->routeMatch->getMatchedRouteName(); if ($name === '') { throw RouteNotMatchedException::withEmptyRouteName(); diff --git a/test/Helper/ServerUrlTest.php b/test/Helper/ServerUrlTest.php index c0cc83e..2516158 100644 --- a/test/Helper/ServerUrlTest.php +++ b/test/Helper/ServerUrlTest.php @@ -47,7 +47,6 @@ public function testPathArgumentsYieldTheExpectedUrl(string $path, string $expec public function testAnEmptyStringCanBeGivenAsAPathWithTheSameResultAsNoPathArgument(): void { - /** @psalm-suppress InvalidArgument */ self::assertSame('https://example.com', $this->helper->__invoke('')); } From 73539b69c9016ffb6cda70e39e89e9d7de7606cd Mon Sep 17 00:00:00 2001 From: George Steel Date: Tue, 18 Jul 2023 23:12:23 +0100 Subject: [PATCH 11/13] Bump all dependencies - Upgrade psalm to v5, handle deprecations and other new issues such as unused code - Upgrade PHPUnit to 10.x, migrate config and tests - Drop support for PHP 8.0 - Add psalm type for view helper config array shape Signed-off-by: George Steel --- .gitignore | 2 +- composer.json | 24 +- composer.lock | 1546 ++++++++++---------- phpunit.xml.dist | 19 +- psalm-baseline.xml | 8 + psalm.xml | 39 +- src/ConfigProvider.php | 13 +- src/Helper/Url.php | 8 +- test/Helper/Factory/DoctypeFactoryTest.php | 5 +- test/Helper/Factory/UrlFactoryTest.php | 4 +- test/Helper/ServerUrlTest.php | 5 +- test/ModuleTest.php | 32 + 12 files changed, 833 insertions(+), 872 deletions(-) create mode 100644 psalm-baseline.xml create mode 100644 test/ModuleTest.php diff --git a/.gitignore b/.gitignore index 9314d54..9bebca6 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,5 @@ /laminas-mkdoc-theme/ /phpunit.xml /vendor/ -.phpunit.result.cache +.phpunit.cache .phpcs-cache diff --git a/composer.json b/composer.json index a3dea69..e9c669d 100644 --- a/composer.json +++ b/composer.json @@ -18,29 +18,29 @@ "config": { "sort-packages": true, "platform": { - "php": "8.0.99" + "php": "8.1.99" }, "allow-plugins": { "dealerdirect/phpcodesniffer-composer-installer": true } }, "require": { - "php": "~8.0.0 || ~8.1.0 || ~8.2.0", - "laminas/laminas-http": "^2.17", - "laminas/laminas-mvc": "^3.5", - "laminas/laminas-router": "^3.10", - "laminas/laminas-servicemanager": "^3.19", - "laminas/laminas-stdlib": "^3.15", - "laminas/laminas-view": "^2.25", + "php": "~8.1.0 || ~8.2.0", + "laminas/laminas-http": "^2.18", + "laminas/laminas-mvc": "^3.6.1", + "laminas/laminas-router": "^3.11.1", + "laminas/laminas-servicemanager": "^3.21", + "laminas/laminas-stdlib": "^3.17", + "laminas/laminas-view": "^2.28", "psr/container": "^1.1.2 || ^2", "webmozart/assert": "^1.11.0" }, "require-dev": { "laminas/laminas-coding-standard": "~2.4.0", - "maglnet/composer-require-checker": "^4.2.0", - "phpunit/phpunit": "^9.5.26", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.30" + "maglnet/composer-require-checker": "^4.6", + "phpunit/phpunit": "^10.2.6", + "psalm/plugin-phpunit": "^0.18.4", + "vimeo/psalm": "^5.13.1" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index 48f21b0..d4c9b82 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "3bc4d6a8b2edf5b9f184b1f8ad9c8902", + "content-hash": "f2ff13ed2c3fb29b096ab72cb432518b", "packages": [ { "name": "brick/varexporter", - "version": "0.3.7", + "version": "0.3.8", "source": { "type": "git", "url": "https://github.com/brick/varexporter.git", - "reference": "3e263cd718d242594c52963760fee2059fd5833c" + "reference": "b5853edea6204ff8fa10633c3a4cccc4058410ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/varexporter/zipball/3e263cd718d242594c52963760fee2059fd5833c", - "reference": "3e263cd718d242594c52963760fee2059fd5833c", + "url": "https://api.github.com/repos/brick/varexporter/zipball/b5853edea6204ff8fa10633c3a4cccc4058410ed", + "reference": "b5853edea6204ff8fa10633c3a4cccc4058410ed", "shasum": "" }, "require": { @@ -45,7 +45,7 @@ ], "support": { "issues": "https://github.com/brick/varexporter/issues", - "source": "https://github.com/brick/varexporter/tree/0.3.7" + "source": "https://github.com/brick/varexporter/tree/0.3.8" }, "funding": [ { @@ -53,7 +53,7 @@ "type": "github" } ], - "time": "2022-06-29T23:37:57+00:00" + "time": "2023-01-21T23:05:38+00:00" }, { "name": "laminas/laminas-config", @@ -187,16 +187,16 @@ }, { "name": "laminas/laminas-eventmanager", - "version": "3.6.0", + "version": "3.10.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-eventmanager.git", - "reference": "3f1afbad86cd34a431fdc069f265cfe6f8fc8308" + "reference": "5a5114ab2d3fa4424faa46a2fb0a4e49a61f6eba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/3f1afbad86cd34a431fdc069f265cfe6f8fc8308", - "reference": "3f1afbad86cd34a431fdc069f265cfe6f8fc8308", + "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/5a5114ab2d3fa4424faa46a2fb0a4e49a61f6eba", + "reference": "5a5114ab2d3fa4424faa46a2fb0a4e49a61f6eba", "shasum": "" }, "require": { @@ -207,13 +207,13 @@ "zendframework/zend-eventmanager": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "~2.4.0", + "laminas/laminas-coding-standard": "~2.5.0", "laminas/laminas-stdlib": "^3.15", - "phpbench/phpbench": "^1.2.6", - "phpunit/phpunit": "^9.5.25", - "psalm/plugin-phpunit": "^0.17.0", + "phpbench/phpbench": "^1.2.7", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.0", "psr/container": "^1.1.2 || ^2.0.2", - "vimeo/psalm": "^4.28" + "vimeo/psalm": "^5.0.0" }, "suggest": { "laminas/laminas-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature", @@ -251,20 +251,20 @@ "type": "community_bridge" } ], - "time": "2022-10-11T12:46:13+00:00" + "time": "2023-01-11T19:52:45+00:00" }, { "name": "laminas/laminas-http", - "version": "2.17.0", + "version": "2.18.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-http.git", - "reference": "ac4588d698c93b56bb7c0608d9a7537a3f057239" + "reference": "76de9008f889bc7088f85a41d0d2b06c2b59c53d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-http/zipball/ac4588d698c93b56bb7c0608d9a7537a3f057239", - "reference": "ac4588d698c93b56bb7c0608d9a7537a3f057239", + "url": "https://api.github.com/repos/laminas/laminas-http/zipball/76de9008f889bc7088f85a41d0d2b06c2b59c53d", + "reference": "76de9008f889bc7088f85a41d0d2b06c2b59c53d", "shasum": "" }, "require": { @@ -316,7 +316,7 @@ "type": "community_bridge" } ], - "time": "2022-10-16T15:51:48+00:00" + "time": "2022-11-23T15:45:41+00:00" }, { "name": "laminas/laminas-json", @@ -509,16 +509,16 @@ }, { "name": "laminas/laminas-mvc", - "version": "3.5.0", + "version": "3.6.1", "source": { "type": "git", "url": "https://github.com/laminas/laminas-mvc.git", - "reference": "111e08a9c27274af570260c83abe77204ccf3366" + "reference": "f12e801c31c04a4b35017354ff84070f5573879f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-mvc/zipball/111e08a9c27274af570260c83abe77204ccf3366", - "reference": "111e08a9c27274af570260c83abe77204ccf3366", + "url": "https://api.github.com/repos/laminas/laminas-mvc/zipball/f12e801c31c04a4b35017354ff84070f5573879f", + "reference": "f12e801c31c04a4b35017354ff84070f5573879f", "shasum": "" }, "require": { @@ -526,8 +526,8 @@ "laminas/laminas-eventmanager": "^3.4", "laminas/laminas-http": "^2.15", "laminas/laminas-modulemanager": "^2.8", - "laminas/laminas-router": "^3.5", - "laminas/laminas-servicemanager": "^3.7", + "laminas/laminas-router": "^3.11.1", + "laminas/laminas-servicemanager": "^3.20.0", "laminas/laminas-stdlib": "^3.6", "laminas/laminas-view": "^2.14", "php": "~8.0.0 || ~8.1.0 || ~8.2.0" @@ -536,14 +536,12 @@ "zendframework/zend-mvc": "*" }, "require-dev": { - "http-interop/http-middleware": "^0.4.1", "laminas/laminas-coding-standard": "^2.4.0", "laminas/laminas-json": "^3.3", - "laminas/laminas-psr7bridge": "^1.8", - "laminas/laminas-stratigility": ">=2.0.1 <2.2", "phpspec/prophecy": "^1.15.0", "phpspec/prophecy-phpunit": "^2.0.1", - "phpunit/phpunit": "^9.5.25" + "phpunit/phpunit": "^9.5.25", + "webmozart/assert": "^1.11" }, "suggest": { "laminas/laminas-json": "(^2.6.1 || ^3.0) To auto-deserialize JSON body content in AbstractRestfulController extensions, when json_decode is unavailable", @@ -588,20 +586,20 @@ "type": "community_bridge" } ], - "time": "2022-10-21T14:19:57+00:00" + "time": "2023-03-15T10:21:03+00:00" }, { "name": "laminas/laminas-router", - "version": "3.10.0", + "version": "3.11.1", "source": { "type": "git", "url": "https://github.com/laminas/laminas-router.git", - "reference": "84aa1047389270cc2b05e2fe85667efb592fbf5e" + "reference": "3512c28cb4ffd64a62bc9e8b685a50a6547b0a11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-router/zipball/84aa1047389270cc2b05e2fe85667efb592fbf5e", - "reference": "84aa1047389270cc2b05e2fe85667efb592fbf5e", + "url": "https://api.github.com/repos/laminas/laminas-router/zipball/3512c28cb4ffd64a62bc9e8b685a50a6547b0a11", + "reference": "3512c28cb4ffd64a62bc9e8b685a50a6547b0a11", "shasum": "" }, "require": { @@ -615,10 +613,10 @@ }, "require-dev": { "laminas/laminas-coding-standard": "~2.4.0", - "laminas/laminas-i18n": "^2.17", - "phpunit/phpunit": "^9.5.25", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.28" + "laminas/laminas-i18n": "^2.19.0", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.0", + "vimeo/psalm": "^5.0.0" }, "suggest": { "laminas/laminas-i18n": "^2.15.0 if defining translatable HTTP path segments" @@ -659,30 +657,30 @@ "type": "community_bridge" } ], - "time": "2022-10-10T15:38:09+00:00" + "time": "2022-12-29T14:47:23+00:00" }, { "name": "laminas/laminas-servicemanager", - "version": "3.19.0", + "version": "3.21.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-servicemanager.git", - "reference": "ed160729bb8721127efdaac799f9a298963345b1" + "reference": "625f2aa3bc6dd02688b2da5155b3a69870812bda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/ed160729bb8721127efdaac799f9a298963345b1", - "reference": "ed160729bb8721127efdaac799f9a298963345b1", + "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/625f2aa3bc6dd02688b2da5155b3a69870812bda", + "reference": "625f2aa3bc6dd02688b2da5155b3a69870812bda", "shasum": "" }, "require": { - "laminas/laminas-stdlib": "^3.2.1", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0", + "laminas/laminas-stdlib": "^3.17", + "php": "~8.1.0 || ~8.2.0", "psr/container": "^1.0" }, "conflict": { "ext-psr": "*", - "laminas/laminas-code": "<3.3.1", + "laminas/laminas-code": "<4.10.0", "zendframework/zend-code": "<3.3.1", "zendframework/zend-servicemanager": "*" }, @@ -694,18 +692,19 @@ }, "require-dev": { "composer/package-versions-deprecated": "^1.11.99.5", - "laminas/laminas-coding-standard": "~2.4.0", - "laminas/laminas-container-config-test": "^0.7", + "friendsofphp/proxy-manager-lts": "^1.0.14", + "laminas/laminas-code": "^4.10.0", + "laminas/laminas-coding-standard": "~2.5.0", + "laminas/laminas-container-config-test": "^0.8", "laminas/laminas-dependency-plugin": "^2.2", - "mikey179/vfsstream": "^1.6.11@alpha", - "ocramius/proxy-manager": "^2.14.1", - "phpbench/phpbench": "^1.2.6", - "phpunit/phpunit": "^9.5.25", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.28" + "mikey179/vfsstream": "^1.6.11", + "phpbench/phpbench": "^1.2.9", + "phpunit/phpunit": "^10.0.17", + "psalm/plugin-phpunit": "^0.18.4", + "vimeo/psalm": "^5.8.0" }, "suggest": { - "ocramius/proxy-manager": "ProxyManager ^2.1.1 to handle lazy initialization of services" + "friendsofphp/proxy-manager-lts": "ProxyManager ^2.1.1 to handle lazy initialization of services" }, "bin": [ "bin/generate-deps-for-config-factory", @@ -749,34 +748,34 @@ "type": "community_bridge" } ], - "time": "2022-10-10T20:59:22+00:00" + "time": "2023-05-14T12:24:54+00:00" }, { "name": "laminas/laminas-stdlib", - "version": "3.15.0", + "version": "3.17.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-stdlib.git", - "reference": "63b66bd4b696f024f42616b9d95cdb10e5109c27" + "reference": "dd35c868075bad80b6718959740913e178eb4274" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/63b66bd4b696f024f42616b9d95cdb10e5109c27", - "reference": "63b66bd4b696f024f42616b9d95cdb10e5109c27", + "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/dd35c868075bad80b6718959740913e178eb4274", + "reference": "dd35c868075bad80b6718959740913e178eb4274", "shasum": "" }, "require": { - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0" }, "conflict": { "zendframework/zend-stdlib": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "^2.4.0", - "phpbench/phpbench": "^1.2.6", - "phpunit/phpunit": "^9.5.25", - "psalm/plugin-phpunit": "^0.17.0", - "vimeo/psalm": "^4.28" + "laminas/laminas-coding-standard": "^2.5", + "phpbench/phpbench": "^1.2.9", + "phpunit/phpunit": "^10.0.16", + "psalm/plugin-phpunit": "^0.18.4", + "vimeo/psalm": "^5.8" }, "type": "library", "autoload": { @@ -808,7 +807,7 @@ "type": "community_bridge" } ], - "time": "2022-10-10T19:10:24+00:00" + "time": "2023-03-20T13:51:37+00:00" }, { "name": "laminas/laminas-uri", @@ -870,40 +869,39 @@ }, { "name": "laminas/laminas-validator", - "version": "2.26.0", + "version": "2.35.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-validator.git", - "reference": "a995b21d18c63cd1f5d123d0d2cd31a1c2d828dc" + "reference": "7a4a30f6c526a518ba9af50e037c2f97cb595958" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-validator/zipball/a995b21d18c63cd1f5d123d0d2cd31a1c2d828dc", - "reference": "a995b21d18c63cd1f5d123d0d2cd31a1c2d828dc", + "url": "https://api.github.com/repos/laminas/laminas-validator/zipball/7a4a30f6c526a518ba9af50e037c2f97cb595958", + "reference": "7a4a30f6c526a518ba9af50e037c2f97cb595958", "shasum": "" }, "require": { - "laminas/laminas-servicemanager": "^3.12.0", + "laminas/laminas-servicemanager": "^3.21.0", "laminas/laminas-stdlib": "^3.13", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0", + "psr/http-message": "^1.0.1 || ^2.0.0" }, "conflict": { "zendframework/zend-validator": "*" }, "require-dev": { - "laminas/laminas-coding-standard": "^2.4.0", - "laminas/laminas-db": "^2.15.0", - "laminas/laminas-filter": "^2.22", - "laminas/laminas-http": "^2.16.0", - "laminas/laminas-i18n": "^2.19", - "laminas/laminas-session": "^2.13.0", - "laminas/laminas-uri": "^2.9.1", - "phpunit/phpunit": "^9.5.25", - "psalm/plugin-phpunit": "^0.17.0", - "psr/http-client": "^1.0.1", - "psr/http-factory": "^1.0.1", - "psr/http-message": "^1.0.1", - "vimeo/psalm": "^4.28" + "laminas/laminas-coding-standard": "^2.5", + "laminas/laminas-db": "^2.18", + "laminas/laminas-filter": "^2.32", + "laminas/laminas-i18n": "^2.23", + "laminas/laminas-session": "^2.16", + "laminas/laminas-uri": "^2.10.0", + "phpunit/phpunit": "^10.1.3", + "psalm/plugin-phpunit": "^0.18.4", + "psr/http-client": "^1.0.2", + "psr/http-factory": "^1.0.2", + "vimeo/psalm": "^5.12" }, "suggest": { "laminas/laminas-db": "Laminas\\Db component, required by the (No)RecordExists validator", @@ -951,20 +949,20 @@ "type": "community_bridge" } ], - "time": "2022-10-11T12:58:36+00:00" + "time": "2023-07-10T07:32:01+00:00" }, { "name": "laminas/laminas-view", - "version": "2.25.0", + "version": "2.28.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-view.git", - "reference": "77a4b6d78445ae2f30625c5af09a05ad4e4434eb" + "reference": "c43dd9f89febb79a76cfa01c5cb2b90836d7d748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-view/zipball/77a4b6d78445ae2f30625c5af09a05ad4e4434eb", - "reference": "77a4b6d78445ae2f30625c5af09a05ad4e4434eb", + "url": "https://api.github.com/repos/laminas/laminas-view/zipball/c43dd9f89febb79a76cfa01c5cb2b90836d7d748", + "reference": "c43dd9f89febb79a76cfa01c5cb2b90836d7d748", "shasum": "" }, "require": { @@ -974,9 +972,9 @@ "laminas/laminas-escaper": "^2.5", "laminas/laminas-eventmanager": "^3.4", "laminas/laminas-json": "^3.3", - "laminas/laminas-servicemanager": "^3.14.0", + "laminas/laminas-servicemanager": "^3.21.0", "laminas/laminas-stdlib": "^3.10.1", - "php": "~8.0.0 || ~8.1.0 || ~8.2.0", + "php": "~8.1.0 || ~8.2.0", "psr/container": "^1 || ^2" }, "conflict": { @@ -987,24 +985,23 @@ }, "require-dev": { "laminas/laminas-authentication": "^2.13", - "laminas/laminas-coding-standard": "~2.4.0", - "laminas/laminas-console": "^2.8", - "laminas/laminas-feed": "^2.19", - "laminas/laminas-filter": "^2.25", - "laminas/laminas-http": "^2.17", - "laminas/laminas-i18n": "^2.19", + "laminas/laminas-coding-standard": "~2.5.0", + "laminas/laminas-feed": "^2.20", + "laminas/laminas-filter": "^2.32", + "laminas/laminas-http": "^2.18", + "laminas/laminas-i18n": "^2.23", "laminas/laminas-modulemanager": "^2.14", - "laminas/laminas-mvc": "^3.5", - "laminas/laminas-mvc-i18n": "^1.6", + "laminas/laminas-mvc": "^3.6.1", + "laminas/laminas-mvc-i18n": "^1.7", "laminas/laminas-mvc-plugin-flashmessenger": "^1.9", - "laminas/laminas-navigation": "^2.16", - "laminas/laminas-paginator": "^2.15", - "laminas/laminas-permissions-acl": "^2.12", - "laminas/laminas-router": "^3.10", + "laminas/laminas-navigation": "^2.18.1", + "laminas/laminas-paginator": "^2.17", + "laminas/laminas-permissions-acl": "^2.14", + "laminas/laminas-router": "^3.11.1", "laminas/laminas-uri": "^2.10", - "phpunit/phpunit": "^9.5.26", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.30" + "phpunit/phpunit": "^9.6.8", + "psalm/plugin-phpunit": "^0.18.4", + "vimeo/psalm": "^5.12" }, "suggest": { "laminas/laminas-authentication": "Laminas\\Authentication component", @@ -1052,20 +1049,20 @@ "type": "community_bridge" } ], - "time": "2022-11-07T08:01:13+00:00" + "time": "2023-05-30T11:38:25+00:00" }, { "name": "nikic/php-parser", - "version": "v4.15.1", + "version": "v4.16.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900" + "reference": "19526a33fb561ef417e822e85f08a00db4059c17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", - "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/19526a33fb561ef417e822e85f08a00db4059c17", + "reference": "19526a33fb561ef417e822e85f08a00db4059c17", "shasum": "" }, "require": { @@ -1106,9 +1103,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.16.0" }, - "time": "2022-09-04T07:30:47+00:00" + "time": "2023-06-25T14:52:30+00:00" }, { "name": "psr/container", @@ -1158,6 +1155,59 @@ }, "time": "2021-11-05T16:50:12+00:00" }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, { "name": "webimpress/safe-writer", "version": "2.2.0", @@ -1518,16 +1568,16 @@ }, { "name": "composer/pcre", - "version": "3.0.2", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "4482b6409ca6bfc2af043a5711cd21ac3e7a8dfb" + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/4482b6409ca6bfc2af043a5711cd21ac3e7a8dfb", - "reference": "4482b6409ca6bfc2af043a5711cd21ac3e7a8dfb", + "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", "shasum": "" }, "require": { @@ -1569,7 +1619,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.0.2" + "source": "https://github.com/composer/pcre/tree/3.1.0" }, "funding": [ { @@ -1585,7 +1635,7 @@ "type": "tidelift" } ], - "time": "2022-11-03T20:24:16+00:00" + "time": "2022-11-17T09:50:14+00:00" }, { "name": "composer/semver", @@ -1846,76 +1896,6 @@ }, "time": "2019-12-04T15:06:13+00:00" }, - { - "name": "doctrine/instantiator", - "version": "1.4.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-03-03T08:28:38+00:00" - }, { "name": "felixfbecker/advanced-json-rpc", "version": "v3.2.1", @@ -2017,6 +1997,67 @@ }, "time": "2022-03-02T22:36:06+00:00" }, + { + "name": "fidry/cpu-core-counter", + "version": "0.5.1", + "source": { + "type": "git", + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "b58e5a3933e541dc286cc91fc4f3898bbc6f1623" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/b58e5a3933e541dc286cc91fc4f3898bbc6f1623", + "reference": "b58e5a3933e541dc286cc91fc4f3898bbc6f1623", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "fidry/makefile": "^0.2.0", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^1.9.2", + "phpstan/phpstan-deprecation-rules": "^1.0.0", + "phpstan/phpstan-phpunit": "^1.2.2", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpunit/phpunit": "^9.5.26 || ^8.5.31", + "theofidry/php-cs-fixer-config": "^1.0", + "webmozarts/strict-phpunit": "^7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Fidry\\CpuCoreCounter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Thรฉo FIDRY", + "email": "theo.fidry@gmail.com" + } + ], + "description": "Tiny utility to get the number of CPU cores.", + "keywords": [ + "CPU", + "core" + ], + "support": { + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/0.5.1" + }, + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2022-12-24T12:35:10+00:00" + }, { "name": "laminas/laminas-coding-standard", "version": "2.4.0", @@ -2075,36 +2116,36 @@ }, { "name": "maglnet/composer-require-checker", - "version": "4.2.0", + "version": "4.6.0", "source": { "type": "git", "url": "https://github.com/maglnet/ComposerRequireChecker.git", - "reference": "fb2a69aa2b7307541233536f179275e99451b339" + "reference": "a5d4951d0839b57fb5dce1d6d0a6e36f23b2823f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maglnet/ComposerRequireChecker/zipball/fb2a69aa2b7307541233536f179275e99451b339", - "reference": "fb2a69aa2b7307541233536f179275e99451b339", + "url": "https://api.github.com/repos/maglnet/ComposerRequireChecker/zipball/a5d4951d0839b57fb5dce1d6d0a6e36f23b2823f", + "reference": "a5d4951d0839b57fb5dce1d6d0a6e36f23b2823f", "shasum": "" }, "require": { "composer-runtime-api": "^2.0.0", "ext-phar": "*", - "nikic/php-parser": "^4.13.0", - "php": "^8.0", - "symfony/console": "^6.0.0", - "webmozart/assert": "^1.9.1", - "webmozart/glob": "^4.4.0" + "nikic/php-parser": "^4.15.2", + "php": "~8.1.0 || ~8.2.0", + "symfony/console": "^6.2.3", + "webmozart/assert": "^1.11.0", + "webmozart/glob": "^4.6.0" }, "require-dev": { - "doctrine/coding-standard": "^9.0.0", + "doctrine/coding-standard": "^11.0.0", "ext-zend-opcache": "*", - "mikey179/vfsstream": "^1.6.10", - "phing/phing": "^2.17.0", - "phpstan/phpstan": "^1.2.0", - "phpunit/phpunit": "^9.5.10", - "roave/infection-static-analysis-plugin": "1.13.x-dev as 1.13.0", - "vimeo/psalm": "^4.15" + "mikey179/vfsstream": "^1.6.11", + "phing/phing": "^2.17.4", + "phpstan/phpstan": "^1.9.4", + "phpunit/phpunit": "^9.5.27", + "roave/infection-static-analysis-plugin": "^1.27.0", + "vimeo/psalm": "^5.4.0" }, "bin": [ "bin/composer-require-checker" @@ -2149,22 +2190,22 @@ ], "support": { "issues": "https://github.com/maglnet/ComposerRequireChecker/issues", - "source": "https://github.com/maglnet/ComposerRequireChecker/tree/4.2.0" + "source": "https://github.com/maglnet/ComposerRequireChecker/tree/4.6.0" }, - "time": "2022-08-30T09:36:29+00:00" + "time": "2023-04-21T21:13:53+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.11.0", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { @@ -2202,7 +2243,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { @@ -2210,20 +2251,20 @@ "type": "tidelift" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { "name": "netresearch/jsonmapper", - "version": "v4.0.0", + "version": "v4.2.0", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d" + "reference": "f60565f8c0566a31acf06884cdaa591867ecc956" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", - "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/f60565f8c0566a31acf06884cdaa591867ecc956", + "reference": "f60565f8c0566a31acf06884cdaa591867ecc956", "shasum": "" }, "require": { @@ -2259,62 +2300,9 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.0.0" - }, - "time": "2020-12-01T19:48:11+00:00" - }, - { - "name": "openlss/lib-array2xml", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/nullivex/lib-array2xml.git", - "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nullivex/lib-array2xml/zipball/a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", - "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "type": "library", - "autoload": { - "psr-0": { - "LSS": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Bryan Tong", - "email": "bryan@nullivex.com", - "homepage": "https://www.nullivex.com" - }, - { - "name": "Tony Butler", - "email": "spudz76@gmail.com", - "homepage": "https://www.nullivex.com" - } - ], - "description": "Array2XML conversion library credit to lalit.org", - "homepage": "https://www.nullivex.com", - "keywords": [ - "array", - "array conversion", - "xml", - "xml conversion" - ], - "support": { - "issues": "https://github.com/nullivex/lib-array2xml/issues", - "source": "https://github.com/nullivex/lib-array2xml/tree/master" + "source": "https://github.com/cweiske/jsonmapper/tree/v4.2.0" }, - "time": "2019-03-29T20:06:56+00:00" + "time": "2023-04-09T17:37:40+00:00" }, { "name": "phar-io/manifest", @@ -2638,44 +2626,44 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.18", + "version": "10.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "12fddc491826940cf9b7e88ad9664cf51f0f6d0a" + "reference": "db1497ec8dd382e82c962f7abbe0320e4882ee4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/12fddc491826940cf9b7e88ad9664cf51f0f6d0a", - "reference": "12fddc491826940cf9b7e88ad9664cf51f0f6d0a", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/db1497ec8dd382e82c962f7abbe0320e4882ee4e", + "reference": "db1497ec8dd382e82c962f7abbe0320e4882ee4e", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.14", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", + "nikic/php-parser": "^4.15", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-text-template": "^3.0", + "sebastian/code-unit-reverse-lookup": "^3.0", + "sebastian/complexity": "^3.0", + "sebastian/environment": "^6.0", + "sebastian/lines-of-code": "^2.0", + "sebastian/version": "^4.0", "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.1" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "10.1-dev" } }, "autoload": { @@ -2703,7 +2691,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.18" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.2" }, "funding": [ { @@ -2711,32 +2700,32 @@ "type": "github" } ], - "time": "2022-10-27T13:35:33+00:00" + "time": "2023-05-22T09:04:27+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.6", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + "reference": "5647d65443818959172645e7ed999217360654b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/5647d65443818959172645e7ed999217360654b6", + "reference": "5647d65443818959172645e7ed999217360654b6", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -2763,7 +2752,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.0.2" }, "funding": [ { @@ -2771,28 +2761,28 @@ "type": "github" } ], - "time": "2021-12-02T12:48:52+00:00" + "time": "2023-05-07T09:13:23+00:00" }, { "name": "phpunit/php-invoker", - "version": "3.1.1", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-pcntl": "*" @@ -2800,7 +2790,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -2826,7 +2816,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" }, "funding": [ { @@ -2834,32 +2824,32 @@ "type": "github" } ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2023-02-03T06:56:09+00:00" }, { "name": "phpunit/php-text-template", - "version": "2.0.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "reference": "9f3d3709577a527025f55bcf0f7ab8052c8bb37d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/9f3d3709577a527025f55bcf0f7ab8052c8bb37d", + "reference": "9f3d3709577a527025f55bcf0f7ab8052c8bb37d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -2885,7 +2875,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.0" }, "funding": [ { @@ -2893,32 +2883,32 @@ "type": "github" } ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2023-02-03T06:56:46+00:00" }, { "name": "phpunit/php-timer", - "version": "5.0.3", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -2944,7 +2934,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" }, "funding": [ { @@ -2952,24 +2942,23 @@ "type": "github" } ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2023-02-03T06:57:52+00:00" }, { "name": "phpunit/phpunit", - "version": "9.5.26", + "version": "10.2.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2" + "reference": "1c17815c129f133f3019cc18e8d0c8622e6d9bcd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/851867efcbb6a1b992ec515c71cdcf20d895e9d2", - "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1c17815c129f133f3019cc18e8d0c8622e6d9bcd", + "reference": "1c17815c129f133f3019cc18e8d0c8622e6d9bcd", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -2979,27 +2968,26 @@ "myclabs/deep-copy": "^1.10.1", "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", - "php": ">=7.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", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", - "sebastian/version": "^3.0.2" + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-invoker": "^4.0", + "phpunit/php-text-template": "^3.0", + "phpunit/php-timer": "^6.0", + "sebastian/cli-parser": "^2.0", + "sebastian/code-unit": "^2.0", + "sebastian/comparator": "^5.0", + "sebastian/diff": "^5.0", + "sebastian/environment": "^6.0", + "sebastian/exporter": "^5.0", + "sebastian/global-state": "^6.0", + "sebastian/object-enumerator": "^5.0", + "sebastian/recursion-context": "^5.0", + "sebastian/type": "^4.0", + "sebastian/version": "^4.0" }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files" }, "bin": [ "phpunit" @@ -3007,7 +2995,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-main": "10.2-dev" } }, "autoload": { @@ -3038,7 +3026,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.26" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.2.6" }, "funding": [ { @@ -3054,20 +3043,20 @@ "type": "tidelift" } ], - "time": "2022-10-28T06:00:21+00:00" + "time": "2023-07-17T12:08:28+00:00" }, { "name": "psalm/plugin-phpunit", - "version": "0.18.3", + "version": "0.18.4", "source": { "type": "git", "url": "https://github.com/psalm/psalm-plugin-phpunit.git", - "reference": "057c1cdf7546c1e427f6fd83b635d0cc18c252bf" + "reference": "e4ab3096653d9eb6f6d0ea5f4461898d59ae4dbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psalm/psalm-plugin-phpunit/zipball/057c1cdf7546c1e427f6fd83b635d0cc18c252bf", - "reference": "057c1cdf7546c1e427f6fd83b635d0cc18c252bf", + "url": "https://api.github.com/repos/psalm/psalm-plugin-phpunit/zipball/e4ab3096653d9eb6f6d0ea5f4461898d59ae4dbc", + "reference": "e4ab3096653d9eb6f6d0ea5f4461898d59ae4dbc", "shasum": "" }, "require": { @@ -3075,7 +3064,7 @@ "composer/semver": "^1.4 || ^2.0 || ^3.0", "ext-simplexml": "*", "php": "^7.1 || ^8.0", - "vimeo/psalm": "dev-master || dev-4.x || ^4.5 || ^5@beta" + "vimeo/psalm": "dev-master || dev-4.x || ^4.7.1 || ^5@beta || ^5.0" }, "conflict": { "phpunit/phpunit": "<7.5" @@ -3112,9 +3101,9 @@ "description": "Psalm plugin for PHPUnit", "support": { "issues": "https://github.com/psalm/psalm-plugin-phpunit/issues", - "source": "https://github.com/psalm/psalm-plugin-phpunit/tree/0.18.3" + "source": "https://github.com/psalm/psalm-plugin-phpunit/tree/0.18.4" }, - "time": "2022-11-03T18:17:28+00:00" + "time": "2022-12-03T07:47:07+00:00" }, { "name": "psr/log", @@ -3168,28 +3157,28 @@ }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/efdc130dbbbb8ef0b545a994fd811725c5282cae", + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -3212,7 +3201,7 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.0" }, "funding": [ { @@ -3220,32 +3209,32 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2023-02-03T06:58:15+00:00" }, { "name": "sebastian/code-unit", - "version": "1.0.8", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -3268,7 +3257,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" }, "funding": [ { @@ -3276,32 +3265,32 @@ "type": "github" } ], - "time": "2020-10-26T13:08:54+00:00" + "time": "2023-02-03T06:58:43+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -3323,7 +3312,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" }, "funding": [ { @@ -3331,34 +3320,36 @@ "type": "github" } ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2023-02-03T06:59:15+00:00" }, { "name": "sebastian/comparator", - "version": "4.0.8", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + "reference": "72f01e6586e0caf6af81297897bd112eb7e9627c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/72f01e6586e0caf6af81297897bd112eb7e9627c", + "reference": "72f01e6586e0caf6af81297897bd112eb7e9627c", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -3397,7 +3388,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.0" }, "funding": [ { @@ -3405,33 +3396,33 @@ "type": "github" } ], - "time": "2022-09-14T12:41:17+00:00" + "time": "2023-02-03T07:07:16+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "e67d240970c9dc7ea7b2123a6d520e334dd61dc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/e67d240970c9dc7ea7b2123a6d520e334dd61dc6", + "reference": "e67d240970c9dc7ea7b2123a6d520e334dd61dc6", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" + "nikic/php-parser": "^4.10", + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -3454,7 +3445,7 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/complexity/tree/3.0.0" }, "funding": [ { @@ -3462,33 +3453,33 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2023-02-03T06:59:47+00:00" }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "5.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/912dc2fbe3e3c1e7873313cc801b100b6c68c87b", + "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3", + "phpunit/phpunit": "^10.0", "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -3520,7 +3511,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.0.3" }, "funding": [ { @@ -3528,27 +3520,27 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2023-05-01T07:48:21+00:00" }, { "name": "sebastian/environment", - "version": "5.1.4", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/43c751b41d74f96cbbd4e07b7aec9675651e2951", + "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-posix": "*" @@ -3556,7 +3548,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -3575,7 +3567,7 @@ } ], "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", @@ -3583,7 +3575,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.0.1" }, "funding": [ { @@ -3591,34 +3584,34 @@ "type": "github" } ], - "time": "2022-04-03T09:37:03+00:00" + "time": "2023-04-11T05:39:26+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.5", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + "reference": "f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0", + "reference": "f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -3660,7 +3653,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + "source": "https://github.com/sebastianbergmann/exporter/tree/5.0.0" }, "funding": [ { @@ -3668,38 +3661,35 @@ "type": "github" } ], - "time": "2022-09-14T06:03:37+00:00" + "time": "2023-02-03T07:06:49+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.5", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + "reference": "aab257c712de87b90194febd52e4d184551c2d44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/aab257c712de87b90194febd52e4d184551c2d44", + "reference": "aab257c712de87b90194febd52e4d184551c2d44", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -3724,7 +3714,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.0" }, "funding": [ { @@ -3732,33 +3722,33 @@ "type": "github" } ], - "time": "2022-02-14T08:28:10+00:00" + "time": "2023-02-03T07:07:38+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "17c4d940ecafb3d15d2cf916f4108f664e28b130" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/17c4d940ecafb3d15d2cf916f4108f664e28b130", + "reference": "17c4d940ecafb3d15d2cf916f4108f664e28b130", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" + "nikic/php-parser": "^4.10", + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -3781,7 +3771,7 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.0" }, "funding": [ { @@ -3789,34 +3779,34 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-02-03T07:08:02+00:00" }, { "name": "sebastian/object-enumerator", - "version": "4.0.4", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -3838,7 +3828,7 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" }, "funding": [ { @@ -3846,32 +3836,32 @@ "type": "github" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2023-02-03T07:08:32+00:00" }, { "name": "sebastian/object-reflector", - "version": "2.0.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -3893,7 +3883,7 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" }, "funding": [ { @@ -3901,32 +3891,32 @@ "type": "github" } ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2023-02-03T07:06:18+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.4", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -3953,10 +3943,10 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" }, "funding": [ { @@ -3964,87 +3954,32 @@ "type": "github" } ], - "time": "2020-10-26T13:17:30+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2023-02-03T07:05:40+00:00" }, { "name": "sebastian/type", - "version": "3.2.0", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", - "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.5" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -4067,7 +4002,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" }, "funding": [ { @@ -4075,29 +4010,29 @@ "type": "github" } ], - "time": "2022-09-12T14:47:03+00:00" + "time": "2023-02-03T07:10:45+00:00" }, { "name": "sebastian/version", - "version": "3.0.2", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -4120,7 +4055,7 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" }, "funding": [ { @@ -4128,7 +4063,7 @@ "type": "github" } ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2023-02-07T11:34:05+00:00" }, { "name": "slevomat/coding-standard", @@ -4191,18 +4126,81 @@ ], "time": "2022-05-25T10:58:12+00:00" }, + { + "name": "spatie/array-to-xml", + "version": "3.1.6", + "source": { + "type": "git", + "url": "https://github.com/spatie/array-to-xml.git", + "reference": "e210b98957987c755372465be105d32113f339a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/e210b98957987c755372465be105d32113f339a4", + "reference": "e210b98957987c755372465be105d32113f339a4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": "^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.2", + "pestphp/pest": "^1.21", + "spatie/pest-plugin-snapshots": "^1.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\ArrayToXml\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://freek.dev", + "role": "Developer" + } + ], + "description": "Convert an array to xml", + "homepage": "https://github.com/spatie/array-to-xml", + "keywords": [ + "array", + "convert", + "xml" + ], + "support": { + "source": "https://github.com/spatie/array-to-xml/tree/3.1.6" + }, + "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2023-05-11T14:04:07+00:00" + }, { "name": "squizlabs/php_codesniffer", - "version": "3.7.1", + "version": "3.7.2", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619" + "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/1359e176e9307e906dc3d890bcc9603ff6d90619", - "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879", + "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879", "shasum": "" }, "require": { @@ -4238,33 +4236,35 @@ "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", "keywords": [ "phpcs", - "standards" + "standards", + "static analysis" ], "support": { "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", "source": "https://github.com/squizlabs/PHP_CodeSniffer", "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" }, - "time": "2022-06-18T07:21:10+00:00" + "time": "2023-02-22T23:07:41+00:00" }, { "name": "symfony/console", - "version": "v6.0.15", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "b0b910724a0a0326b4481e4f8a30abb2dd442efb" + "reference": "8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/b0b910724a0a0326b4481e4f8a30abb2dd442efb", - "reference": "b0b910724a0a0326b4481e4f8a30abb2dd442efb", + "url": "https://api.github.com/repos/symfony/console/zipball/8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7", + "reference": "8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^1.1|^2|^3", + "symfony/service-contracts": "^2.5|^3", "symfony/string": "^5.4|^6.0" }, "conflict": { @@ -4286,12 +4286,6 @@ "symfony/process": "^5.4|^6.0", "symfony/var-dumper": "^5.4|^6.0" }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, "type": "library", "autoload": { "psr-4": { @@ -4319,12 +4313,12 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.0.15" + "source": "https://github.com/symfony/console/tree/v6.3.0" }, "funding": [ { @@ -4340,29 +4334,29 @@ "type": "tidelift" } ], - "time": "2022-10-26T21:42:20+00:00" + "time": "2023-05-29T12:49:39+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.0.2", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c" + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", - "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -4391,7 +4385,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.2" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" }, "funding": [ { @@ -4407,48 +4401,35 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.26.0", + "name": "symfony/filesystem", + "version": "v6.3.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + "url": "https://github.com/symfony/filesystem.git", + "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", + "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4456,24 +4437,18 @@ ], "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for ctype functions", + "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + "source": "https://github.com/symfony/filesystem/tree/v6.3.1" }, "funding": [ { @@ -4489,32 +4464,35 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2023-06-01T08:30:39+00:00" }, { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.26.0", + "name": "symfony/polyfill-ctype", + "version": "v1.27.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "433d05519ce6990bf3530fba6957499d327395c2" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", - "reference": "433d05519ce6990bf3530fba6957499d327395c2", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-ctype": "*" + }, "suggest": { - "ext-intl": "For best performance" + "ext-ctype": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4526,7 +4504,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + "Symfony\\Polyfill\\Ctype\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -4535,26 +4513,24 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's grapheme_* functions", + "description": "Symfony polyfill for ctype functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "grapheme", - "intl", + "ctype", "polyfill", - "portable", - "shim" + "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" }, "funding": [ { @@ -4570,20 +4546,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.26.0", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.27.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", "shasum": "" }, "require": { @@ -4595,7 +4571,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4607,11 +4583,8 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4627,18 +4600,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", + "description": "Symfony polyfill for intl's grapheme_* functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", + "grapheme", "intl", - "normalizer", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" }, "funding": [ { @@ -4654,35 +4627,32 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.26.0", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.27.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", "shasum": "" }, "require": { "php": ">=7.1" }, - "provide": { - "ext-mbstring": "*" - }, "suggest": { - "ext-mbstring": "For best performance" + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4694,8 +4664,11 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4711,17 +4684,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Mbstring extension", + "description": "Symfony polyfill for intl's Normalizer class and related functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "mbstring", + "intl", + "normalizer", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" }, "funding": [ { @@ -4737,29 +4711,35 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.26.0", + "name": "symfony/polyfill-mbstring", + "version": "v1.27.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4771,21 +4751,14 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -4795,16 +4768,17 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Symfony polyfill for the Mbstring extension", "homepage": "https://symfony.com", "keywords": [ "compatibility", + "mbstring", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" }, "funding": [ { @@ -4820,7 +4794,7 @@ "type": "tidelift" } ], - "time": "2022-05-10T07:21:04+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/service-contracts", @@ -4907,32 +4881,33 @@ }, { "name": "symfony/string", - "version": "v6.0.15", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "51ac0fa0ccf132a00519b87c97e8f775fa14e771" + "reference": "f2e190ee75ff0f5eced645ec0be5c66fac81f51f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/51ac0fa0ccf132a00519b87c97e8f775fa14e771", - "reference": "51ac0fa0ccf132a00519b87c97e8f775fa14e771", + "url": "https://api.github.com/repos/symfony/string/zipball/f2e190ee75ff0f5eced645ec0be5c66fac81f51f", + "reference": "f2e190ee75ff0f5eced645ec0be5c66fac81f51f", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": "<2.0" + "symfony/translation-contracts": "<2.5" }, "require-dev": { "symfony/error-handler": "^5.4|^6.0", "symfony/http-client": "^5.4|^6.0", - "symfony/translation-contracts": "^2.0|^3.0", + "symfony/intl": "^6.2", + "symfony/translation-contracts": "^2.5|^3.0", "symfony/var-exporter": "^5.4|^6.0" }, "type": "library", @@ -4972,7 +4947,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.0.15" + "source": "https://github.com/symfony/string/tree/v6.3.0" }, "funding": [ { @@ -4988,7 +4963,7 @@ "type": "tidelift" } ], - "time": "2022-10-10T09:34:08+00:00" + "time": "2023-03-21T21:06:29+00:00" }, { "name": "theseer/tokenizer", @@ -5042,24 +5017,24 @@ }, { "name": "vimeo/psalm", - "version": "4.30.0", + "version": "5.13.1", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "d0bc6e25d89f649e4f36a534f330f8bb4643dd69" + "reference": "086b94371304750d1c673315321a55d15fc59015" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/d0bc6e25d89f649e4f36a534f330f8bb4643dd69", - "reference": "d0bc6e25d89f649e4f36a534f330f8bb4643dd69", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/086b94371304750d1c673315321a55d15fc59015", + "reference": "086b94371304750d1c673315321a55d15fc59015", "shasum": "" }, "require": { "amphp/amp": "^2.4.2", "amphp/byte-stream": "^1.5", - "composer/package-versions-deprecated": "^1.8.0", + "composer-runtime-api": "^2", "composer/semver": "^1.4 || ^2.0 || ^3.0", - "composer/xdebug-handler": "^1.1 || ^2.0 || ^3.0", + "composer/xdebug-handler": "^2.0 || ^3.0", "dnoegel/php-xdg-base-dir": "^0.1.1", "ext-ctype": "*", "ext-dom": "*", @@ -5068,35 +5043,35 @@ "ext-mbstring": "*", "ext-simplexml": "*", "ext-tokenizer": "*", - "felixfbecker/advanced-json-rpc": "^3.0.3", - "felixfbecker/language-server-protocol": "^1.5", + "felixfbecker/advanced-json-rpc": "^3.1", + "felixfbecker/language-server-protocol": "^1.5.2", + "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1", "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "nikic/php-parser": "^4.13", - "openlss/lib-array2xml": "^1.0", - "php": "^7.1|^8", - "sebastian/diff": "^3.0 || ^4.0", - "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0 || ^6.0", - "symfony/polyfill-php80": "^1.25", - "webmozart/path-util": "^2.3" + "nikic/php-parser": "^4.14", + "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0", + "sebastian/diff": "^4.0 || ^5.0", + "spatie/array-to-xml": "^2.17.0 || ^3.0", + "symfony/console": "^4.1.6 || ^5.0 || ^6.0", + "symfony/filesystem": "^5.4 || ^6.0" }, "provide": { "psalm/psalm": "self.version" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "brianium/paratest": "^4.0||^6.0", + "amphp/phpunit-util": "^2.0", + "bamarni/composer-bin-plugin": "^1.4", + "brianium/paratest": "^6.9", "ext-curl": "*", + "mockery/mockery": "^1.5", + "nunomaduro/mock-final-classes": "^1.1", "php-parallel-lint/php-parallel-lint": "^1.2", - "phpdocumentor/reflection-docblock": "^5", - "phpmyadmin/sql-parser": "5.1.0||dev-master", - "phpspec/prophecy": ">=1.9.0", - "phpstan/phpdoc-parser": "1.2.* || 1.6.4", - "phpunit/phpunit": "^9.0", - "psalm/plugin-phpunit": "^0.16", - "slevomat/coding-standard": "^7.0", - "squizlabs/php_codesniffer": "^3.5", - "symfony/process": "^4.3 || ^5.0 || ^6.0", - "weirdan/prophecy-shim": "^1.0 || ^2.0" + "phpstan/phpdoc-parser": "^1.6", + "phpunit/phpunit": "^9.6", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18", + "slevomat/coding-standard": "^8.4", + "squizlabs/php_codesniffer": "^3.6", + "symfony/process": "^4.4 || ^5.0 || ^6.0" }, "suggest": { "ext-curl": "In order to send data to shepherd", @@ -5112,17 +5087,14 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev", + "dev-master": "5.x-dev", + "dev-4.x": "4.x-dev", "dev-3.x": "3.x-dev", "dev-2.x": "2.x-dev", "dev-1.x": "1.x-dev" } }, "autoload": { - "files": [ - "src/functions.php", - "src/spl_object_id.php" - ], "psr-4": { "Psalm\\": "src/Psalm/" } @@ -5140,34 +5112,35 @@ "keywords": [ "code", "inspection", - "php" + "php", + "static analysis" ], "support": { "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm/tree/4.30.0" + "source": "https://github.com/vimeo/psalm/tree/5.13.1" }, - "time": "2022-11-06T20:37:08+00:00" + "time": "2023-06-27T16:39:49+00:00" }, { "name": "webimpress/coding-standard", - "version": "1.2.4", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/webimpress/coding-standard.git", - "reference": "cd0c4b0b97440c337c1f7da17b524674ca2f9ca9" + "reference": "b26557e2386711ecb74f22718f4b4bde5ddbc899" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webimpress/coding-standard/zipball/cd0c4b0b97440c337c1f7da17b524674ca2f9ca9", - "reference": "cd0c4b0b97440c337c1f7da17b524674ca2f9ca9", + "url": "https://api.github.com/repos/webimpress/coding-standard/zipball/b26557e2386711ecb74f22718f4b4bde5ddbc899", + "reference": "b26557e2386711ecb74f22718f4b4bde5ddbc899", "shasum": "" }, "require": { "php": "^7.3 || ^8.0", - "squizlabs/php_codesniffer": "^3.6.2" + "squizlabs/php_codesniffer": "^3.7.2" }, "require-dev": { - "phpunit/phpunit": "^9.5.13" + "phpunit/phpunit": "^9.6.4" }, "type": "phpcodesniffer-standard", "extra": { @@ -5193,7 +5166,7 @@ ], "support": { "issues": "https://github.com/webimpress/coding-standard/issues", - "source": "https://github.com/webimpress/coding-standard/tree/1.2.4" + "source": "https://github.com/webimpress/coding-standard/tree/1.3.1" }, "funding": [ { @@ -5201,7 +5174,7 @@ "type": "github" } ], - "time": "2022-02-15T19:52:12+00:00" + "time": "2023-03-09T15:05:18+00:00" }, { "name": "webmozart/glob", @@ -5251,57 +5224,6 @@ "source": "https://github.com/webmozarts/glob/tree/4.6.0" }, "time": "2022-05-24T19:45:58+00:00" - }, - { - "name": "webmozart/path-util", - "version": "2.3.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/path-util.git", - "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725", - "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "webmozart/assert": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\PathUtil\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", - "support": { - "issues": "https://github.com/webmozart/path-util/issues", - "source": "https://github.com/webmozart/path-util/tree/2.3.0" - }, - "abandoned": "symfony/filesystem", - "time": "2015-12-17T08:42:14+00:00" } ], "aliases": [], @@ -5310,11 +5232,11 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "~8.1.0 || ~8.2.0" }, "platform-dev": [], "platform-overrides": { - "php": "8.0.99" + "php": "8.1.99" }, "plugin-api-version": "2.3.0" } diff --git a/phpunit.xml.dist b/phpunit.xml.dist index b699f37..b548314 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -3,23 +3,30 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" bootstrap="./vendor/autoload.php" - convertDeprecationsToExceptions="true" - colors="true"> + colors="true" + cacheDirectory=".phpunit.cache" + displayDetailsOnTestsThatTriggerDeprecations="true" + displayDetailsOnTestsThatTriggerErrors="true" + displayDetailsOnTestsThatTriggerNotices="true" + displayDetailsOnTestsThatTriggerWarnings="true" + failOnDeprecation="true" + failOnNotice="true" + failOnWarning="true" +> ./test/ - disable - - + + ./src - + diff --git a/psalm-baseline.xml b/psalm-baseline.xml new file mode 100644 index 0000000..d1553ea --- /dev/null +++ b/psalm-baseline.xml @@ -0,0 +1,8 @@ + + + + + router]]> + + + diff --git a/psalm.xml b/psalm.xml index 7b8d39f..53428dc 100644 --- a/psalm.xml +++ b/psalm.xml @@ -5,6 +5,9 @@ xmlns="https://getpsalm.org/schema/config" xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd" findUnusedPsalmSuppress="true" + findUnusedBaselineEntry="true" + findUnusedCode="true" + errorBaseline="psalm-baseline.xml" > @@ -13,38 +16,18 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + diff --git a/src/ConfigProvider.php b/src/ConfigProvider.php index 1fb5b28..97ef4cb 100644 --- a/src/ConfigProvider.php +++ b/src/ConfigProvider.php @@ -4,10 +4,15 @@ namespace Laminas\Mvc\View; -use Laminas\ServiceManager\ConfigInterface; +use Laminas\ServiceManager\ServiceManager; use Laminas\View\Helper as ViewHelper; -/** @psalm-import-type ServiceManagerConfigurationType from ConfigInterface */ +/** + * @psalm-import-type ServiceManagerConfiguration from ServiceManager + * @psalm-type ViewHelperConfiguration = array{ + * server_url?: non-empty-string|null, + * } + */ final class ConfigProvider { /** @return array */ @@ -41,13 +46,13 @@ public function __invoke(): array ]; } - /** @return ServiceManagerConfigurationType */ + /** @return ServiceManagerConfiguration */ public function getDependencyConfig(): array { return []; } - /** @return ServiceManagerConfigurationType */ + /** @return ServiceManagerConfiguration */ public function getViewHelperConfig(): array { return [ diff --git a/src/Helper/Url.php b/src/Helper/Url.php index fa7a14e..73f7560 100644 --- a/src/Helper/Url.php +++ b/src/Helper/Url.php @@ -20,8 +20,8 @@ final class Url { public function __construct( - private RouteMatch $routeMatch, - private RouteStackInterface $router + private readonly RouteMatch $routeMatch, + private readonly RouteStackInterface $router ) { } @@ -32,7 +32,7 @@ public function __construct( * * @param string|null $name Name of the route * @param iterable $params Parameters for the link - * @param iterable|bool $options Options for the route, or bool $reuseMatchedParams to skip the 4th argument + * @param iterable|bool $options Options for the route, or boolean to skip the 4th argument * @param bool $reuseMatchedParams Whether to reuse matched parameters * @return string Url For the link href attribute * @throws RouteNotMatchedException If RouteMatch didn't contain a matched route name. @@ -40,7 +40,7 @@ public function __construct( public function __invoke( ?string $name = null, iterable $params = [], - $options = [], + iterable|bool $options = [], bool $reuseMatchedParams = false ): string { /** @psalm-suppress RedundantCastGivenDocblockType */ diff --git a/test/Helper/Factory/DoctypeFactoryTest.php b/test/Helper/Factory/DoctypeFactoryTest.php index 87e34ed..ab30abe 100644 --- a/test/Helper/Factory/DoctypeFactoryTest.php +++ b/test/Helper/Factory/DoctypeFactoryTest.php @@ -6,6 +6,7 @@ use Laminas\Mvc\View\Helper\Factory\DoctypeFactory; use Laminas\View\Helper\Doctype; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Psr\Container\ContainerInterface; @@ -62,7 +63,7 @@ public function testThatTheDoctypeWillBeAsConfiguredWhenAppropriateConfigCanBeFo } /** @return array, 1: string}> */ - public function configProvider(): array + public static function configProvider(): array { $helper = new Doctype(); $default = $helper->getDoctype(); @@ -75,7 +76,7 @@ public function configProvider(): array ]; } - /** @dataProvider configProvider */ + #[DataProvider('configProvider')] public function testConfigScenarios(iterable $config, string $expectedDoctype): void { $this->container->expects(self::once()) diff --git a/test/Helper/Factory/UrlFactoryTest.php b/test/Helper/Factory/UrlFactoryTest.php index 6d9ba6a..832d428 100644 --- a/test/Helper/Factory/UrlFactoryTest.php +++ b/test/Helper/Factory/UrlFactoryTest.php @@ -7,6 +7,7 @@ use Laminas\Mvc\Application; use Laminas\Mvc\MvcEvent; use Laminas\Mvc\View\Helper\Factory\UrlFactory; +use Laminas\Mvc\View\Helper\Url; use Laminas\Router\Http\RouteMatch; use Laminas\Router\Http\TreeRouteStack; use PHPUnit\Framework\TestCase; @@ -39,6 +40,7 @@ public function testTheFactoryWillComposeTheCorrectDependencies(): void ['Application', $application], ]); - (new UrlFactory())->__invoke($container); + $helper = (new UrlFactory())->__invoke($container); + self::assertInstanceOf(Url::class, $helper); } } diff --git a/test/Helper/ServerUrlTest.php b/test/Helper/ServerUrlTest.php index 2516158..854bb56 100644 --- a/test/Helper/ServerUrlTest.php +++ b/test/Helper/ServerUrlTest.php @@ -5,6 +5,7 @@ namespace LaminasTest\Mvc\View\Helper; use Laminas\Mvc\View\Helper\ServerUrl; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; class ServerUrlTest extends TestCase @@ -24,7 +25,7 @@ public function testHelperWillReturnTheConfiguredUrlWhenCalledWithoutArgument(): } /** @return list */ - public function pathProvider(): array + public static function pathProvider(): array { return [ ['/foo', 'https://example.com/foo'], @@ -38,8 +39,8 @@ public function pathProvider(): array /** * @param non-empty-string $path - * @dataProvider pathProvider */ + #[DataProvider('pathProvider')] public function testPathArgumentsYieldTheExpectedUrl(string $path, string $expect): void { self::assertSame($expect, $this->helper->__invoke($path)); diff --git a/test/ModuleTest.php b/test/ModuleTest.php new file mode 100644 index 0000000..cc14534 --- /dev/null +++ b/test/ModuleTest.php @@ -0,0 +1,32 @@ +getConfig(); + self::assertArrayHasKey($key, $config); + self::assertSame($expectedType, gettype($config[$key])); + } +} From e01b72e60b96bd0cf249789d3a5ae2a63eb7b980 Mon Sep 17 00:00:00 2001 From: George Steel Date: Tue, 18 Jul 2023 23:16:33 +0100 Subject: [PATCH 12/13] Remove empty method for dependency configuration Signed-off-by: George Steel --- src/ConfigProvider.php | 7 ------- src/Module.php | 6 +----- test/ModuleTest.php | 1 - 3 files changed, 1 insertion(+), 13 deletions(-) diff --git a/src/ConfigProvider.php b/src/ConfigProvider.php index 97ef4cb..a0f6777 100644 --- a/src/ConfigProvider.php +++ b/src/ConfigProvider.php @@ -19,7 +19,6 @@ final class ConfigProvider public function __invoke(): array { return [ - 'dependencies' => $this->getDependencyConfig(), 'view_helpers' => $this->getViewHelperConfig(), /** * Configuration for Individual View Helpers @@ -46,12 +45,6 @@ public function __invoke(): array ]; } - /** @return ServiceManagerConfiguration */ - public function getDependencyConfig(): array - { - return []; - } - /** @return ServiceManagerConfiguration */ public function getViewHelperConfig(): array { diff --git a/src/Module.php b/src/Module.php index 07583f6..de82fe4 100644 --- a/src/Module.php +++ b/src/Module.php @@ -4,8 +4,6 @@ namespace Laminas\Mvc\View; -use function array_merge; - final class Module { public function getConfig(): array @@ -14,8 +12,6 @@ public function getConfig(): array $config = $provider(); unset($config['dependencies']); - return array_merge([ - 'service_manager' => $provider->getDependencyConfig(), - ], $config); + return $config; } } diff --git a/test/ModuleTest.php b/test/ModuleTest.php index cc14534..a8b1b17 100644 --- a/test/ModuleTest.php +++ b/test/ModuleTest.php @@ -17,7 +17,6 @@ public static function expectedKeys(): array return [ ['view_helpers', 'array'], ['view_helper_config', 'array'], - ['service_manager', 'array'], ['view_manager', 'array'], ]; } From 016f5e3818bfb67931e032a866b74d4467154e5e Mon Sep 17 00:00:00 2001 From: George Steel Date: Wed, 19 Jul 2023 09:25:31 +0100 Subject: [PATCH 13/13] Remove TODO list Signed-off-by: George Steel --- MVC-TODO.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 MVC-TODO.md diff --git a/MVC-TODO.md b/MVC-TODO.md deleted file mode 100644 index 567691c..0000000 --- a/MVC-TODO.md +++ /dev/null @@ -1,5 +0,0 @@ -# Changes Required for `laminas/mvc` - -The URL view helper factory is a [closure created here](https://github.com/laminas/laminas-mvc/blob/3.4.x/src/Service/ViewHelperManagerFactory.php#L73-L100). This closure will need to be changed to inject the router and route match instances into the helper constructor, or, removed completely to favour the shipped `UrlFactory`. - -The [Doctype factory in ViewHelperManagerFactory](https://github.com/laminas/laminas-mvc/blob/3.4.x/src/Service/ViewHelperManagerFactory.php#L131-L152) can be dropped in favour of the shipped factory.