Skip to content

Commit e63b2be

Browse files
committed
feat: phpstan lvl 6 compliant
1 parent 9e41353 commit e63b2be

21 files changed

+285
-81
lines changed

CHANGELOG-1.1.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
Release note
22
============
33

4+
# v1.1.4
5+
### Changes
6+
- phpstan lvl 6 compliant
7+
- Schema safe instantiate self for structure generation
8+
### Fixes
9+
- Schema correct handle attributes
10+
411
# v1.1.3
512
### Added
613
- `Includes::includes` return the remaining includes for current resource

phpstan.neon

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
parameters:
2+
paths:
3+
- src
4+
level: 6
5+
checkGenericClassInNonGenericObjectType: false

src/Requests/Rules/Fields.php

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ class Fields implements Rule
1313
{
1414
use UseTrans;
1515

16+
/**
17+
* @var array<int, array{":resource": string, ":fields": ?string}>>
18+
*/
1619
protected array $failures;
1720

1821
/**
@@ -31,7 +34,10 @@ public function passes($attribute, $value): bool
3134
return $this->assert($schema, $desired);
3235
}
3336

34-
public function message()
37+
/**
38+
* @return array<string>
39+
*/
40+
public function message(): array
3541
{
3642
$base = 'validation.custom.jsonapi.fields';
3743
$message = $this->trans(
@@ -55,6 +61,12 @@ public function message()
5561
));
5662
}
5763

64+
/**
65+
* @param object $schema
66+
* @param array<string, string[]> $desired
67+
*
68+
* @return bool
69+
*/
5870
private function assert(object $schema, array $desired): bool
5971
{
6072
$resources = $this->extractSchemaFields($schema);
@@ -75,6 +87,12 @@ private function assert(object $schema, array $desired): bool
7587
return empty($this->failures);
7688
}
7789

