-
Notifications
You must be signed in to change notification settings - Fork 1.2k
add initial outline for field extensions #1196
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 2 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -1105,6 +1105,31 @@ Object type extensions have the potential to be invalid if incorrectly defined. | |||||
| 6. The resulting extended object type must be a super-set of all interfaces it | ||||||
| implements. | ||||||
|
|
||||||
| ### Field Extensions | ||||||
|
|
||||||
| FieldExtension : | ||||||
|
|
||||||
| - extend field MemberCoordinate Directives[const]? | ||||||
| - extend field description MemberCoordinate | ||||||
|
|
||||||
| Field extensions are used to represent a field which has been extended from some | ||||||
| previously defined field. For example this may be a GraphQL service which is | ||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
| itself an extension of another GraphQL service. | ||||||
|
|
||||||
| In this example, we can deprecate the id field on the User type. | ||||||
|
|
||||||
| ```graphql example | ||||||
| extend field User.name @deprecated(”Some reason”) | ||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Beware of typographic quotes!
Suggested change
|
||||||
| ``` | ||||||
|
|
||||||
| ** Field Validation ** | ||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The "Type" here relates to "type" as in "type-system" rather than
Suggested change
|
||||||
|
|
||||||
| Field validation have the potential to be invalid if incorrectly defined. | ||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
|
||||||
| 1. MemberCoordinate must be resolved to an existing field on a object or interface type. | ||||||
| 2. Any non-repeatable directives provided must not already apply to the previous | ||||||
| field. | ||||||
|
|
||||||
| ## Interfaces | ||||||
|
|
||||||
| InterfaceTypeDefinition : | ||||||
|
|
||||||
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Was the intent to have the ability to add a description to fields? The other extensions don't allow that. What happens if the field already has a description? I suggest we only allow adding directives:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This was suggested by @benjie on Discord. I think it makes sense, especially in an AI age where descriptions give valuable info to LLMs. But true it needs validation rules.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the heads up 👍.
Interesting! Although I would find it a bit odd to allow adding descriptions on fields but not on types and more (maybe this should go to a different PR that does that more broadly and keep this one focused on directives).
If we do want to keep this I think the grammar should look like:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd be happy extending
extend typeto allow a prefixed description. The rule would be if it already has a description it would be invalid, just like adding the same interface twice.Option 1:
Option 2:
To me, the former is preferred over the latter, even though both are suboptimal.
There's also option 3:
Or, and this may be the best option, option 4:
Would mean the description is separate from the rest of the extension, but I think this is fine.
Thanks for highlighting this @BoD