Throw an error on asynchronous introspection query behavior.#1955
Merged
Conversation
We expect introspection queries to behave in an synchronous manner since they do not have any resolvers which return Promises. This expectation seems to also be had by `graphql-js` which utilizes `graphqlSync`, rather than `graphql` for execution of introspection queries. In fact, this may be one of the entire reasons that `graphqlSync` exists: to fulfill a contract for synchronous execution of server introspection. The introspection tests within `graphql-js` seem to support this theory[[0]]. Utilities which wrap GraphQL resolvers should take care to maintain the execution dynamics of what they are wrapping, or they should avoid wrapping introspection types entirely by checking the type with the `isIntrospectionType` predicate function from `graphql/type`[[1]]. [0]: https://github.com/graphql/graphql-js/blob/787422956c9554d12d063a41fe35705335ec6290/src/type/__tests__/introspection-test.js [1]: https://github.com/graphql/graphql-js/blob/74d1e941/src/type/introspection.js#L484. Closes: #1935
abernix
added a commit
that referenced
this pull request
Nov 13, 2018
I foolishly used `O.p.hasOwnProperty` here which, while safe for checking properties, is actually not correct since this `then` property is inherited from `Promise.prototype.then`. Checking if `then` is a function should be safe _enough_. Follows-up on: #1955
abernix
added a commit
that referenced
this pull request
Nov 13, 2018
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
We expect introspection queries to behave in an synchronous manner since
they do not have any resolvers which return Promises. This expectation
seems to also be had by
graphql-jswhich utilizesgraphqlSync, ratherthan
graphqlfor execution of introspection queries. In fact, this may beone of the entire reasons that
graphqlSyncexists: to fulfill a contractfor synchronous execution of server introspection. The introspection tests
within
graphql-jsseem to support this theory[0].Utilities which wrap GraphQL resolvers should take care to maintain the
execution dynamics of what they are wrapping, or they should avoid wrapping
introspection types entirely by checking the type with the
isIntrospectionTypepredicate function fromgraphql/type[1].Closes: #1935