- Notifications
You must be signed in to change notification settings - Fork 2.1k
align return types from execution and subscription #3620
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
Merged
Merged
Conversation
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
✅ Deploy Preview for compassionate-pike-271cb3 ready!
To edit notification comments on pull requests, go to your Netlify site settings. |
a735422 to b0e56f2 Compare yaacovCR added a commit to yaacovCR/graphql-js that referenced this pull request Jun 7, 2022
Two test groups use essentially the same logic to set up a subscription with an improper subscribeFn, testing both `subscribe` and `createSourceEventStream`. This PR extracts the duplicated logic into a single common `subscribeWithBadFn` function. For convenience, the common function is typed to appropriately return a `Promise<ExecutionResult>` rather than a `Promise<ExecutionResult | AsyncGenerator<...>>`). Because the `subscribeFn` is expected to be "bad," an `AsyncGenerator` should never be returned. If a valid `subscribeFn` is mistakenly passed, an assertion failure is triggered. extracted from graphql#3620
d89e2de to 7f214ea Compare 2321ee8 to 3b27fb6 Compare IvanGoncharov pushed a commit that referenced this pull request Jun 8, 2022
Two test groups use essentially the same logic to set up a subscription with an improper subscribeFn, testing both `subscribe` and `createSourceEventStream`. This PR extracts the duplicated logic into a single common `subscribeWithBadFn` function. For convenience, the common function is typed to appropriately return a `Promise<ExecutionResult>` rather than a `Promise<ExecutionResult | AsyncGenerator<...>>`). Because the `subscribeFn` is expected to be "bad," an `AsyncGenerator` should never be returned. If a valid `subscribeFn` is mistakenly passed, an assertion failure is triggered. extracted from #3620
with respect to possible promises
Contributor Author
| @IvanGoncharov @graphql/graphql-js-reviewers This has been rebased and is re-ready for review. |
= remove unnecessary waits = simply subscribeWithBadFn
until it is asserted as eventStream
Contributor Author
| See further discussion with respect to advantages of using repeaters about general anti pattern of |
Contributor Author
This was referenced Jun 5, 2023
yaacovCR added a commit to yaacovCR/graphql-js that referenced this pull request Dec 11, 2025
Two test groups use essentially the same logic to set up a subscription with an improper subscribeFn, testing both `subscribe` and `createSourceEventStream`. This PR extracts the duplicated logic into a single common `subscribeWithBadFn` function. For convenience, the common function is typed to appropriately return a `Promise<ExecutionResult>` rather than a `Promise<ExecutionResult | AsyncGenerator<...>>`). Because the `subscribeFn` is expected to be "bad," an `AsyncGenerator` should never be returned. If a valid `subscribeFn` is mistakenly passed, an assertion failure is triggered. extracted from graphql#3620
yaacovCR added a commit to yaacovCR/graphql-js that referenced this pull request Dec 11, 2025
Two test groups use essentially the same logic to set up a subscription with an improper subscribeFn, testing both `subscribe` and `createSourceEventStream`. This PR extracts the duplicated logic into a single common `subscribeWithBadFn` function. For convenience, the common function is typed to appropriately return a `Promise<ExecutionResult>` rather than a `Promise<ExecutionResult | AsyncGenerator<...>>`). Because the `subscribeFn` is expected to be "bad," an `AsyncGenerator` should never be returned. If a valid `subscribeFn` is mistakenly passed, an assertion failure is triggered. extracted from graphql#3620
yaacovCR added a commit to yaacovCR/graphql-js that referenced this pull request Dec 11, 2025
This change aligns the return types of `execute` and `subscribe` (as well as `createSourceEventStream`) with respect to returning values or promises. Just as GraphQL execution for queries and mutations stays synchronous when possible, creation of the source event stream and returning the mapped `AsyncGenerator` will now occur synchronously when possible, i.e. when the `subscribe` method for the given subscription root field directly returns an `AsyncIterable`, rather than a Promise<AsyncIterable>. Specifically, the return types of `subscribe` and `createSourceEventStream` become: `subscribe(...): PromiseOrValue<AsyncGenerator<ExecutionResult> | ExecutionResult>` `createSourceEventStream(...): PromiseOrValue<AsyncIterable<unknown> | ExecutionResult>`. Previously, they were: `subscribe(...): Promise<AsyncGenerator<ExecutionResult> | ExecutionResult>`). `createSourceEventStream(...): Promise<AsyncIterable<unknown> | ExecutionResult>`. Co-authored-by: Ivan Goncharov <ivan.goncharov.ua@gmail.com>
yaacovCR added a commit to yaacovCR/graphql-js that referenced this pull request Dec 11, 2025
Two test groups use essentially the same logic to set up a subscription with an improper subscribeFn, testing both `subscribe` and `createSourceEventStream`. This PR extracts the duplicated logic into a single common `subscribeWithBadFn` function. For convenience, the common function is typed to appropriately return a `Promise<ExecutionResult>` rather than a `Promise<ExecutionResult | AsyncGenerator<...>>`). Because the `subscribeFn` is expected to be "bad," an `AsyncGenerator` should never be returned. If a valid `subscribeFn` is mistakenly passed, an assertion failure is triggered. extracted from graphql#3620
yaacovCR added a commit to yaacovCR/graphql-js that referenced this pull request Dec 11, 2025
This change aligns the return types of `execute` and `subscribe` (as well as `createSourceEventStream`) with respect to returning values or promises. Just as GraphQL execution for queries and mutations stays synchronous when possible, creation of the source event stream and returning the mapped `AsyncGenerator` will now occur synchronously when possible, i.e. when the `subscribe` method for the given subscription root field directly returns an `AsyncIterable`, rather than a Promise<AsyncIterable>. Specifically, the return types of `subscribe` and `createSourceEventStream` become: `subscribe(...): PromiseOrValue<AsyncGenerator<ExecutionResult> | ExecutionResult>` `createSourceEventStream(...): PromiseOrValue<AsyncIterable<unknown> | ExecutionResult>`. Previously, they were: `subscribe(...): Promise<AsyncGenerator<ExecutionResult> | ExecutionResult>`). `createSourceEventStream(...): Promise<AsyncIterable<unknown> | ExecutionResult>`. Co-authored-by: Ivan Goncharov <ivan.goncharov.ua@gmail.com>
yaacovCR added a commit to yaacovCR/graphql-js that referenced this pull request Dec 11, 2025
Two test groups use essentially the same logic to set up a subscription with an improper subscribeFn, testing both `subscribe` and `createSourceEventStream`. This PR extracts the duplicated logic into a single common `subscribeWithBadFn` function. For convenience, the common function is typed to appropriately return a `Promise<ExecutionResult>` rather than a `Promise<ExecutionResult | AsyncGenerator<...>>`). Because the `subscribeFn` is expected to be "bad," an `AsyncGenerator` should never be returned. If a valid `subscribeFn` is mistakenly passed, an assertion failure is triggered. extracted from graphql#3620
yaacovCR added a commit to yaacovCR/graphql-js that referenced this pull request Dec 11, 2025
This change aligns the return types of `execute` and `subscribe` (as well as `createSourceEventStream`) with respect to returning values or promises. Just as GraphQL execution for queries and mutations stays synchronous when possible, creation of the source event stream and returning the mapped `AsyncGenerator` will now occur synchronously when possible, i.e. when the `subscribe` method for the given subscription root field directly returns an `AsyncIterable`, rather than a Promise<AsyncIterable>. Specifically, the return types of `subscribe` and `createSourceEventStream` become: `subscribe(...): PromiseOrValue<AsyncGenerator<ExecutionResult> | ExecutionResult>` `createSourceEventStream(...): PromiseOrValue<AsyncIterable<unknown> | ExecutionResult>`. Previously, they were: `subscribe(...): Promise<AsyncGenerator<ExecutionResult> | ExecutionResult>`). `createSourceEventStream(...): Promise<AsyncIterable<unknown> | ExecutionResult>`. Co-authored-by: Ivan Goncharov <ivan.goncharov.ua@gmail.com>
yaacovCR added a commit to yaacovCR/graphql-js that referenced this pull request Dec 11, 2025
Two test groups use essentially the same logic to set up a subscription with an improper subscribeFn, testing both `subscribe` and `createSourceEventStream`. This PR extracts the duplicated logic into a single common `subscribeWithBadFn` function. For convenience, the common function is typed to appropriately return a `Promise<ExecutionResult>` rather than a `Promise<ExecutionResult | AsyncGenerator<...>>`). Because the `subscribeFn` is expected to be "bad," an `AsyncGenerator` should never be returned. If a valid `subscribeFn` is mistakenly passed, an assertion failure is triggered. extracted from graphql#3620
yaacovCR added a commit to yaacovCR/graphql-js that referenced this pull request Dec 11, 2025
This change aligns the return types of `execute` and `subscribe` (as well as `createSourceEventStream`) with respect to returning values or promises. Just as GraphQL execution for queries and mutations stays synchronous when possible, creation of the source event stream and returning the mapped `AsyncGenerator` will now occur synchronously when possible, i.e. when the `subscribe` method for the given subscription root field directly returns an `AsyncIterable`, rather than a Promise<AsyncIterable>. Specifically, the return types of `subscribe` and `createSourceEventStream` become: `subscribe(...): PromiseOrValue<AsyncGenerator<ExecutionResult> | ExecutionResult>` `createSourceEventStream(...): PromiseOrValue<AsyncIterable<unknown> | ExecutionResult>`. Previously, they were: `subscribe(...): Promise<AsyncGenerator<ExecutionResult> | ExecutionResult>`). `createSourceEventStream(...): Promise<AsyncIterable<unknown> | ExecutionResult>`. Co-authored-by: Ivan Goncharov <ivan.goncharov.ua@gmail.com>
yaacovCR added a commit to yaacovCR/graphql-js that referenced this pull request Dec 16, 2025
Two test groups use essentially the same logic to set up a subscription with an improper subscribeFn, testing both `subscribe` and `createSourceEventStream`. This PR extracts the duplicated logic into a single common `subscribeWithBadFn` function. For convenience, the common function is typed to appropriately return a `Promise<ExecutionResult>` rather than a `Promise<ExecutionResult | AsyncGenerator<...>>`). Because the `subscribeFn` is expected to be "bad," an `AsyncGenerator` should never be returned. If a valid `subscribeFn` is mistakenly passed, an assertion failure is triggered. extracted from graphql#3620
yaacovCR added a commit to yaacovCR/graphql-js that referenced this pull request Dec 16, 2025
This change aligns the return types of `execute` and `subscribe` (as well as `createSourceEventStream`) with respect to returning values or promises. Just as GraphQL execution for queries and mutations stays synchronous when possible, creation of the source event stream and returning the mapped `AsyncGenerator` will now occur synchronously when possible, i.e. when the `subscribe` method for the given subscription root field directly returns an `AsyncIterable`, rather than a Promise<AsyncIterable>. Specifically, the return types of `subscribe` and `createSourceEventStream` become: `subscribe(...): PromiseOrValue<AsyncGenerator<ExecutionResult> | ExecutionResult>` `createSourceEventStream(...): PromiseOrValue<AsyncIterable<unknown> | ExecutionResult>`. Previously, they were: `subscribe(...): Promise<AsyncGenerator<ExecutionResult> | ExecutionResult>`). `createSourceEventStream(...): Promise<AsyncIterable<unknown> | ExecutionResult>`. Co-authored-by: Ivan Goncharov <ivan.goncharov.ua@gmail.com>
yaacovCR added a commit to yaacovCR/graphql-js that referenced this pull request Dec 17, 2025
Two test groups use essentially the same logic to set up a subscription with an improper subscribeFn, testing both `subscribe` and `createSourceEventStream`. This PR extracts the duplicated logic into a single common `subscribeWithBadFn` function. For convenience, the common function is typed to appropriately return a `Promise<ExecutionResult>` rather than a `Promise<ExecutionResult | AsyncGenerator<...>>`). Because the `subscribeFn` is expected to be "bad," an `AsyncGenerator` should never be returned. If a valid `subscribeFn` is mistakenly passed, an assertion failure is triggered. extracted from graphql#3620
yaacovCR added a commit to yaacovCR/graphql-js that referenced this pull request Dec 17, 2025
This change aligns the return types of `execute` and `subscribe` (as well as `createSourceEventStream`) with respect to returning values or promises. Just as GraphQL execution for queries and mutations stays synchronous when possible, creation of the source event stream and returning the mapped `AsyncGenerator` will now occur synchronously when possible, i.e. when the `subscribe` method for the given subscription root field directly returns an `AsyncIterable`, rather than a Promise<AsyncIterable>. Specifically, the return types of `subscribe` and `createSourceEventStream` become: `subscribe(...): PromiseOrValue<AsyncGenerator<ExecutionResult> | ExecutionResult>` `createSourceEventStream(...): PromiseOrValue<AsyncIterable<unknown> | ExecutionResult>`. Previously, they were: `subscribe(...): Promise<AsyncGenerator<ExecutionResult> | ExecutionResult>`). `createSourceEventStream(...): Promise<AsyncIterable<unknown> | ExecutionResult>`. Co-authored-by: Ivan Goncharov <ivan.goncharov.ua@gmail.com>
yaacovCR added a commit to yaacovCR/graphql-js that referenced this pull request Dec 17, 2025
Two test groups use essentially the same logic to set up a subscription with an improper subscribeFn, testing both `subscribe` and `createSourceEventStream`. This PR extracts the duplicated logic into a single common `subscribeWithBadFn` function. For convenience, the common function is typed to appropriately return a `Promise<ExecutionResult>` rather than a `Promise<ExecutionResult | AsyncGenerator<...>>`). Because the `subscribeFn` is expected to be "bad," an `AsyncGenerator` should never be returned. If a valid `subscribeFn` is mistakenly passed, an assertion failure is triggered. extracted from graphql#3620
yaacovCR added a commit to yaacovCR/graphql-js that referenced this pull request Dec 17, 2025
This change aligns the return types of `execute` and `subscribe` (as well as `createSourceEventStream`) with respect to returning values or promises. Just as GraphQL execution for queries and mutations stays synchronous when possible, creation of the source event stream and returning the mapped `AsyncGenerator` will now occur synchronously when possible, i.e. when the `subscribe` method for the given subscription root field directly returns an `AsyncIterable`, rather than a Promise<AsyncIterable>. Specifically, the return types of `subscribe` and `createSourceEventStream` become: `subscribe(...): PromiseOrValue<AsyncGenerator<ExecutionResult> | ExecutionResult>` `createSourceEventStream(...): PromiseOrValue<AsyncIterable<unknown> | ExecutionResult>`. Previously, they were: `subscribe(...): Promise<AsyncGenerator<ExecutionResult> | ExecutionResult>`). `createSourceEventStream(...): Promise<AsyncIterable<unknown> | ExecutionResult>`. Co-authored-by: Ivan Goncharov <ivan.goncharov.ua@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
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.
with respect to possible promises
motivations:
subscribeworkflow intoexecute