diff --git a/composer.lock b/composer.lock index 565b7ed..c95e371 100644 --- a/composer.lock +++ b/composer.lock @@ -361,27 +361,22 @@ }, { "name": "psr/container", - "version": "2.0.2", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", "shasum": "" }, "require": { "php": ">=7.4.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -408,9 +403,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" + "source": "https://github.com/php-fig/container/tree/1.1.2" }, - "time": "2021-11-05T16:47:00+00:00" + "time": "2021-11-05T16:50:12+00:00" }, { "name": "psr/http-factory", @@ -1553,23 +1548,22 @@ }, { "name": "laminas/laminas-servicemanager", - "version": "3.15.0", + "version": "3.20.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-servicemanager.git", - "reference": "65910ef6a8066b0369fab77fbec9e030be59c866" + "reference": "bc2c2cbe2dd90db8b9d16b0618f542692b76ab59" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/65910ef6a8066b0369fab77fbec9e030be59c866", - "reference": "65910ef6a8066b0369fab77fbec9e030be59c866", + "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/bc2c2cbe2dd90db8b9d16b0618f542692b76ab59", + "reference": "bc2c2cbe2dd90db8b9d16b0618f542692b76ab59", "shasum": "" }, "require": { - "composer-plugin-api": "^2.0", "laminas/laminas-stdlib": "^3.2.1", - "php": "~7.4.0 || ~8.0.0 || ~8.1.0", - "psr/container": "^1.1 || ^2.0.2" + "php": "~8.0.0 || ~8.1.0 || ~8.2.0", + "psr/container": "^1.0" }, "conflict": { "ext-psr": "*", @@ -1578,21 +1572,22 @@ "zendframework/zend-servicemanager": "*" }, "provide": { - "psr/container-implementation": "^1.1 || ^2.0" + "psr/container-implementation": "^1.0" }, "replace": { "container-interop/container-interop": "^1.2.0" }, "require-dev": { - "laminas/laminas-coding-standard": "~2.3.0", - "laminas/laminas-container-config-test": "^0.6", - "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" + "composer/package-versions-deprecated": "^1.11.99.5", + "laminas/laminas-coding-standard": "~2.4.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.7", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "^0.18.0", + "vimeo/psalm": "^5.0.0" }, "suggest": { "ocramius/proxy-manager": "ProxyManager ^2.1.1 to handle lazy initialization of services" @@ -1639,7 +1634,7 @@ "type": "community_bridge" } ], - "time": "2022-07-18T21:18:56+00:00" + "time": "2022-12-01T17:03:38+00:00" }, { "name": "laminas/laminas-stdlib", @@ -4075,6 +4070,73 @@ ], "time": "2022-12-28T14:21:34+00:00" }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:55:41+00:00" + }, { "name": "symfony/filesystem", "version": "v6.0.13", @@ -4553,21 +4615,22 @@ }, { "name": "symfony/service-contracts", - "version": "v3.0.2", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66" + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d78d39c1599bd1188b8e26bb341da52c3c6d8a66", - "reference": "d78d39c1599bd1188b8e26bb341da52c3c6d8a66", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", "shasum": "" }, "require": { - "php": ">=8.0.2", - "psr/container": "^2.0" + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" }, "conflict": { "ext-psr": "<1.1|>=2" @@ -4578,7 +4641,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -4615,7 +4678,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.0.2" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" }, "funding": [ { @@ -4631,7 +4694,7 @@ "type": "tidelift" } ], - "time": "2022-05-30T19:17:58+00:00" + "time": "2022-05-30T19:17:29+00:00" }, { "name": "symfony/string", diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 5c983fa..c5d3aaf 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -1,5 +1,5 @@ - + $routeName @@ -44,32 +44,15 @@ $configProvider() - + $configProvider() - $config['dependencies'] - $factory - $name - - $dependencies - $package['extra']['laminas']['config-provider'] - - $config['dependencies']['services'] - $config['dependencies']['services']['config'] - - - $factory - $name - new $package['extra']['laminas']['config-provider']() - - assertIsArray - diff --git a/src/ConfigProvider.php b/src/ConfigProvider.php index b98b097..4431b07 100644 --- a/src/ConfigProvider.php +++ b/src/ConfigProvider.php @@ -4,10 +4,12 @@ namespace Mezzio\Authorization\Rbac; -use Zend\Expressive\Authorization\Rbac\ZendRbac; +use Laminas\ServiceManager\ConfigInterface; +/** @psalm-import-type ServiceManagerConfigurationType from ConfigInterface */ class ConfigProvider { + /** @return array{dependencies: ServiceManagerConfigurationType} */ public function __invoke(): array { return [ @@ -15,12 +17,13 @@ public function __invoke(): array ]; } + /** @return ServiceManagerConfigurationType */ public function getDependencies(): array { return [ // Legacy Zend Framework aliases 'aliases' => [ - ZendRbac::class => LaminasRbac::class, + 'Zend\Expressive\Authorization\Rbac\ZendRbac' => LaminasRbac::class, ], 'factories' => [ LaminasRbac::class => LaminasRbacFactory::class, diff --git a/test/ConfigProviderTest.php b/test/ConfigProviderTest.php index 4e89d9a..d46eab5 100644 --- a/test/ConfigProviderTest.php +++ b/test/ConfigProviderTest.php @@ -4,6 +4,7 @@ namespace MezzioTest\Authorization\Rbac; +use Laminas\ServiceManager\ConfigInterface; use Laminas\ServiceManager\ServiceManager; use Mezzio\Authorization\Rbac\ConfigProvider; use Mezzio\Authorization\Rbac\LaminasRbac; @@ -14,6 +15,7 @@ use function json_decode; use function sprintf; +/** @psalm-import-type ServiceManagerConfigurationType from ConfigInterface */ class ConfigProviderTest extends TestCase { /** @var ConfigProvider */ @@ -24,15 +26,19 @@ protected function setUp(): void $this->provider = new ConfigProvider(); } + /** @return array{dependencies: ServiceManagerConfigurationType} */ public function testInvocationReturnsArray(): array { $config = ($this->provider)(); + /** @psalm-suppress RedundantCondition */ self::assertIsArray($config); return $config; } /** + * @param array{dependencies: ServiceManagerConfigurationType} $config * @depends testInvocationReturnsArray + * @psalm-suppress RedundantConditionGivenDocblockType */ public function testReturnedArrayContainsDependencies(array $config): void { @@ -40,7 +46,7 @@ public function testReturnedArrayContainsDependencies(array $config): void self::assertIsArray($config['dependencies']); self::assertArrayHasKey('factories', $config['dependencies']); - $factories = $config['dependencies']['factories']; + $factories = $config['dependencies']['factories'] ?? null; self::assertIsArray($factories); self::assertArrayHasKey(LaminasRbac::class, $factories); } @@ -70,7 +76,10 @@ public function testServicesDefinedInConfigProvider(): void $container = $this->getContainer($config['dependencies']); $dependencies = $this->provider->getDependencies(); - foreach ($dependencies['factories'] as $name => $factory) { + $factories = $dependencies['factories'] ?? null; + self::assertIsArray($factories); + foreach ($factories as $name => $factory) { + self::assertIsString($factory); self::assertTrue($container->has($name), sprintf('Container does not contain service %s', $name)); self::assertIsObject( $container->get($name), @@ -79,6 +88,7 @@ public function testServicesDefinedInConfigProvider(): void } } + /** @param ServiceManagerConfigurationType $dependencies */ private function getContainer(array $dependencies): ServiceManager { return new ServiceManager($dependencies);