*/ public function attributes(): array { return [ 'name' => $this->getName(), 'description' => $this->description(), 'rebingType' => $this->baseRebingType(), ]; } public function getName(): string { return $this->name; } abstract public function description(): string; /** * The arguments of the class resolve as customs class helper. * * @return Argument[] */ public function arguments(): array { $arguments = []; $baseType = $this->baseRebingType(); if ($this instanceof EloquentPaginatorQuery) { $arguments[] = new FirstArgument(); $arguments[] = new PageArgument(); } if ($baseType instanceof BaseType) { $arguments[] = $this->resolveFilterArguments($baseType->fieldClasses()); } if ($baseType instanceof BaseType && $this instanceof EloquentPaginatorQuery) { $arguments[] = $this->resolveSortArguments($baseType); } return Arr::flatten($arguments); } /** * Convert the rebing type to a GraphQL type. */ public function baseType(): Type { return GraphQL::type($this->baseRebingType()->getName()); } /** * The base return rebing type of the query. */ public function baseRebingType(): ?BaseType { return null; } /** * The type returned by the field. */ public function type(): Type { if (! $this->nullable) { if ($this->isList) { return Type::nonNull(Type::listOf(Type::nonNull($this->baseType()))); } return Type::nonNull($this->baseType()); } if ($this->isList) { return Type::listOf(Type::nonNull($this->baseType())); } return $this->baseType(); } }