fix: SDL rendering for directives with input objects #1375
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
While developing, I encountered an issue where calling
Absinthe.Schema.to_sdl/1crashes if a custom directive is defined with aninput_objectargument and then used on a field.From my understanding,
input_objects are valid according to the GraphQL spec (https://spec.graphql.org/October2021/#sec-Language.Directives and https://spec.graphql.org/October2021/#sec-Type-System.Directives.Validation).and
This happens during the rendering of the directive's arguments in
Absinthe.Schema.Notation.SDL.Render.render_value/1. This function currently doesn't seem to handle input objects as values as far as I can tell. When I inspected therender_valuefunction, thenamewas getting passed as an atom which was blowing up since this wasn't a properInspect.Algebradocument structure.You can reproduce the error I was seeing by reverting the change in
lib/absinthe/schema/notation/sdl_render.exand running the tests. It should fail with the following (prettified) stacktrace:Let me know if I'm misunderstanding something! I'd love to fix this on my side or improve my understanding of what's expected according to the GraphQL spec.
Thanks 🙂