directiveHasArgument('builder')) { // This is done only for validation $this->getResolverFromArgument('builder'); } else { $paginationManipulator->setModelClass( $this->getModelClass() ); } $paginationManipulator->transformToPaginatedField( $this->paginationType(), $fieldDefinition, $parentType, $this->defaultCount(), $this->paginateMaxCount() ); } public function resolveField(FieldValue $fieldValue): FieldValue { return $fieldValue->setResolver( function ($root, array $args, GraphQLContext $context, ResolveInfo $resolveInfo): Paginator { if ($this->directiveHasArgument('builder')) { $builderResolver = $this->getResolverFromArgument('builder'); $query = $builderResolver($root, $args, $context, $resolveInfo); } else { $query = $this->getModelClass()::query(); } $query = $resolveInfo ->argumentSet ->enhanceBuilder( $query, $this->directiveArgValue('scopes', []) ); return PaginationArgs ::extractArgs($args, $this->paginationType(), $this->paginateMaxCount()) ->applyToBuilder($query); } ); } protected function paginationType(): PaginationType { return new PaginationType( $this->directiveArgValue('type', PaginationType::PAGINATOR) ); } protected function defaultCount(): ?int { return $this->directiveArgValue('defaultCount') ?? config('lighthouse.pagination.default_count'); } protected function paginateMaxCount(): ?int { return $this->directiveArgValue('maxCount') ?? config('lighthouse.pagination.max_count'); } }