lighthouse
lighthouse copied to clipboard
Apply schema manipulation on input field definitions
What problem does this feature proposal attempt to solve?
Lighthouse applies a process we call schema manipulation for some directives, allowing them to transform the GraphQL AST: https://github.com/nuwave/lighthouse/blob/301930b356faa63da681d564cbef41c7d312f2aa/src/Schema/AST/ASTBuilder.php#L133-L137
The directives @whereConditions
and @orderBy
implement the ArgManipulator
interface. This is only called when they are defined directly on the args of a field.
While there is a directive interface for definitions that are directly applied on types (e.g. input Foo @example
), we currently have no mechanism for traversing down into the fields of input
types and apply transformation there.
Which possible solutions should be considered?
An implementation for this would entail:
- Adding a new interface
InputFieldManipulator
- Add a method to
ASTBuilder
that applies it toinput
fields - Implement the interface for the
ArgManipulator
directives where it makes sense
It would also allow us to make repeatable situations (like create/update/delete relationships) a little easier.I am trying to manipulate the input object to automagically create the create/update/delete relationship functionality, only to find out this does not work.
I can make a pull request so that we can at least create our own directives that can manipulate the AST.
@henzeb that would be great. Let me know if you require further clarification for what needs to be done, I hope the issue description is clear enough.
Great. Will look into it this weekend. only the third item is a little vague to me. 1 and 2 is all I need for my usecase.