Skip to content
Open
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ You can find and compare releases at the [GitHub release page](https://github.co

## Unreleased

### Changed

- Use common Builder interface https://github.com/nuwave/lighthouse/pull/2389

## v6.8.0

### Added
Expand Down
6 changes: 2 additions & 4 deletions docs/master/custom-directives/argument-directives.md
Original file line number Diff line number Diff line change
Expand Up @@ -145,9 +145,7 @@ where the `category` column is equal to the value of the `category` argument.
So let's take a look at a simplified version of the built-in [@eq](../api-reference/directives.md#eq) directive.

```php
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Database\Query\Builder as QueryBuilder;
use Illuminate\Contracts\Database\Query\Builder;
use Nuwave\Lighthouse\Support\Contracts\ArgBuilderDirective;

class EqDirective extends BaseDirective implements ArgBuilderDirective
Expand All @@ -171,7 +169,7 @@ GRAPHQL;
/**
* Apply a "WHERE = $value" clause.
*/
public function handleBuilder(QueryBuilder|EloquentBuilder|Relation $builder, $value): QueryBuilder|EloquentBuilder|Relation
public function handleBuilder(Builder $builder, $value): Builder
{
return $builder->where(
$this->directiveArgValue('key', $this->nodeName()),
Expand Down
5 changes: 2 additions & 3 deletions src/Auth/WhereAuthDirective.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@
namespace Nuwave\Lighthouse\Auth;

use Illuminate\Contracts\Auth\Factory as AuthFactory;
use Illuminate\Contracts\Database\Query\Builder;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Database\Query\Builder as QueryBuilder;
use Nuwave\Lighthouse\Execution\ResolveInfo;
use Nuwave\Lighthouse\Schema\Directives\BaseDirective;
use Nuwave\Lighthouse\Support\Contracts\FieldBuilderDirective;
Expand Down Expand Up @@ -38,7 +37,7 @@ public static function definition(): string
GRAPHQL;
}

public function handleFieldBuilder(QueryBuilder|EloquentBuilder|Relation $builder, mixed $root, array $args, GraphQLContext $context, ResolveInfo $resolveInfo): QueryBuilder|EloquentBuilder|Relation
public function handleFieldBuilder(Builder $builder, mixed $root, array $args, GraphQLContext $context, ResolveInfo $resolveInfo): Builder
{
assert($builder instanceof EloquentBuilder);

Expand Down
2 changes: 0 additions & 2 deletions src/Console/PrintSchemaCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@
use GraphQL\Type\Introspection;
use GraphQL\Utils\SchemaPrinter;
use Illuminate\Console\Command;
use Illuminate\Contracts\Filesystem\Filesystem;
use Illuminate\Filesystem\FilesystemManager;
use Illuminate\Support\Facades\Storage;
use Nuwave\Lighthouse\Federation\FederationPrinter;
use Nuwave\Lighthouse\Schema\AST\ASTCache;
use Nuwave\Lighthouse\Schema\SchemaBuilder;
Expand Down
1 change: 0 additions & 1 deletion src/Exceptions/DefinitionException.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace Nuwave\Lighthouse\Exceptions;

use Exception;
use GraphQL\Error\ClientAware;

/**
Expand Down
20 changes: 8 additions & 12 deletions src/Execution/ResolveInfo.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@
namespace Nuwave\Lighthouse\Execution;

use GraphQL\Type\Definition\ResolveInfo as BaseResolveInfo;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Database\Query\Builder as QueryBuilder;
use Illuminate\Contracts\Database\Query\Builder;
use Illuminate\Support\Collection;
use Laravel\Scout\Builder as ScoutBuilder;
use Nuwave\Lighthouse\Execution\Arguments\ArgumentSet;
Expand Down Expand Up @@ -37,16 +35,14 @@ public function __construct(
/**
* Apply ArgBuilderDirectives and scopes to the builder.
*
* @template TModel of \Illuminate\Database\Eloquent\Model
*
* @param \Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<TModel>|\Illuminate\Database\Eloquent\Relations\Relation<TModel>|\Laravel\Scout\Builder $builder
* @param \Illuminate\Contracts\Database\Query\Builder|\Laravel\Scout\Builder $builder
* @param array<string> $scopes
* @param array<string, mixed> $args
* @param (callable(\Nuwave\Lighthouse\Support\Contracts\ArgBuilderDirective): bool)|null $directiveFilter
*
* @return \Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<TModel>|\Illuminate\Database\Eloquent\Relations\Relation<TModel>|\Laravel\Scout\Builder
* @return \Illuminate\Contracts\Database\Query\Builder|\Laravel\Scout\Builder
*/
public function enhanceBuilder(QueryBuilder|EloquentBuilder|Relation|ScoutBuilder $builder, array $scopes, mixed $root, array $args, GraphQLContext $context, ResolveInfo $resolveInfo, callable $directiveFilter = null): QueryBuilder|EloquentBuilder|Relation|ScoutBuilder
public function enhanceBuilder(Builder|ScoutBuilder $builder, array $scopes, mixed $root, array $args, GraphQLContext $context, ResolveInfo $resolveInfo, callable $directiveFilter = null): Builder|ScoutBuilder
{
$argumentSet = $resolveInfo->argumentSet;

Expand All @@ -73,7 +69,7 @@ public function enhanceBuilder(QueryBuilder|EloquentBuilder|Relation|ScoutBuilde
* @param array<string, mixed> $args
* @param (callable(\Nuwave\Lighthouse\Support\Contracts\ArgBuilderDirective): bool)|null $directiveFilter
*/
public function wouldEnhanceBuilder(QueryBuilder|EloquentBuilder|Relation|ScoutBuilder $builder, array $scopes, mixed $root, array $args, GraphQLContext $context, ResolveInfo $resolveInfo, callable $directiveFilter = null): bool
public function wouldEnhanceBuilder(Builder|ScoutBuilder $builder, array $scopes, mixed $root, array $args, GraphQLContext $context, ResolveInfo $resolveInfo, callable $directiveFilter = null): bool
{
$argumentSet = $resolveInfo->argumentSet;

Expand All @@ -89,7 +85,7 @@ public function wouldEnhanceBuilder(QueryBuilder|EloquentBuilder|Relation|ScoutB
* @param \Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<\Illuminate\Database\Eloquent\Model>|\Illuminate\Database\Eloquent\Relations\Relation<\Illuminate\Database\Eloquent\Model> $builder
* @param (callable(\Nuwave\Lighthouse\Support\Contracts\ArgBuilderDirective): bool)|null $directiveFilter
*/
protected static function applyArgBuilderDirectives(ArgumentSet $argumentSet, QueryBuilder|EloquentBuilder|Relation &$builder, callable $directiveFilter = null): void
protected static function applyArgBuilderDirectives(ArgumentSet $argumentSet, Builder &$builder, callable $directiveFilter = null): void
{
foreach ($argumentSet->arguments as $argument) {
$value = $argument->toPlain();
Expand Down Expand Up @@ -125,7 +121,7 @@ static function ($value) use (&$builder, $directiveFilter): void {
* @param \Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<\Illuminate\Database\Eloquent\Model>|\Illuminate\Database\Eloquent\Relations\Relation<\Illuminate\Database\Eloquent\Model> $builder
* @param (callable(\Nuwave\Lighthouse\Support\Contracts\ArgBuilderDirective): bool)|null $directiveFilter
*/
protected static function wouldApplyArgBuilderDirectives(ArgumentSet $argumentSet, QueryBuilder|EloquentBuilder|Relation &$builder, callable $directiveFilter = null): bool
protected static function wouldApplyArgBuilderDirectives(ArgumentSet $argumentSet, Builder &$builder, callable $directiveFilter = null): bool
{
foreach ($argumentSet->arguments as $argument) {
$filteredDirectives = $argument
Expand Down Expand Up @@ -167,7 +163,7 @@ protected static function wouldApplyArgBuilderDirectives(ArgumentSet $argumentSe
* @param \Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder<\Illuminate\Database\Eloquent\Model>|\Illuminate\Database\Eloquent\Relations\Relation<\Illuminate\Database\Eloquent\Model> $builder
* @param array<string, mixed> $args
*/
protected static function applyFieldBuilderDirectives(QueryBuilder|EloquentBuilder|Relation &$builder, mixed $root, array $args, GraphQLContext $context, ResolveInfo $resolveInfo): void
protected static function applyFieldBuilderDirectives(Builder &$builder, mixed $root, array $args, GraphQLContext $context, ResolveInfo $resolveInfo): void
{
foreach (self::fieldBuilderDirectives($resolveInfo) as $fieldBuilderDirective) {
$builder = $fieldBuilderDirective->handleFieldBuilder($builder, $root, $args, $context, $resolveInfo);
Expand Down
7 changes: 3 additions & 4 deletions src/OrderBy/OrderByDirective.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,8 @@
use GraphQL\Language\AST\InterfaceTypeDefinitionNode;
use GraphQL\Language\AST\ObjectTypeDefinitionNode;
use GraphQL\Language\Parser;
use Illuminate\Contracts\Database\Query\Builder;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Database\Query\Builder as QueryBuilder;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;
use Nuwave\Lighthouse\Exceptions\DefinitionException;
Expand Down Expand Up @@ -112,7 +111,7 @@ enum OrderByDirection {
}

/** @param array<array<string, mixed>> $value */
public function handleBuilder(QueryBuilder|EloquentBuilder|Relation $builder, $value): QueryBuilder|EloquentBuilder|Relation
public function handleBuilder(Builder $builder, $value): Builder
{
foreach ($value as $orderByClause) {
$order = Arr::pull($orderByClause, 'order');
Expand Down Expand Up @@ -260,7 +259,7 @@ public function manipulateArgDefinition(
}
}

public function handleFieldBuilder(QueryBuilder|EloquentBuilder|Relation $builder, mixed $root, array $args, GraphQLContext $context, ResolveInfo $resolveInfo): QueryBuilder|EloquentBuilder|Relation
public function handleFieldBuilder(Builder $builder, mixed $root, array $args, GraphQLContext $context, ResolveInfo $resolveInfo): Builder
{
return $builder->orderBy(
$this->directiveArgValue('column'),
Expand Down
22 changes: 4 additions & 18 deletions src/Pagination/PaginateDirective.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,11 @@
use GraphQL\Language\AST\InterfaceTypeDefinitionNode;
use GraphQL\Language\AST\ObjectTypeDefinitionNode;
use Illuminate\Contracts\Pagination\Paginator;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Database\Query\Builder as QueryBuilder;
use Laravel\Scout\Builder as ScoutBuilder;
use Nuwave\Lighthouse\Cache\CacheDirective;
use Nuwave\Lighthouse\Execution\ResolveInfo;
use Nuwave\Lighthouse\Schema\AST\DocumentAST;
use Nuwave\Lighthouse\Schema\Directives\BaseDirective;
use Nuwave\Lighthouse\Schema\Directives\Traits\HasBuilderArgument;
use Nuwave\Lighthouse\Schema\Values\FieldValue;
use Nuwave\Lighthouse\Support\Contracts\ComplexityResolverDirective;
use Nuwave\Lighthouse\Support\Contracts\Directive;
Expand All @@ -23,6 +20,8 @@

class PaginateDirective extends BaseDirective implements FieldResolver, FieldManipulator, ComplexityResolverDirective
{
use HasBuilderArgument;

public static function definition(): string
{
return /** @lang GraphQL */ <<<'GRAPHQL'
Expand Down Expand Up @@ -152,21 +151,8 @@ public function resolveField(FieldValue $fieldValue): callable
return $paginator;
}

if ($this->directiveHasArgument('builder')) {
$builderResolver = $this->getResolverFromArgument('builder');

$query = $builderResolver($root, $args, $context, $resolveInfo);

assert(
$query instanceof QueryBuilder || $query instanceof EloquentBuilder || $query instanceof ScoutBuilder || $query instanceof Relation,
"The method referenced by the builder argument of the @{$this->name()} directive on {$this->nodeName()} must return a Builder or Relation.",
);
} else {
$query = $this->getModelClass()::query();
}

$query = $resolveInfo->enhanceBuilder(
$query,
$this->getBuilder($root, $args, $context, $resolveInfo),
$this->directiveArgValue('scopes', []),
$root,
$args,
Expand Down
14 changes: 5 additions & 9 deletions src/Pagination/PaginationArgs.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@
namespace Nuwave\Lighthouse\Pagination;

use GraphQL\Error\Error;
use Illuminate\Contracts\Database\Query\Builder;
use Illuminate\Contracts\Pagination\Paginator;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Database\Query\Builder as QueryBuilder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Arr;
use Laravel\Scout\Builder as ScoutBuilder;

Expand Down Expand Up @@ -74,13 +73,10 @@ protected static function calculateCurrentPage(int $first, int $after, int $defa
/**
* Apply the args to a builder, constructing a paginator.
*
* @template TModel of \Illuminate\Database\Eloquent\Model
*
* @param \Illuminate\Database\Query\Builder|\Laravel\Scout\Builder|\Illuminate\Database\Eloquent\Builder<TModel>|\Illuminate\Database\Eloquent\Relations\Relation<TModel> $builder
*
* @return Paginator<TModel>
* @param Builder|ScoutBuilder $builder
* @return Paginator<Model>
*/
public function applyToBuilder(QueryBuilder|ScoutBuilder|EloquentBuilder|Relation $builder): Paginator
public function applyToBuilder(Builder|ScoutBuilder $builder): Paginator
{
$methodName = $this->type->isSimple()
? 'simplePaginate'
Expand Down
8 changes: 4 additions & 4 deletions src/Schema/Directives/AggregateDirective.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@
use GraphQL\Language\AST\FieldDefinitionNode;
use GraphQL\Language\AST\InterfaceTypeDefinitionNode;
use GraphQL\Language\AST\ObjectTypeDefinitionNode;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Contracts\Database\Query\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Query\Builder as QueryBuilder;
use Nuwave\Lighthouse\Exceptions\DefinitionException;
use Nuwave\Lighthouse\Execution\BatchLoader\BatchLoaderRegistry;
use Nuwave\Lighthouse\Execution\BatchLoader\RelationBatchLoader;
use Nuwave\Lighthouse\Execution\ModelsLoader\AggregateModelsLoader;
use Nuwave\Lighthouse\Execution\ResolveInfo;
use Nuwave\Lighthouse\Schema\AST\DocumentAST;
use Nuwave\Lighthouse\Schema\Directives\Traits\RelationDirectiveHelpers;
use Nuwave\Lighthouse\Schema\Values\FieldValue;
use Nuwave\Lighthouse\Support\Contracts\FieldManipulator;
use Nuwave\Lighthouse\Support\Contracts\FieldResolver;
Expand Down Expand Up @@ -147,8 +147,8 @@ public function resolveField(FieldValue $fieldValue): callable
$query = $builderResolver($root, $args, $context, $resolveInfo);

assert(
$query instanceof QueryBuilder || $query instanceof EloquentBuilder,
"The method referenced by the builder argument of the @{$this->name()} directive on {$this->nodeName()} must return a Builder.",
$query instanceof Builder,
"The method referenced by the builder argument of the @{$this->name()} directive on {$this->nodeName()} must return a Builder or Relation.",
);

$this->makeBuilderDecorator($root, $args, $context, $resolveInfo)($query);
Expand Down
21 changes: 4 additions & 17 deletions src/Schema/Directives/AllDirective.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,19 @@
use GraphQL\Language\AST\FieldDefinitionNode;
use GraphQL\Language\AST\InterfaceTypeDefinitionNode;
use GraphQL\Language\AST\ObjectTypeDefinitionNode;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Database\Query\Builder as QueryBuilder;
use Illuminate\Support\Collection;
use Laravel\Scout\Builder as ScoutBuilder;
use Nuwave\Lighthouse\Execution\ResolveInfo;
use Nuwave\Lighthouse\Schema\AST\DocumentAST;
use Nuwave\Lighthouse\Schema\Directives\Traits\HasBuilderArgument;
use Nuwave\Lighthouse\Schema\Values\FieldValue;
use Nuwave\Lighthouse\Support\Contracts\FieldManipulator;
use Nuwave\Lighthouse\Support\Contracts\FieldResolver;
use Nuwave\Lighthouse\Support\Contracts\GraphQLContext;

class AllDirective extends BaseDirective implements FieldResolver, FieldManipulator
{
use HasBuilderArgument;

public static function definition(): string
{
return /** @lang GraphQL */ <<<'GRAPHQL'
Expand Down Expand Up @@ -52,21 +51,9 @@ public static function definition(): string
public function resolveField(FieldValue $fieldValue): callable
{
return function (mixed $root, array $args, GraphQLContext $context, ResolveInfo $resolveInfo): Collection {
if ($this->directiveHasArgument('builder')) {
$builderResolver = $this->getResolverFromArgument('builder');

$query = $builderResolver($root, $args, $context, $resolveInfo);
assert(
$query instanceof QueryBuilder || $query instanceof EloquentBuilder || $query instanceof ScoutBuilder || $query instanceof Relation,
"The method referenced by the builder argument of the @{$this->name()} directive on {$this->nodeName()} must return a Builder or Relation.",
);
} else {
$query = $this->getModelClass()::query();
}

return $resolveInfo
->enhanceBuilder(
$query,
$this->getBuilder($root, $args, $context, $resolveInfo),
$this->directiveArgValue('scopes', []),
$root,
$args,
Expand Down
8 changes: 3 additions & 5 deletions src/Schema/Directives/BuilderDirective.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@

namespace Nuwave\Lighthouse\Schema\Directives;

use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Database\Query\Builder as QueryBuilder;
use Illuminate\Contracts\Database\Query\Builder;
use Laravel\Scout\Builder as ScoutBuilder;
use Nuwave\Lighthouse\Execution\ResolveInfo;
use Nuwave\Lighthouse\Scout\ScoutBuilderDirective;
Expand Down Expand Up @@ -42,7 +40,7 @@ public static function definition(): string
GRAPHQL;
}

public function handleBuilder(QueryBuilder|EloquentBuilder|Relation $builder, $value): QueryBuilder|EloquentBuilder|Relation
public function handleBuilder(Builder $builder, $value): Builder
{
$resolver = $this->resolver();

Expand All @@ -56,7 +54,7 @@ public function handleScoutBuilder(ScoutBuilder $builder, mixed $value): ScoutBu
return $resolver($builder, $value, $this->definitionNode);
}

public function handleFieldBuilder(QueryBuilder|EloquentBuilder|Relation $builder, mixed $root, array $args, GraphQLContext $context, ResolveInfo $resolveInfo): QueryBuilder|EloquentBuilder|Relation
public function handleFieldBuilder(Builder $builder, mixed $root, array $args, GraphQLContext $context, ResolveInfo $resolveInfo): Builder
{
$resolver = $this->resolver();

Expand Down
1 change: 0 additions & 1 deletion src/Schema/Directives/ComplexityDirective.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace Nuwave\Lighthouse\Schema\Directives;

use Nuwave\Lighthouse\Pagination\PaginationManipulator;
use Nuwave\Lighthouse\Schema\Values\FieldValue;
use Nuwave\Lighthouse\Support\Contracts\ComplexityResolverDirective;
use Nuwave\Lighthouse\Support\Utils;
Expand Down
1 change: 1 addition & 0 deletions src/Schema/Directives/CountDirective.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
use Nuwave\Lighthouse\Execution\ModelsLoader\CountModelsLoader;
use Nuwave\Lighthouse\Execution\ResolveInfo;
use Nuwave\Lighthouse\Schema\AST\DocumentAST;
use Nuwave\Lighthouse\Schema\Directives\Traits\RelationDirectiveHelpers;
use Nuwave\Lighthouse\Schema\Values\FieldValue;
use Nuwave\Lighthouse\Support\Contracts\FieldManipulator;
use Nuwave\Lighthouse\Support\Contracts\FieldResolver;
Expand Down
Loading