fractalzombie /
frzb-request-mapper
| 1 | <?php |
||
| 2 | |||
| 3 | declare(strict_types=1); |
||
| 4 | |||
| 5 | namespace FRZB\Component\RequestMapper\Helper; |
||
| 6 | |||
| 7 | use Fp\Collections\ArrayList; |
||
| 8 | use FRZB\Component\RequestMapper\Attribute\RequestBody; |
||
| 9 | use JetBrains\PhpStorm\Immutable; |
||
| 10 | use JetBrains\PhpStorm\Pure; |
||
| 11 | |||
| 12 | /** @internal */ |
||
| 13 | #[Immutable] |
||
| 14 | final class RequestBodyHelper |
||
| 15 | { |
||
| 16 | private const REQUEST_POSTFIXES = ['Request', 'Dto', 'DTO']; |
||
| 17 | |||
| 18 | private function __construct() |
||
| 19 | { |
||
| 20 | } |
||
| 21 | |||
| 22 | public static function getAttribute(\ReflectionParameter $parameter, array $attributes): ?RequestBody |
||
| 23 | { |
||
| 24 | return $attributes[PropertyHelper::getName($parameter)] |
||
| 25 | ?? $attributes[PropertyHelper::getTypeName($parameter)] |
||
| 26 | ?? self::searchAttribute($parameter, $attributes); |
||
| 27 | } |
||
| 28 | |||
| 29 | #[Pure] |
||
| 30 | public static function mapAttribute(RequestBody $paramConverter): array |
||
| 31 | { |
||
| 32 | return [$paramConverter->argumentName ?? $paramConverter->requestClass => $paramConverter]; |
||
| 33 | } |
||
| 34 | |||
| 35 | /** @return array<string, RequestBody> */ |
||
| 36 | public static function fromReflectionAttributes(\ReflectionAttribute ...$attributes): array |
||
| 37 | { |
||
| 38 | return ArrayList::collect($attributes) |
||
| 39 | ->map(static fn (\ReflectionAttribute $ra): RequestBody => $ra->newInstance()) |
||
| 40 | ->map(self::mapAttribute(...)) |
||
| 41 | ->reduce(array_merge(...)) |
||
|
0 ignored issues
–
show
|
|||
| 42 | ->getOrElse([]) |
||
| 43 | ; |
||
| 44 | } |
||
| 45 | |||
| 46 | public static function fromReflectionParameter(\ReflectionParameter $parameter): ?RequestBody |
||
| 47 | { |
||
| 48 | $parameterName = $parameter->getName(); |
||
| 49 | $parameterType = PropertyHelper::getTypeName($parameter); |
||
| 50 | |||
| 51 | return match (true) { |
||
| 52 | !$parameterType, !ClassHelper::isNameContains($parameterType, ...self::REQUEST_POSTFIXES) => null, |
||
| 53 | default => new RequestBody(requestClass: $parameterType, argumentName: $parameterName), |
||
| 54 | }; |
||
| 55 | } |
||
| 56 | |||
| 57 | private static function searchAttribute(\ReflectionParameter $parameter, array $attributes): ?RequestBody |
||
| 58 | { |
||
| 59 | return ArrayList::collect($attributes) |
||
| 60 | ->first(static fn (RequestBody $pc): bool => $pc->equals($parameter)) |
||
| 61 | ->getOrElse(self::fromReflectionParameter($parameter)) |
||
| 62 | ; |
||
| 63 | } |
||
| 64 | } |
||
| 65 |
The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g.
excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths