Skip to content
Open
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
d303c14
move trait to namespace
thekonz Apr 28, 2023
6b3224c
move common builder resolver logic to trait
thekonz Apr 28, 2023
08de9bf
also include relations in the builder argument for @aggregate
thekonz Apr 28, 2023
70bc192
refactor builder typehints to use the new builder contract, remove un…
thekonz Apr 28, 2023
885a084
fix phpstan issues
thekonz Apr 28, 2023
bdd34f2
document ArgBuilderDirective to use the common builder interface
thekonz Apr 28, 2023
cc51701
get the eloquent builder from a relation
thekonz Apr 28, 2023
3c41e2c
document changes
thekonz Apr 28, 2023
c0da959
revert check for relation
thekonz Apr 29, 2023
9e2bd15
run php cs fixer
thekonz May 2, 2023
cbde5a7
rename get to make to distinguish between getter methods
thekonz May 2, 2023
65ac23d
document builder interface change for v7 upgrade
thekonz May 2, 2023
6afce27
add spaces to comments for code review purposes
thekonz May 2, 2023
4b1721d
rename query to builder
thekonz May 2, 2023
90656b4
improve error method
thekonz May 2, 2023
adc7526
use common query builder interface
thekonz May 3, 2023
6020bfb
use fqcn
thekonz May 3, 2023
1472904
document imports as well
thekonz May 3, 2023
e727bd2
Merge branch 'master' into feature/refactor-builder-types
thekonz May 3, 2023
5ae8302
Do not pass `ResolveInfo` to itself in `ResolveInfo::enhanceBuilder()`
spawnia May 3, 2023
179fcf1
Merge branch 'master' into feature/refactor-builder-types
thekonz May 24, 2023
ee582be
Merge remote-tracking branch 'origin/master' into feature/refactor-bu…
spawnia Feb 10, 2026
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>
Comment thread
spawnia marked this conversation as resolved.
Outdated
*/
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