collection = $this->collection->map($callback); return $this; } /** * @return RelationshipObject */ public function toResourceLink(Request $request) { return RelationshipObject::toMany($this->resolveResourceIdentifiers($request)->all()); } /** * @return Collection */ private function resolveResourceIdentifiers(Request $request) { return $this->collection ->uniqueStrict(fn (JsonApiResource $resource): array => $resource->uniqueKey($request)) ->map(fn (JsonApiResource $resource): ResourceIdentifier => $resource->resolveResourceIdentifier($request)); } /** * @param Request $request * @return array{included?: array, jsonapi?: ServerImplementation} */ public function with($request) { return [ ...($included = $this->collection ->map(fn (JsonApiResource $resource): Collection => $resource->included($request)) ->flatten() ->uniqueStrict(fn (JsonApiResource $resource): array => $resource->uniqueKey($request)) ->values() ->all()) ? ['included' => $included] : [], ...($implementation = $this->collects::toServerImplementation($request)) ? ['jsonapi' => $implementation] : [], ]; } /** * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function toResponse($request) { return tap(parent::toResponse($request)->header('Content-type', 'application/vnd.api+json'), $this->flush(...)); } /** * @param array $paginated * @param array{links: array} $default * @return array{links: array} */ 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); } if (isset($default['meta']['links'])) { $default['meta']['links'] = array_map( function (array $link): array { $link['label'] = (string) $link['label']; return $link; }, $default['meta']['links'] ); } return $default; } /** * @internal * * @return $this */ public function withIncludePrefix(string $prefix) { $this->collection->each(fn (JsonApiResource $resource): JsonApiResource => $resource->withIncludePrefix($prefix)); return $this; } /** * @internal * * @return Collection> */ public function included(Request $request) { return $this->collection->map(fn (JsonApiResource $resource): Collection => $resource->included($request)); } /** * @internal * * @return Collection */ public function includable() { return $this->collection; } /** * @internal * * @infection-ignore-all * * @return void */ public function flush() { $this->collection->each(fn (JsonApiResource $resource) => $resource->flush()); } }