Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
timacdonald committed Oct 13, 2023
1 parent dbd94d6 commit 3b0b42a
Show file tree
Hide file tree
Showing 10 changed files with 27 additions and 73 deletions.
4 changes: 2 additions & 2 deletions src/Concerns/Identification.php
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ private function resolveType(Request $request)
*/
private static function idResolver()
{
return self::$idResolver ?? function (mixed $resource, Request $request): string {
return self::$idResolver ??= function (mixed $resource, Request $request): string {
if (! $resource instanceof Model) {
throw ResourceIdentificationException::attemptingToDetermineIdFor($resource);
}
Expand All @@ -144,7 +144,7 @@ private static function idResolver()
*/
private static function typeResolver()
{
return self::$typeResolver ?? function (mixed $resource, Request $request): string {
return self::$typeResolver ??= function (mixed $resource, Request $request): string {
if (! $resource instanceof Model) {
throw ResourceIdentificationException::attemptingToDetermineTypeFor($resource);
}
Expand Down
2 changes: 1 addition & 1 deletion src/Concerns/Implementation.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,6 @@ public static function resolveServerImplementationNormally()
*/
public static function serverImplementationResolver()
{
return self::$serverImplementationResolver ?? fn (Request $request): ServerImplementation => new ServerImplementation('1.0');
return self::$serverImplementationResolver ??= fn (Request $request): ServerImplementation => new ServerImplementation('1.0');
}
}
2 changes: 1 addition & 1 deletion src/Concerns/Relationships.php
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ private function shouldBePresentInIncludes()
*/
private static function guessRelationshipResource(string $relationship, JsonApiResource $resource)
{
return (self::$relationshipResourceGuesser ?? function (string $relationship, JsonApiResource $resource): string {
return (self::$relationshipResourceGuesser ??= function (string $relationship, JsonApiResource $resource): string {
$relationship = Str::of($relationship);

foreach ([
Expand Down
13 changes: 5 additions & 8 deletions src/Exceptions/ResourceIdentificationException.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,31 +9,28 @@
use function gettype;
use function is_object;

/**
* @internal
*/
final class ResourceIdentificationException extends RuntimeException
{
/**
* @internal
*
* @return self
*/
public static function attemptingToDetermineIdFor(mixed $resource)
{
return new static('Unable to resolve resource object id for ['.static::determineType($resource).'].');
return new self('Unable to resolve resource object id for ['.static::determineType($resource).'].');
}

/**
* @internal
*
* @return self
*/
public static function attemptingToDetermineTypeFor(mixed $resource)
{
return new static('Unable to resolve resource object type for ['.static::determineType($resource).'].');
return new self('Unable to resolve resource object type for ['.static::determineType($resource).'].');
}

/**
* @internal
*
* @return string
*/
private static function determineType(mixed $resource)
Expand Down
7 changes: 3 additions & 4 deletions src/Exceptions/UnknownRelationshipException.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,12 @@
use function gettype;
use function is_object;

/**
* @internal
*/
final class UnknownRelationshipException extends Exception
{
/**
* @internal
*
* @return self
*/
public static function from(mixed $resource)
Expand All @@ -24,8 +25,6 @@ public static function from(mixed $resource)
}

/**
* @internal
*
* @return string
*/
private static function determineType(mixed $resource)
Expand Down
38 changes: 4 additions & 34 deletions src/JsonApiResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
use Illuminate\Http\Resources\PotentiallyMissing;
use Illuminate\Support\Collection;
use stdClass;

use function property_exists;

abstract class JsonApiResource extends JsonResource
Expand All @@ -25,8 +24,6 @@ abstract class JsonApiResource extends JsonResource
use Concerns\Relationships;

/**
* @api
*
* @return array<string, mixed>
*/
public function toAttributes(Request $request)
Expand All @@ -37,8 +34,6 @@ public function toAttributes(Request $request)
}

/**
* @api
*
* @return array<string, (callable(): JsonApiResource|JsonApiResourceCollection|PotentiallyMissing)>
*/
public function toRelationships(Request $request)
Expand All @@ -49,8 +44,6 @@ public function toRelationships(Request $request)
}

/**
* @api
*
* @return array<int, Link>
*/
public function toLinks(Request $request)
Expand All @@ -61,8 +54,6 @@ public function toLinks(Request $request)
}

/**
* @api
*
* @return array<string, mixed>
*/
public function toMeta(Request $request)
Expand All @@ -73,8 +64,6 @@ public function toMeta(Request $request)
}

/**
* @api
*
* @return string
*/
public function toId(Request $request)
Expand All @@ -83,8 +72,6 @@ public function toId(Request $request)
}

/**
* @api
*
* @return string
*/
public function toType(Request $request)
Expand All @@ -93,8 +80,6 @@ public function toType(Request $request)
}

/**
* @api
*
* @return RelationshipObject
*/
public function toResourceLink(Request $request)
Expand All @@ -105,8 +90,6 @@ public function toResourceLink(Request $request)
}

/**
* @api
*
* @return ResourceIdentifier
*/
public function toResourceIdentifier(Request $request)
Expand All @@ -115,12 +98,9 @@ public function toResourceIdentifier(Request $request)
}

/**
* @api
*
* @param Request $request
* @return array{id: string, type: string, attributes?: stdClass, relationships?: stdClass, meta?: stdClass, links?: stdClass}
*/
public function toArray($request)
public function toArray(Request $request)
{
return [
'id' => $this->resolveId($request),
Expand All @@ -135,12 +115,9 @@ public function toArray($request)
}

/**
* @api
*
* @param Request $request
* @return array{included: Collection<int, JsonApiResource>, jsonapi: JsonApiServerImplementation}
* @return array{included?: Collection<int, JsonApiResource>, jsonapi: JsonApiServerImplementation}
*/
public function with($request)
public function with(Request $request)
{
return [
...($included = $this->included($request)
Expand All @@ -152,12 +129,9 @@ public function with($request)
}

/**
* @api
*
* @param mixed $resource
* @return JsonApiResourceCollection<int, mixed>
*/
public static function collection($resource)
public static function collection(mixed $resource)
{
return tap(static::newCollection($resource), function (JsonApiResourceCollection $collection): void {
if (property_exists(static::class, 'preserveKeys')) {
Expand All @@ -168,8 +142,6 @@ public static function collection($resource)
}

/**
* @api
*
* @return JsonApiResourceCollection<int, mixed>
*/
public static function newCollection(mixed $resource)
Expand All @@ -178,8 +150,6 @@ public static function newCollection(mixed $resource)
}

/**
* @api
*
* @param Request $request
* @return JsonResponse
*/
Expand Down
20 changes: 3 additions & 17 deletions src/JsonApiResourceCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ class JsonApiResourceCollection extends AnonymousResourceCollection
use Concerns\RelationshipLinks;

/**
* @api
*
* @param (callable(JsonApiResource): JsonApiResource) $callback
* @return $this
*/
Expand All @@ -26,8 +24,6 @@ public function map(callable $callback)
}

/**
* @api
*
* @return RelationshipObject
*/
public function toResourceLink(Request $request)
Expand All @@ -36,8 +32,6 @@ public function toResourceLink(Request $request)
}

/**
* @internal
*
* @return Collection<int, ResourceIdentifier>
*/
private function resolveResourceIdentifiers(Request $request)
Expand All @@ -48,12 +42,9 @@ private function resolveResourceIdentifiers(Request $request)
}

/**
* @api
*
* @param Request $request
* @return array{included: Collection<int, JsonApiResource>, jsonapi: JsonApiServerImplementation}
* @return array{included?: Collection<int, JsonApiResource>, jsonapi: JsonApiServerImplementation}
*/
public function with($request)
public function with(Request $request)
{
return [
...($included = $this->collection
Expand All @@ -67,8 +58,6 @@ public function with($request)
}

/**
* @api
*
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
Expand All @@ -78,14 +67,11 @@ public function toResponse($request)
}

/**
* @api
*
* @param Request $request
* @param array<array-key, mixed> $paginated
* @param array{links: array<string, ?string>} $default
* @return array{links: array<string, string>}
*/
public function paginationInformation($request, $paginated, $default)
public function paginationInformation(Request $request, array $paginated, array $default)
{
if (isset($default['links'])) {
$default['links'] = array_filter($default['links'], fn (?string $link): bool => $link !== null);
Expand Down
6 changes: 4 additions & 2 deletions src/Link.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,18 @@ final class Link implements JsonSerializable

/**
* @param array<string, mixed> $meta
* @return self
*/
public static function self(string $href, array $meta = []): self
public static function self(string $href, array $meta = [])
{
return new self('self', $href, $meta);
}

/**
* @param array<string, mixed> $meta
* @return self
*/
public static function related(string $href, array $meta = []): self
public static function related(string $href, array $meta = [])
{
return new self('related', $href, $meta);
}
Expand Down
7 changes: 4 additions & 3 deletions src/RelationshipObject.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@ final class RelationshipObject implements JsonSerializable
/**
* @param array<int, Link> $links
* @param array<string, mixed> $meta
* @return self
*/
public static function toOne(ResourceIdentifier|null $data, array $links = [], array $meta = []): self
public static function toOne(ResourceIdentifier|null $data, array $links = [], array $meta = [])
{
return new self($data, $links, $meta);
}
Expand All @@ -30,8 +31,9 @@ public static function toOne(ResourceIdentifier|null $data, array $links = [], a
* @param array<int, ResourceIdentifier> $data
* @param array<int, Link> $links
* @param array<string, mixed> $meta
* @return self
*/
public static function toMany(array $data, array $links = [], array $meta = []): self
public static function toMany(array $data, array $links = [], array $meta = [])
{
return new self($data, $links, $meta);
}
Expand All @@ -50,7 +52,6 @@ private function __construct(ResourceIdentifier|array|null $data, array $links =
$this->meta = $meta;
}


/**
* @return array{data: ResourceIdentifier|null|array<int, ResourceIdentifier>, meta?: stdClass, links?: stdClass}
*/
Expand Down
1 change: 0 additions & 1 deletion src/Support/Includes.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
use Illuminate\Support\Str;
use Symfony\Component\HttpKernel\Exception\HttpException;
use WeakMap;

use function explode;
use function is_array;

Expand Down

0 comments on commit 3b0b42a

Please sign in to comment.