-
Notifications
You must be signed in to change notification settings - Fork 258
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
Fix relative path logic when eliding subgraph jump for @fromContext
#3005
Merged
clenfest
merged 4 commits into
apollographql:next
from
sachindshinde:sachin/bugfixes-for-context
May 14, 2024
Merged
Fix relative path logic when eliding subgraph jump for @fromContext
#3005
clenfest
merged 4 commits into
apollographql:next
from
sachindshinde:sachin/bugfixes-for-context
May 14, 2024
Conversation
This file contains 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
🦋 Changeset detectedLatest commit: fcbed84 The changes in this PR will be included in the next version bump. This PR includes changesets to release 7 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
This pull request is automatically built and testable in CodeSandbox. To see build info of the built libraries, click here or the icon next to each commit SHA. |
o0Ignition0o
approved these changes
May 14, 2024
clenfest
approved these changes
May 14, 2024
clenfest
pushed a commit
that referenced
this pull request
May 17, 2024
# Releases ## @apollo/[email protected] ### Minor Changes - Implement new directives to allow getting and setting context. This allows resolvers to reference and access data referenced by entities that exist in the GraphPath that was used to access the field. The following example demonstrates the ability to access the `prop` field within the Child resolver. ([#2988](#2988)) ```graphql type Query { p: Parent! } type Parent @key(fields: "id") @context(name: "context") { id: ID! child: Child! prop: String! } type Child @key(fields: "id") { id: ID! b: String! field(a: String @fromcontext(field: "$context { prop }")): Int! } ``` ### Patch Changes - Updated dependencies \[[`c4744da360235d8bb8270ea048f0e0fa5d03be1e`](c4744da)]: - @apollo/[email protected] - @apollo/[email protected] ## @apollo/[email protected] ### Minor Changes - Implement new directives to allow getting and setting context. This allows resolvers to reference and access data referenced by entities that exist in the GraphPath that was used to access the field. The following example demonstrates the ability to access the `prop` field within the Child resolver. ([#2988](#2988)) ```graphql type Query { p: Parent! } type Parent @key(fields: "id") @context(name: "context") { id: ID! child: Child! prop: String! } type Child @key(fields: "id") { id: ID! b: String! field(a: String @fromcontext(field: "$context { prop }")): Int! } ``` ### Patch Changes - Updated dependencies \[[`c4744da360235d8bb8270ea048f0e0fa5d03be1e`](c4744da), [`daf36bd242ba4db0cfcf0e18c1eed235ff0dfaf2`](daf36bd)]: - @apollo/[email protected] - @apollo/[email protected] - @apollo/[email protected] ## @apollo/[email protected] ### Minor Changes - Implement new directives to allow getting and setting context. This allows resolvers to reference and access data referenced by entities that exist in the GraphPath that was used to access the field. The following example demonstrates the ability to access the `prop` field within the Child resolver. ([#2988](#2988)) ```graphql type Query { p: Parent! } type Parent @key(fields: "id") @context(name: "context") { id: ID! child: Child! prop: String! } type Child @key(fields: "id") { id: ID! b: String! field(a: String @fromcontext(field: "$context { prop }")): Int! } ``` ## @apollo/[email protected] ### Minor Changes - Implement new directives to allow getting and setting context. This allows resolvers to reference and access data referenced by entities that exist in the GraphPath that was used to access the field. The following example demonstrates the ability to access the `prop` field within the Child resolver. ([#2988](#2988)) ```graphql type Query { p: Parent! } type Parent @key(fields: "id") @context(name: "context") { id: ID! child: Child! prop: String! } type Child @key(fields: "id") { id: ID! b: String! field(a: String @fromcontext(field: "$context { prop }")): Int! } ``` ### Patch Changes - Updated dependencies \[[`c4744da360235d8bb8270ea048f0e0fa5d03be1e`](c4744da)]: - @apollo/[email protected] ## @apollo/[email protected] ### Minor Changes - Implement new directives to allow getting and setting context. This allows resolvers to reference and access data referenced by entities that exist in the GraphPath that was used to access the field. The following example demonstrates the ability to access the `prop` field within the Child resolver. ([#2988](#2988)) ```graphql type Query { p: Parent! } type Parent @key(fields: "id") @context(name: "context") { id: ID! child: Child! prop: String! } type Child @key(fields: "id") { id: ID! b: String! field(a: String @fromcontext(field: "$context { prop }")): Int! } ``` ### Patch Changes - Fix relative path logic when eliding subgraph jumps for `@fromContext` ([#3005](#3005)) - Updated dependencies \[[`c4744da360235d8bb8270ea048f0e0fa5d03be1e`](c4744da)]: - @apollo/[email protected] - @apollo/[email protected] ## @apollo/[email protected] ### Patch Changes - Updated dependencies \[[`c4744da360235d8bb8270ea048f0e0fa5d03be1e`](c4744da)]: - @apollo/[email protected] ## [email protected] Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
clenfest
pushed a commit
that referenced
this pull request
May 29, 2024
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to next, this PR will be updated. # Releases ## @apollo/[email protected] ### Minor Changes - Implement new directives to allow getting and setting context. This allows resolvers to reference and access data referenced by entities that exist in the GraphPath that was used to access the field. The following example demonstrates the ability to access the `prop` field within the Child resolver. ([#2988](#2988)) ```graphql type Query { p: Parent! } type Parent @key(fields: "id") @context(name: "context") { id: ID! child: Child! prop: String! } type Child @key(fields: "id") { id: ID! b: String! field(a: String @fromcontext(field: "$context { prop }")): Int! } ``` ### Patch Changes - Various set context bugfixes ([#3017](#3017)) - Updated dependencies \[[`c4744da360235d8bb8270ea048f0e0fa5d03be1e`](c4744da), [`8a936d741a0c05835ff2533714cf330d18209179`](8a936d7), [`f5fe3e74d36722f78004c1e2e03c77d8b95cd6bf`](f5fe3e7)]: - @apollo/[email protected] - @apollo/[email protected] ## @apollo/[email protected] ### Minor Changes - Implement new directives to allow getting and setting context. This allows resolvers to reference and access data referenced by entities that exist in the GraphPath that was used to access the field. The following example demonstrates the ability to access the `prop` field within the Child resolver. ([#2988](#2988)) ```graphql type Query { p: Parent! } type Parent @key(fields: "id") @context(name: "context") { id: ID! child: Child! prop: String! } type Child @key(fields: "id") { id: ID! b: String! field(a: String @fromcontext(field: "$context { prop }")): Int! } ``` ### Patch Changes - Various set context bugfixes ([#3017](#3017)) - Updated dependencies \[[`c4744da360235d8bb8270ea048f0e0fa5d03be1e`](c4744da), [`8a936d741a0c05835ff2533714cf330d18209179`](8a936d7), [`daf36bd242ba4db0cfcf0e18c1eed235ff0dfaf2`](daf36bd)]: - @apollo/[email protected] - @apollo/[email protected] - @apollo/[email protected] ## @apollo/[email protected] ### Minor Changes - Implement new directives to allow getting and setting context. This allows resolvers to reference and access data referenced by entities that exist in the GraphPath that was used to access the field. The following example demonstrates the ability to access the `prop` field within the Child resolver. ([#2988](#2988)) ```graphql type Query { p: Parent! } type Parent @key(fields: "id") @context(name: "context") { id: ID! child: Child! prop: String! } type Child @key(fields: "id") { id: ID! b: String! field(a: String @fromcontext(field: "$context { prop }")): Int! } ``` ### Patch Changes - Various set context bugfixes ([#3017](#3017)) ## @apollo/[email protected] ### Minor Changes - Implement new directives to allow getting and setting context. This allows resolvers to reference and access data referenced by entities that exist in the GraphPath that was used to access the field. The following example demonstrates the ability to access the `prop` field within the Child resolver. ([#2988](#2988)) ```graphql type Query { p: Parent! } type Parent @key(fields: "id") @context(name: "context") { id: ID! child: Child! prop: String! } type Child @key(fields: "id") { id: ID! b: String! field(a: String @fromcontext(field: "$context { prop }")): Int! } ``` ### Patch Changes - Various set context bugfixes ([#3017](#3017)) - Fix bug in context-matching logic for interfaces-implementing-interfaces (#3014) ([#3015](#3015)) A field is considered to match a context if the field's parent type (in the original query) either has `@context` on it, or implements/is a member of a type with `@context` on it. We ended up missing the case where interfaces implement interfaces; this PR introduces a fix. - Updated dependencies \[[`c4744da360235d8bb8270ea048f0e0fa5d03be1e`](c4744da), [`8a936d741a0c05835ff2533714cf330d18209179`](8a936d7)]: - @apollo/[email protected] ## @apollo/[email protected] ### Minor Changes - Implement new directives to allow getting and setting context. This allows resolvers to reference and access data referenced by entities that exist in the GraphPath that was used to access the field. The following example demonstrates the ability to access the `prop` field within the Child resolver. ([#2988](#2988)) ```graphql type Query { p: Parent! } type Parent @key(fields: "id") @context(name: "context") { id: ID! child: Child! prop: String! } type Child @key(fields: "id") { id: ID! b: String! field(a: String @fromcontext(field: "$context { prop }")): Int! } ``` ### Patch Changes - Various set context bugfixes ([#3017](#3017)) - Fix relative path logic when eliding subgraph jumps for `@fromContext` ([#3005](#3005)) - Updated dependencies \[[`c4744da360235d8bb8270ea048f0e0fa5d03be1e`](c4744da), [`8a936d741a0c05835ff2533714cf330d18209179`](8a936d7), [`f5fe3e74d36722f78004c1e2e03c77d8b95cd6bf`](f5fe3e7)]: - @apollo/[email protected] - @apollo/[email protected] ## @apollo/[email protected] ### Patch Changes - Various set context bugfixes ([#3017](#3017)) - Updated dependencies \[[`c4744da360235d8bb8270ea048f0e0fa5d03be1e`](c4744da), [`8a936d741a0c05835ff2533714cf330d18209179`](8a936d7)]: - @apollo/[email protected] ## [email protected] ### Patch Changes - Various set context bugfixes ([#3017](#3017)) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Meschreiber
pushed a commit
that referenced
this pull request
Jun 17, 2024
…#3005) This PR makes some changes to #2988, specifically: - It fixes a bug where the relative path is computed incorrectly when a subgraph jump is skipped/elided in the case of `@fromContext`. - It changes the selection-set-to-renamer conversion logic to create multiple inline fragments instead of introducing a new syntax, in the case of a type condition on an abstract type. (This saves us from having to update router to understand it.) - It tweaks the iteration over the `GraphPath` in `canSatisfyConditions()` to be cleaner/easier to understand. - When I looked at that code again, I noticed it was strange that we initialized `levelsInDataPath` at `1` even though we aren't guaranteed that the last element in `GraphPath` is a field. The gist is that at the first match, we know it's a field, so that ends up being okay. But I think it's easier to understand code-wise if both `levelsInQueryPath` and `levelsInDataPath` start off at 0, and every time we get a new element (at the start of the `for` block) we increment the counts accordingly.
Meschreiber
pushed a commit
that referenced
this pull request
Jun 17, 2024
# Releases ## @apollo/[email protected] ### Minor Changes - Implement new directives to allow getting and setting context. This allows resolvers to reference and access data referenced by entities that exist in the GraphPath that was used to access the field. The following example demonstrates the ability to access the `prop` field within the Child resolver. ([#2988](#2988)) ```graphql type Query { p: Parent! } type Parent @key(fields: "id") @context(name: "context") { id: ID! child: Child! prop: String! } type Child @key(fields: "id") { id: ID! b: String! field(a: String @fromcontext(field: "$context { prop }")): Int! } ``` ### Patch Changes - Updated dependencies \[[`c4744da360235d8bb8270ea048f0e0fa5d03be1e`](c4744da)]: - @apollo/[email protected] - @apollo/[email protected] ## @apollo/[email protected] ### Minor Changes - Implement new directives to allow getting and setting context. This allows resolvers to reference and access data referenced by entities that exist in the GraphPath that was used to access the field. The following example demonstrates the ability to access the `prop` field within the Child resolver. ([#2988](#2988)) ```graphql type Query { p: Parent! } type Parent @key(fields: "id") @context(name: "context") { id: ID! child: Child! prop: String! } type Child @key(fields: "id") { id: ID! b: String! field(a: String @fromcontext(field: "$context { prop }")): Int! } ``` ### Patch Changes - Updated dependencies \[[`c4744da360235d8bb8270ea048f0e0fa5d03be1e`](c4744da), [`daf36bd242ba4db0cfcf0e18c1eed235ff0dfaf2`](daf36bd)]: - @apollo/[email protected] - @apollo/[email protected] - @apollo/[email protected] ## @apollo/[email protected] ### Minor Changes - Implement new directives to allow getting and setting context. This allows resolvers to reference and access data referenced by entities that exist in the GraphPath that was used to access the field. The following example demonstrates the ability to access the `prop` field within the Child resolver. ([#2988](#2988)) ```graphql type Query { p: Parent! } type Parent @key(fields: "id") @context(name: "context") { id: ID! child: Child! prop: String! } type Child @key(fields: "id") { id: ID! b: String! field(a: String @fromcontext(field: "$context { prop }")): Int! } ``` ## @apollo/[email protected] ### Minor Changes - Implement new directives to allow getting and setting context. This allows resolvers to reference and access data referenced by entities that exist in the GraphPath that was used to access the field. The following example demonstrates the ability to access the `prop` field within the Child resolver. ([#2988](#2988)) ```graphql type Query { p: Parent! } type Parent @key(fields: "id") @context(name: "context") { id: ID! child: Child! prop: String! } type Child @key(fields: "id") { id: ID! b: String! field(a: String @fromcontext(field: "$context { prop }")): Int! } ``` ### Patch Changes - Updated dependencies \[[`c4744da360235d8bb8270ea048f0e0fa5d03be1e`](c4744da)]: - @apollo/[email protected] ## @apollo/[email protected] ### Minor Changes - Implement new directives to allow getting and setting context. This allows resolvers to reference and access data referenced by entities that exist in the GraphPath that was used to access the field. The following example demonstrates the ability to access the `prop` field within the Child resolver. ([#2988](#2988)) ```graphql type Query { p: Parent! } type Parent @key(fields: "id") @context(name: "context") { id: ID! child: Child! prop: String! } type Child @key(fields: "id") { id: ID! b: String! field(a: String @fromcontext(field: "$context { prop }")): Int! } ``` ### Patch Changes - Fix relative path logic when eliding subgraph jumps for `@fromContext` ([#3005](#3005)) - Updated dependencies \[[`c4744da360235d8bb8270ea048f0e0fa5d03be1e`](c4744da)]: - @apollo/[email protected] - @apollo/[email protected] ## @apollo/[email protected] ### Patch Changes - Updated dependencies \[[`c4744da360235d8bb8270ea048f0e0fa5d03be1e`](c4744da)]: - @apollo/[email protected] ## [email protected] Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Meschreiber
pushed a commit
that referenced
this pull request
Jun 17, 2024
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to next, this PR will be updated. # Releases ## @apollo/[email protected] ### Minor Changes - Implement new directives to allow getting and setting context. This allows resolvers to reference and access data referenced by entities that exist in the GraphPath that was used to access the field. The following example demonstrates the ability to access the `prop` field within the Child resolver. ([#2988](#2988)) ```graphql type Query { p: Parent! } type Parent @key(fields: "id") @context(name: "context") { id: ID! child: Child! prop: String! } type Child @key(fields: "id") { id: ID! b: String! field(a: String @fromcontext(field: "$context { prop }")): Int! } ``` ### Patch Changes - Various set context bugfixes ([#3017](#3017)) - Updated dependencies \[[`c4744da360235d8bb8270ea048f0e0fa5d03be1e`](c4744da), [`8a936d741a0c05835ff2533714cf330d18209179`](8a936d7), [`f5fe3e74d36722f78004c1e2e03c77d8b95cd6bf`](f5fe3e7)]: - @apollo/[email protected] - @apollo/[email protected] ## @apollo/[email protected] ### Minor Changes - Implement new directives to allow getting and setting context. This allows resolvers to reference and access data referenced by entities that exist in the GraphPath that was used to access the field. The following example demonstrates the ability to access the `prop` field within the Child resolver. ([#2988](#2988)) ```graphql type Query { p: Parent! } type Parent @key(fields: "id") @context(name: "context") { id: ID! child: Child! prop: String! } type Child @key(fields: "id") { id: ID! b: String! field(a: String @fromcontext(field: "$context { prop }")): Int! } ``` ### Patch Changes - Various set context bugfixes ([#3017](#3017)) - Updated dependencies \[[`c4744da360235d8bb8270ea048f0e0fa5d03be1e`](c4744da), [`8a936d741a0c05835ff2533714cf330d18209179`](8a936d7), [`daf36bd242ba4db0cfcf0e18c1eed235ff0dfaf2`](daf36bd)]: - @apollo/[email protected] - @apollo/[email protected] - @apollo/[email protected] ## @apollo/[email protected] ### Minor Changes - Implement new directives to allow getting and setting context. This allows resolvers to reference and access data referenced by entities that exist in the GraphPath that was used to access the field. The following example demonstrates the ability to access the `prop` field within the Child resolver. ([#2988](#2988)) ```graphql type Query { p: Parent! } type Parent @key(fields: "id") @context(name: "context") { id: ID! child: Child! prop: String! } type Child @key(fields: "id") { id: ID! b: String! field(a: String @fromcontext(field: "$context { prop }")): Int! } ``` ### Patch Changes - Various set context bugfixes ([#3017](#3017)) ## @apollo/[email protected] ### Minor Changes - Implement new directives to allow getting and setting context. This allows resolvers to reference and access data referenced by entities that exist in the GraphPath that was used to access the field. The following example demonstrates the ability to access the `prop` field within the Child resolver. ([#2988](#2988)) ```graphql type Query { p: Parent! } type Parent @key(fields: "id") @context(name: "context") { id: ID! child: Child! prop: String! } type Child @key(fields: "id") { id: ID! b: String! field(a: String @fromcontext(field: "$context { prop }")): Int! } ``` ### Patch Changes - Various set context bugfixes ([#3017](#3017)) - Fix bug in context-matching logic for interfaces-implementing-interfaces (#3014) ([#3015](#3015)) A field is considered to match a context if the field's parent type (in the original query) either has `@context` on it, or implements/is a member of a type with `@context` on it. We ended up missing the case where interfaces implement interfaces; this PR introduces a fix. - Updated dependencies \[[`c4744da360235d8bb8270ea048f0e0fa5d03be1e`](c4744da), [`8a936d741a0c05835ff2533714cf330d18209179`](8a936d7)]: - @apollo/[email protected] ## @apollo/[email protected] ### Minor Changes - Implement new directives to allow getting and setting context. This allows resolvers to reference and access data referenced by entities that exist in the GraphPath that was used to access the field. The following example demonstrates the ability to access the `prop` field within the Child resolver. ([#2988](#2988)) ```graphql type Query { p: Parent! } type Parent @key(fields: "id") @context(name: "context") { id: ID! child: Child! prop: String! } type Child @key(fields: "id") { id: ID! b: String! field(a: String @fromcontext(field: "$context { prop }")): Int! } ``` ### Patch Changes - Various set context bugfixes ([#3017](#3017)) - Fix relative path logic when eliding subgraph jumps for `@fromContext` ([#3005](#3005)) - Updated dependencies \[[`c4744da360235d8bb8270ea048f0e0fa5d03be1e`](c4744da), [`8a936d741a0c05835ff2533714cf330d18209179`](8a936d7), [`f5fe3e74d36722f78004c1e2e03c77d8b95cd6bf`](f5fe3e7)]: - @apollo/[email protected] - @apollo/[email protected] ## @apollo/[email protected] ### Patch Changes - Various set context bugfixes ([#3017](#3017)) - Updated dependencies \[[`c4744da360235d8bb8270ea048f0e0fa5d03be1e`](c4744da), [`8a936d741a0c05835ff2533714cf330d18209179`](8a936d7)]: - @apollo/[email protected] ## [email protected] ### Patch Changes - Various set context bugfixes ([#3017](#3017)) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.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.
This PR makes some changes to #2988, specifically:
@fromContext
.GraphPath
incanSatisfyConditions()
to be cleaner/easier to understand.levelsInDataPath
at1
even though we aren't guaranteed that the last element inGraphPath
is a field. The gist is that at the first match, we know it's a field, so that ends up being okay. But I think it's easier to understand code-wise if bothlevelsInQueryPath
andlevelsInDataPath
start off at 0, and every time we get a new element (at the start of thefor
block) we increment the counts accordingly.