90+
/**
91+
* @param object $schema
92+
* @param array<string, string[]> $resources
93+
*
94+
* @return array<string, string[]>
95+
*/
7896
private function extractSchemaFields(object $schema, array $resources = []): array
7997
{
8098
if (isset($resources[$schema->type])) {

src/Requests/Rules/Includes.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ class Includes implements Rule
1313
{
1414
use UseTrans;
1515

16+
/**
17+
* @var array<int, array{":include": string, ":relation": string}>>
18+
*/
1619
protected array $failures;
1720

1821
/**
@@ -31,7 +34,10 @@ public function passes($attribute, $value): bool
3134
return $this->assert($schema, $desired);
3235
}
3336

34-
public function message()
37+
/**
38+
* @return array<string>
39+
*/
40+
public function message(): array
3541
{
3642
$base = 'validation.custom.jsonapi.includes';
3743
$message = $this->trans(
@@ -49,7 +55,13 @@ public function message()
4955
));
5056
}
5157

52-
58+
/**
59+
* @param object $schema
60+
* @param array<string, mixed> $desired
61+
* @param string $pretend
62+
*
63+
* @return bool
64+
*/
5365
private function assert(object $schema, array $desired, string $pretend = ''): bool
5466
{
5567
foreach ($desired as $relation => $sub) {

src/Requests/Rules/Traits/UseTrans.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,14 @@
88

99
trait UseTrans
1010
{
11-
protected function trans($key, $default, array $replace = []): array
11+
/**
12+
* @param string|null $key
13+
* @param string $default
14+
* @param array<string, string> $replace
15+
*
16+
* @return array<string>
17+
*/
18+
protected function trans(?string $key, string $default, array $replace = []): array
1219
{
1320
$message = trans($key);
1421

src/Resources/Concerns/Attributes.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44

55
use Ark4ne\JsonApi\Support\Fields;
66
use Illuminate\Http\Request;
7+
use Illuminate\Support\Collection;
78

8-
use function collect;
99
use function value;
1010

1111
trait Attributes
@@ -15,7 +15,7 @@ trait Attributes
1515
*
1616
* @param \Illuminate\Http\Request $request
1717
*
18-
* @return array<string, Closure|mixed>
18+
* @return iterable<string, Closure|mixed>
1919
*
2020
* ```
2121
* return [
@@ -33,11 +33,11 @@ protected function toAttributes(Request $request): iterable
3333
/**
3434
* @param \Illuminate\Http\Request $request
3535
*
36-
* @return array
36+
* @return array<string, mixed>
3737
*/
3838
private function requestedAttributes(Request $request): array
3939
{
40-
$attributes = collect($this->toAttributes($request))
40+
$attributes = (new Collection($this->toAttributes($request)))
4141
->map(fn($value) => value($value))
4242
->toArray();
4343

src/Resources/Concerns/Identifier.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ protected function toIdentifier(Request $request): int|string
4141
return $this->resource->getKey();
4242
}
4343

44-
return $this->id;
44+
return $this->resource->id;
4545
}
4646

4747
}

src/Resources/Concerns/Meta.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ trait Meta
1212
*
1313
* @param \Illuminate\Http\Request $request
1414
*
15-
* @return iterable|null
15+
* @return iterable<string, mixed>|null
1616
*
1717
* ```
1818
* return [
@@ -31,7 +31,7 @@ protected function toResourceMeta(Request $request): ?iterable
3131
*
3232
* @param \Illuminate\Http\Request $request
3333
*
34-
* @return iterable|null
34+
* @return iterable<string, string>|null
3535
*/
3636
protected function toMeta(Request $request): ?iterable
3737
{

src/Resources/Concerns/Relationize.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
trait Relationize
99
{
1010
/**
11-
* @param \Closure $value
12-
* @param \Closure|null $links
13-
* @param \Closure|null $meta
11+
* @param Closure $value
12+
* @param Closure|null $links
13+
* @param Closure|null $meta
1414
*
1515
* @return \Ark4ne\JsonApi\Resources\Relationship<static>
1616
*/

src/Resources/Concerns/Relationships.php

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Ark4ne\JsonApi\Resources\Relationship;
66
use Ark4ne\JsonApi\Support\Includes;
77
use Illuminate\Http\Request;
8+
use Illuminate\Support\Collection;
89

910
trait Relationships
1011
{
@@ -13,7 +14,7 @@ trait Relationships
1314
*
1415
* @param \Illuminate\Http\Request $request
1516
*
16-
* @return array<string, Relationship>
17+
* @return array<string, Relationship>|iterable<Relationship>
1718
*
1819
* ```
1920
* return [
@@ -30,6 +31,11 @@ protected function toRelationships(Request $request): iterable
3031
return [];
3132
}
3233

34+
/**
35+
* @param \Illuminate\Http\Request $request
36+
*
37+
* @return array<string, array{data?: mixed, links?: mixed, meta?: mixed}>
38+
*/
3339
private function requestedRelationships(Request $request): array
3440
{
3541
$relations = [];
@@ -49,6 +55,13 @@ private function requestedRelationships(Request $request): array
4955
return $relations;
5056
}
5157

58+
/**
59+
* @param bool $included
60+
* @param \Illuminate\Http\Request $request
61+
* @param \Ark4ne\JsonApi\Resources\Relationship $relationship
62+
*
63+
* @return array{data?: mixed, links?: mixed, meta?: mixed}
64+
*/
5265
private function mapRelationship(
5366
bool $included,
5467
Request $request,
@@ -67,11 +80,11 @@ private function mapRelationship(
6780
foreach ($resource['with'] as $key => $value) {
6881
$this->with[$key] = array_merge(
6982
$this->with[$key] ?? [],
70-
collect($value)->all()
83+
(new Collection($value))->all()
7184
);
7285
}
7386
}
7487

75-
return $resource['data'] ?? [];
88+
return $resource['data'];
7689
}
7790
}

0 commit comments

Comments
 (0)