nullability v0.1
Experimental nullability directives
Status | Draft |
Version | 0.1 |
This specification provides a list of directives to help dealing with nullability. For more information, see the nullability working group GitHub repository.
1@semanticNonNull
"""
Indicates that a field is only null if there is a matching error in the `errors` array.
In all other cases, the field is non-null.
Tools doing code generation may use this information to generate the field as non-null.
This directive can be applied on field definitions:
```graphql
type User {
email: String @semanticNonNull
}
```
It can also be applied on object type extensions for use in client applications that do
not own the base schema:
```graphql
extend type User @semanticNonNull(field: "email")
```
Control over list items is done using the `level` argument:
```graphql
type User {
# friends is nullable but friends[0] is null only on errors
friends: [User] @semanticNonNull(level: 1)
}
```
The `field` argument is the name of the field if `@semanticNonNull` is applied to an object definition.
If `@semanticNonNull` is applied to a field definition, `field` must be null.
The `level` argument can be used to indicate what level is semantically non null in case of lists.
`level` starts at 0 if there is no list. If `level` is null, all levels are semantically non null.
"""
directive @semanticNonNull(field: String = null, level: Int = null) repeatable on FIELD_DEFINITION | OBJECT
2@catch
"""
Indicates how clients should handle errors on a given position.
When used on the schema definition, `@catch` applies to every position that can return an error.
The `level` argument can be used to indicate where to catch in case of lists.
`level` starts at 0 if there is no list. If `level` is null, all levels catch.
See `CatchTo` for more details.
"""
directive @catch(to: CatchTo! = RESULT, level: Int = null) repeatable on FIELD | SCHEMA
3@ignoreErrors
"""
Never throw on field errors.
This is used for backward compatibility for clients where this was the default behaviour.
"""
directive @ignoreErrors on QUERY | MUTATION | SUBSCRIPTION