diff --git a/composer.json b/composer.json index 366f417..2e61259 100644 --- a/composer.json +++ b/composer.json @@ -16,15 +16,15 @@ }, "require": { "php": "^8.4.0", - "symfony/yaml": "^6 || ^7", + "symfony/yaml": "^7.4.12 || ^8.0.12", "devizzent/cebe-php-openapi": "^1.1.5" }, "require-dev": { - "phpunit/phpunit": "^12.5.11", - "phpstan/phpstan": "^1.12.33", + "phpunit/phpunit": "^13.1.11", + "phpstan/phpstan": "^2.1.55", "squizlabs/php_codesniffer": "^4.0.1", "mikey179/vfsstream": "^v1.6.12", - "infection/infection": "^0.32.6" + "infection/infection": "^0.33.2" }, "config": { "allow-plugins": { diff --git a/src/CebeReader.php b/src/CebeReader.php index 086f5a1..bb8dcb0 100644 --- a/src/CebeReader.php +++ b/src/CebeReader.php @@ -20,6 +20,7 @@ public function __construct( if (empty($this->supportedVersions)) { throw CannotSupport::noSupportedVersions(); } + /** @phpstan-ignore-next-line this enforces the constructor type hint*/ (fn (OpenAPIVersion ...$versions) => null)(...$this->supportedVersions); } diff --git a/src/ValueObject/Valid/V30/Keywords.php b/src/ValueObject/Valid/V30/Keywords.php index 27fc3e4..d80306a 100644 --- a/src/ValueObject/Valid/V30/Keywords.php +++ b/src/ValueObject/Valid/V30/Keywords.php @@ -135,7 +135,7 @@ public function __construct( } } - /** @return string[] */ + /** @return list */ public function typesItCanBe(): array { $possibilities = [array_merge( @@ -179,10 +179,6 @@ private function validateTypes( null|string|array $type, bool $nullable, ): array { - if (isset($this->types)) { - return $this->types; - } - if (empty($type)) { // If type is unspecified, nullable has no effect return []; // So we can return immediately } @@ -207,12 +203,12 @@ private function validateTypes( $result[] = Type::Null; } - return $result; + return array_values($result); } /** * @param list $types - * @param list|null $enum + * @param array|null $enum * @return non-empty-list */ private function reviewEnum( @@ -382,7 +378,7 @@ private function validateRequired(array | null $required): array $this->addWarning('required must not contain duplicates', Warning::INVALID); } - return $uniqueRequired; + return array_values($uniqueRequired); } /** diff --git a/src/ValueObject/Valid/V30/OpenAPI.php b/src/ValueObject/Valid/V30/OpenAPI.php index 7bd40c0..e7ea4ef 100644 --- a/src/ValueObject/Valid/V30/OpenAPI.php +++ b/src/ValueObject/Valid/V30/OpenAPI.php @@ -13,7 +13,7 @@ final class OpenAPI extends Validated { /** - * @param array $servers + * @param list $servers * Optional, may be left empty. * If empty or unspecified, the array will contain the default Server. * The default Server has "url" === "/" and no "variables" @@ -62,7 +62,7 @@ public static function fromPartial(Partial\OpenAPI $openAPI): self /** * @param Partial\Server[] $servers - * @return array + * @return list */ private static function validateServers( Identifier $identifier, @@ -93,7 +93,7 @@ private function reviewServers(array $servers): void } /** - * @param Server[] $servers + * @param list $servers * @param null|Partial\PathItem[] $pathItems * @return array */ diff --git a/src/ValueObject/Valid/V30/Operation.php b/src/ValueObject/Valid/V30/Operation.php index b424f56..125189e 100644 --- a/src/ValueObject/Valid/V30/Operation.php +++ b/src/ValueObject/Valid/V30/Operation.php @@ -16,7 +16,7 @@ final class Operation extends Validated { /** - * @param array $servers + * @param list $servers * Optional, may be left empty. * If empty or unspecified, the array will contain the Path level servers * @@ -57,7 +57,7 @@ public function withoutServers(): Operation } /** - * @param Server[] $pathServers + * @param list $pathServers * @param Parameter[] $pathParameters */ public static function fromPartial( @@ -104,9 +104,9 @@ public static function fromPartial( } /** - * @param array $pathServers + * @param list $pathServers * @param Partial\Server[] $operationServers - * @return array> + * @return list */ private static function validateServers( Identifier $identifier, diff --git a/src/ValueObject/Valid/V30/PathItem.php b/src/ValueObject/Valid/V30/PathItem.php index bbc504a..239f339 100644 --- a/src/ValueObject/Valid/V30/PathItem.php +++ b/src/ValueObject/Valid/V30/PathItem.php @@ -14,7 +14,7 @@ final class PathItem extends Validated { /** - * @param array $servers + * @param list $servers * * @param array $parameters * The list MUST NOT include duplicated parameters. @@ -62,7 +62,7 @@ public function withoutServers(): PathItem } /** - * @param array $openAPIServers + * @param list $openAPIServers * If the pathItem does not contain servers, this will be used instead */ public static function fromPartial( @@ -168,7 +168,7 @@ public function getOperations(): array /** * @param array $openAPIServers * @param Partial\Server[] $pathServers - * @return array> + * @return list */ private static function validateServers( Identifier $identifier, @@ -176,7 +176,7 @@ private static function validateServers( array $pathServers ): array { if (empty($pathServers)) { - return $openAPIServers; + return array_values($openAPIServers); } return array_values(array_map( @@ -249,7 +249,7 @@ private function reviewParameters(array $parameters): void } /** - * @param Server[] $servers + * @param list $servers * @param Parameter[] $parameters */ private static function validateOperation( diff --git a/src/ValueObject/Valid/V30/Schema.php b/src/ValueObject/Valid/V30/Schema.php index f6a2b38..fbeb652 100644 --- a/src/ValueObject/Valid/V30/Schema.php +++ b/src/ValueObject/Valid/V30/Schema.php @@ -65,10 +65,10 @@ public function canBePrimitive(): bool public function typesItCanBe(): array { if ($this->value === true) { - return [ + return array_values([ Type::Null->value, ...Type::valuesForVersion(OpenAPIVersion::Version_3_0), - ]; + ]); } elseif ($this->value === false) { return []; } else { diff --git a/src/ValueObject/Valid/V30/ServerVariable.php b/src/ValueObject/Valid/V30/ServerVariable.php index 91707d8..d70868b 100644 --- a/src/ValueObject/Valid/V30/ServerVariable.php +++ b/src/ValueObject/Valid/V30/ServerVariable.php @@ -51,6 +51,8 @@ public function __construct( } } - $this->enum = $serverVariable->enum; + $this->enum = isset($serverVariable->enum) + ? array_values($serverVariable->enum) + : null; } } diff --git a/src/ValueObject/Valid/V31/Keywords.php b/src/ValueObject/Valid/V31/Keywords.php index d1691c2..4cbefc9 100644 --- a/src/ValueObject/Valid/V31/Keywords.php +++ b/src/ValueObject/Valid/V31/Keywords.php @@ -125,7 +125,7 @@ public function __construct( } } - /** @return string[] */ + /** @return list */ public function typesItCanBe(): array { $possibilities = [array_merge( @@ -175,16 +175,16 @@ private function validateTypes(null|string|array $type): array $type = [$type]; } - return array_map( + return array_values(array_map( fn($t) => Type::tryFromVersion(OpenAPIVersion::Version_3_1, $t) ?? throw InvalidOpenAPI::invalidType($this->getIdentifier(), $t), $type, - ); + )); } /** * @param list $types - * @param list|null $enum + * @param array|null $enum * @return non-empty-list|null */ private function reviewEnum( @@ -404,7 +404,7 @@ private function validateRequired(array | null $required): array $this->addWarning('required must not contain duplicates', Warning::INVALID); } - return $uniqueRequired; + return array_values($uniqueRequired); } /** diff --git a/src/ValueObject/Valid/V31/OpenAPI.php b/src/ValueObject/Valid/V31/OpenAPI.php index 30ba580..78268e5 100644 --- a/src/ValueObject/Valid/V31/OpenAPI.php +++ b/src/ValueObject/Valid/V31/OpenAPI.php @@ -13,7 +13,7 @@ final class OpenAPI extends Validated { /** - * @param array $servers + * @param list $servers * Optional, may be left empty. * If empty or unspecified, the array will contain the default Server. * The default Server has "url" === "/" and no "variables" @@ -62,7 +62,7 @@ public static function fromPartial(Partial\OpenAPI $openAPI): self /** * @param Partial\Server[] $servers - * @return array + * @return list */ private static function validateServers( Identifier $identifier, diff --git a/src/ValueObject/Valid/V31/Operation.php b/src/ValueObject/Valid/V31/Operation.php index a733870..10020ac 100644 --- a/src/ValueObject/Valid/V31/Operation.php +++ b/src/ValueObject/Valid/V31/Operation.php @@ -16,7 +16,7 @@ final class Operation extends Validated { /** - * @param array $servers + * @param list $servers * Optional, may be left empty. * If empty or unspecified, the array will contain the Path level servers * @@ -106,7 +106,7 @@ public static function fromPartial( /** * @param array $pathServers * @param Partial\Server[] $operationServers - * @return array> + * @return list */ private static function validateServers( Identifier $identifier, @@ -114,7 +114,7 @@ private static function validateServers( array $operationServers ): array { if (empty($operationServers)) { - return $pathServers; + return array_values($pathServers); } $result = array_values(array_map( diff --git a/src/ValueObject/Valid/V31/PathItem.php b/src/ValueObject/Valid/V31/PathItem.php index e39e8db..e2d3f80 100644 --- a/src/ValueObject/Valid/V31/PathItem.php +++ b/src/ValueObject/Valid/V31/PathItem.php @@ -14,7 +14,7 @@ final class PathItem extends Validated { /** - * @param array $servers + * @param list $servers * * @param array $parameters * The list MUST NOT include duplicated parameters. @@ -168,7 +168,7 @@ public function getOperations(): array /** * @param array $openAPIServers * @param Partial\Server[] $pathServers - * @return array> + * @return list */ private static function validateServers( Identifier $identifier, @@ -176,7 +176,7 @@ private static function validateServers( array $pathServers ): array { if (empty($pathServers)) { - return $openAPIServers; + return array_values($openAPIServers); } return array_values(array_map( diff --git a/src/ValueObject/Valid/V31/Schema.php b/src/ValueObject/Valid/V31/Schema.php index ccc41ab..06d150c 100644 --- a/src/ValueObject/Valid/V31/Schema.php +++ b/src/ValueObject/Valid/V31/Schema.php @@ -65,10 +65,10 @@ public function canBePrimitive(): bool public function typesItCanBe(): array { if ($this->value === true) { - return [ + return array_values([ Type::Null->value, ...Type::valuesForVersion(OpenAPIVersion::Version_3_0), - ]; + ]); } elseif ($this->value === false) { return []; } else { diff --git a/src/ValueObject/Valid/V31/ServerVariable.php b/src/ValueObject/Valid/V31/ServerVariable.php index 424aa01..8bf3880 100644 --- a/src/ValueObject/Valid/V31/ServerVariable.php +++ b/src/ValueObject/Valid/V31/ServerVariable.php @@ -51,6 +51,6 @@ public function __construct( } } - $this->enum = $serverVariable->enum; + $this->enum = array_values($serverVariable->enum ?? []); } }