Comments (2)
Thanks for the recommendation.
The goal is to be as simple as possible, so I appreciate the argument. Simplicity also led to the current behavior, though primarily simplicity of implementation. Adding the additional step of order-dependence makes this more complicated.
There is also a desire for the directives to be un-ordered so they can be safely represented as a Set rather than a List internally, this can be a simplifying force for implementations and removes a potential area for mistakes by accidental re-ordering.
I have another suggestion that I'm interested in getting your feedback on, hopefully it solves your concerns:
As currently specced:
- If selection provides the directive
@skip
, let skipDirective be that directive.
- If skipDirective‘s if argument is true, continue with the next selection in selectionSet.
- If selection provides the directive
@include
, let includeDirective be that directive.
- If includeDirective‘s if argument is false, continue with the next selection in selectionSet.
We get this truth table if both skip and include are present:
@skip(if: true) |
@skip(if: false) |
Not provided | |
---|---|---|---|
@include(if: false) |
skipped | skipped | skipped |
@include(if: true) |
skipped | included | included |
Not provided | skipped | included | included |
Based on this, I think we can reframe the relationship as written in the spec to be a formal AND. That would have an identical truth table, but would not contain any implicitly ordered relationship between the two nor would it rely on any explicit ordering (due to the commutative property).
Another nice outcome of this is that the spec could potentially be written to allow multiple @skip
or @include
directives, all AND'd together, so any single @skip(if: true)
or @include(if: false)
in the list would result in a skip. I'm not sure if this is a good idea or not yet (it could be a bag of worms to allow for multiple directives) but I thought it was interesting to bring up.
from graphql-spec.
Closing since this note has been added to the spec about there being no precedence in this case: http://facebook.github.io/graphql/#sec--include
from graphql-spec.
Related Issues (20)
- (Graphql-schema) Cannot query field "closeDiscussion" on type "Mutation" HOT 1
- GraphQL spec is contradictory: can selection sets be empty or not? HOT 1
- Allow to return Input Object types HOT 1
- Formalize Global Object Identification.
- Grammar should have single root node HOT 2
- [Feature request]: Support non-list variables for list arguments HOT 9
- Redundant field aliases identical to field names
- Document Level Directives HOT 7
- Coercing Variable Values when hasValue is not true and defaultValue does NOT exist HOT 7
- Strawman: mention of non-self-describing responses
- why not allow directive on field argument ? HOT 2
- On specifying ordered vs unordered enum definitions HOT 5
- Casting Error in GraphQL C# Library HOT 2
- Is there a reason graphql floats do not support Infinity and NaN? HOT 3
- Composite types is not clearly defined HOT 1
- Unclear spec for array with fragments HOT 1
- What must be the result of executing only one fragment on a list of union or interface type? HOT 3
- Interface conditions fragments may not be used across spreads, discouraging reusability HOT 2
- Hey HOT 1
- Really
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from graphql-spec.