-
Notifications
You must be signed in to change notification settings - Fork 252
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
Rewrites gateway post-processing #2335
Conversation
👷 Deploy request for apollo-federation-docs pending review.Visit the deploys page to approve it
|
🦋 Changeset detectedLatest commit: 8ec14ed 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. |
@@ -996,42 +998,11 @@ describe('executeQueryPlan', () => { | |||
const queryPlan = queryPlanner.buildQueryPlan(operation); | |||
|
|||
const response = await executePlan(queryPlan, operation, undefined, schema); | |||
|
|||
expect(response.data).toMatchInlineSnapshot(` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note to reviewers: this test was kind of artificial, in that it was parsing/validating the query using a version of the schema with nothing marked @inaccessible
, but then it called executePlan
with the schema where fields were marked @inaccessible
. The real code will never ever do that, and there is plenty of problems you can get if you don't pass the same schema to different parts of the code dealing with a given query.
In reality, other tests ensures that @inacessible
fields are not part of the API schema, but then @inaccessible
fields cannot be queried in the first place. So the error we now get is the correct behaviour.
// [GraphQLError: Abstract type "Vehicle" was resolve to a type [inaccessible type] that does not exist inside schema.], | ||
// ] | ||
// `); | ||
expect(response.errors).toMatchInlineSnapshot(` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note to reviewers: there is a bunch of comments on the background around this in executeQueryPlan
, which is part about postProcessingErrors
. The tl;dr is that the existing code was unconditionally ignoring post-processing errors, which some users have been complaining about in the past because it can make it very hard to debug issue with broken subgraphs, and an earlier patch tried to change this by unconditionally returning post-processing errors, but this was quickly reverted because post-processing errors often duplicate subgraphs errors and people were annoyed.
This patch implements a middle ground where we do not include post-processing errors at all if we have some query plan execution errors (thus make sure we can't create duplicates), but include those post-processing errors if there is no query plan execution errors whatsoever, to at least help in that case.
This typically make this test kind of work again: the test have a subgraph that returns an object for an @inacessible
type, and the old was nullifying that object (correctly, we shouldn't return it) but was not indicating any error (which isn't great). The updated code bring back the error.
Do not that the new error message send differs from what graphQL-js would have produced, but I think the new message is a bit more helpful at pinpointing the problem.
Lastly, this code made me noticed that we still had some cleanErrorOfInaccessible
code that was completely unused, so this patch removes it. Now that we control the code generating the errors, we have no reason to ever need to "clean" those error message: we can just make sure we don't leak anything in the first place (which is what is done here).
export async function executeQueryPlan( | ||
queryPlan: QueryPlan, | ||
serviceMap: ServiceMap, | ||
requestContext: GatewayGraphQLRequestContext, | ||
operationContext: OperationContext, | ||
supergraphSchema: GraphQLSchema, | ||
apiSchema: Schema, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note to reviewers: we do add an argument to an exported method, and I'll mention it in the changelog. We already added the supergraphSchema
argument in a previous release the same way so I don't think it's an issue.
In general, the arguments of this method are a bit messy now because we pass the API schema as a Schema
but we also have that same schema in the OperationContext
as a GraphQLSchema
, and while we do want to pass both versions to avoid costly conversions, we could maybe clean things up. I'll leave that for a followup though.
a146b9e
to
0a1d579
Compare
@@ -559,9 +556,7 @@ export class ApolloGateway implements GatewayInterface { | |||
): void { | |||
this.queryPlanStore.clear(); | |||
this.apiSchema = coreSchema.toAPISchema(); | |||
this.schema = addExtensions( | |||
wrapSchemaWithAliasResolver(this.apiSchema.toGraphQLJSSchema()), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note to reviewers: wrapSchemaWithAliasResolver
was needed due to the use of GraphQL-js execution. Namely, when GraphQL-js execute is passed an object, it expects that object to match the schema and so to use field names from the schema. But the internal data we gather during query plan execution will have data under the "response name", and so under aliases when aliases was used. That method made sure things were still working.
The new code is written to use response name directly, so no need for that.
0a1d579
to
f24a868
Compare
f24a868
to
00bfb2b
Compare
With `@interfaceObject`, some queries can sometimes be entirely fullfilled by a sugraph using the `@interfaceObject` (when only fields provided by that subgraph are queried and the query does not necessitate knowledge of the underlying implementation type as neither `__typename` is queried, nor is there any type condition). But the post-processing that the gateway does on the internal results to compute the final response was currently using GraphQL-js execution, and this was breaking in those cases because we get results for what is an interface in the supergraph but with no __typename. Additionally, using GraphQL-js execution for this post-processing has long been a "FIXME" of the code, as this is a heavy-handed way to do this processing. This patch rewrite this post-processing to stop using GraphQL-js execution and instead implements the subset of what is truly necessary for that post-processing. Doing so allows to ensure that the code work as needed with the `@interfaceObject` cases mentioned above. Fixes apollographql#2320
00bfb2b
to
8ec14ed
Compare
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | Type | Update | |---|---|---|---|---|---|---|---| | [@apollo/client](https://www.apollographql.com/docs/react/) ([source](https://togithub.com/apollographql/apollo-client)) | [`3.7.7` -> `3.7.8`](https://renovatebot.com/diffs/npm/@apollo%2fclient/3.7.7/3.7.8) | [![age](https://badges.renovateapi.com/packages/npm/@apollo%2fclient/3.7.8/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/@apollo%2fclient/3.7.8/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/@apollo%2fclient/3.7.8/compatibility-slim/3.7.7)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/@apollo%2fclient/3.7.8/confidence-slim/3.7.7)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [@apollo/gateway](https://togithub.com/apollographql/federation) | [`2.3.1` -> `2.3.2`](https://renovatebot.com/diffs/npm/@apollo%2fgateway/2.3.1/2.3.2) | [![age](https://badges.renovateapi.com/packages/npm/@apollo%2fgateway/2.3.2/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/@apollo%2fgateway/2.3.2/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/@apollo%2fgateway/2.3.2/compatibility-slim/2.3.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/@apollo%2fgateway/2.3.2/confidence-slim/2.3.1)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [@apollo/subgraph](https://togithub.com/apollographql/federation) | [`2.3.1` -> `2.3.2`](https://renovatebot.com/diffs/npm/@apollo%2fsubgraph/2.3.1/2.3.2) | [![age](https://badges.renovateapi.com/packages/npm/@apollo%2fsubgraph/2.3.2/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/@apollo%2fsubgraph/2.3.2/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/@apollo%2fsubgraph/2.3.2/compatibility-slim/2.3.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/@apollo%2fsubgraph/2.3.2/confidence-slim/2.3.1)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [@typescript-eslint/eslint-plugin](https://togithub.com/typescript-eslint/typescript-eslint) | [`5.51.0` -> `5.52.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/5.51.0/5.52.0) | [![age](https://badges.renovateapi.com/packages/npm/@typescript-eslint%2feslint-plugin/5.52.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/@typescript-eslint%2feslint-plugin/5.52.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/@typescript-eslint%2feslint-plugin/5.52.0/compatibility-slim/5.51.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/@typescript-eslint%2feslint-plugin/5.52.0/confidence-slim/5.51.0)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [@typescript-eslint/parser](https://togithub.com/typescript-eslint/typescript-eslint) | [`5.51.0` -> `5.52.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/5.51.0/5.52.0) | [![age](https://badges.renovateapi.com/packages/npm/@typescript-eslint%2fparser/5.52.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/@typescript-eslint%2fparser/5.52.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/@typescript-eslint%2fparser/5.52.0/compatibility-slim/5.51.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/@typescript-eslint%2fparser/5.52.0/confidence-slim/5.51.0)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [cspell](https://streetsidesoftware.github.io/cspell/) ([source](https://togithub.com/streetsidesoftware/cspell)) | [`6.22.0` -> `6.26.3`](https://renovatebot.com/diffs/npm/cspell/6.22.0/6.26.3) | [![age](https://badges.renovateapi.com/packages/npm/cspell/6.26.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/cspell/6.26.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/cspell/6.26.3/compatibility-slim/6.22.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/cspell/6.26.3/confidence-slim/6.22.0)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [eslint](https://eslint.org) ([source](https://togithub.com/eslint/eslint)) | [`8.33.0` -> `8.34.0`](https://renovatebot.com/diffs/npm/eslint/8.33.0/8.34.0) | [![age](https://badges.renovateapi.com/packages/npm/eslint/8.34.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/eslint/8.34.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/eslint/8.34.0/compatibility-slim/8.33.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/eslint/8.34.0/confidence-slim/8.33.0)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [jest](https://jestjs.io/) ([source](https://togithub.com/facebook/jest)) | [`29.4.2` -> `29.4.3`](https://renovatebot.com/diffs/npm/jest/29.4.2/29.4.3) | [![age](https://badges.renovateapi.com/packages/npm/jest/29.4.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/jest/29.4.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/jest/29.4.3/compatibility-slim/29.4.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/jest/29.4.3/confidence-slim/29.4.2)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [jest-config](https://togithub.com/facebook/jest) | [`29.4.2` -> `29.4.3`](https://renovatebot.com/diffs/npm/jest-config/29.4.2/29.4.3) | [![age](https://badges.renovateapi.com/packages/npm/jest-config/29.4.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/jest-config/29.4.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/jest-config/29.4.3/compatibility-slim/29.4.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/jest-config/29.4.3/confidence-slim/29.4.2)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [jest-mock](https://togithub.com/facebook/jest) | [`29.4.2` -> `29.4.3`](https://renovatebot.com/diffs/npm/jest-mock/29.4.2/29.4.3) | [![age](https://badges.renovateapi.com/packages/npm/jest-mock/29.4.3/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/jest-mock/29.4.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/jest-mock/29.4.3/compatibility-slim/29.4.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/jest-mock/29.4.3/confidence-slim/29.4.2)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [node](https://togithub.com/nodejs/node) | [`18.14.0` -> `18.14.1`](https://renovatebot.com/diffs/npm/node/18.14.0/v18.14.1) | [![age](https://badges.renovateapi.com/packages/github-tags/node/v18.14.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/github-tags/node/v18.14.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/github-tags/node/v18.14.1/compatibility-slim/18.14.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/github-tags/node/v18.14.1/confidence-slim/18.14.0)](https://docs.renovatebot.com/merge-confidence/) | volta | patch | | [npm](https://docs.npmjs.com/) ([source](https://togithub.com/npm/cli)) | [`9.4.2` -> `9.5.0`](https://renovatebot.com/diffs/npm/npm/9.4.2/9.5.0) | [![age](https://badges.renovateapi.com/packages/npm/npm/9.5.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/npm/9.5.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/npm/9.5.0/compatibility-slim/9.4.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/npm/9.5.0/confidence-slim/9.4.2)](https://docs.renovatebot.com/merge-confidence/) | volta | minor | | [rollup](https://rollupjs.org/) ([source](https://togithub.com/rollup/rollup)) | [`3.14.0` -> `3.15.0`](https://renovatebot.com/diffs/npm/rollup/3.14.0/3.15.0) | [![age](https://badges.renovateapi.com/packages/npm/rollup/3.15.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/npm/rollup/3.15.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/npm/rollup/3.15.0/compatibility-slim/3.14.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/npm/rollup/3.15.0/confidence-slim/3.14.0)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | --- ### Release Notes <details> <summary>apollographql/apollo-client</summary> ### [`v3.7.8`](https://togithub.com/apollographql/apollo-client/blob/HEAD/CHANGELOG.md#​378) [Compare Source](https://togithub.com/apollographql/apollo-client/compare/v3.7.7...v3.7.8) ##### Patch Changes - [#​7555](https://togithub.com/apollographql/apollo-client/pull/7555) [`45562d6fa`](https://togithub.com/apollographql/apollo-client/commit/45562d6fa20eab658bd86d79d092862ace4e1225) Thanks [@​TheCeloReis](https://togithub.com/TheCeloReis)! - Adds `TVariables` generic to `GraphQLRequest` and `MockedResponse` interfaces. - [#​10526](https://togithub.com/apollographql/apollo-client/pull/10526) [`1d13de4f1`](https://togithub.com/apollographql/apollo-client/commit/1d13de4f190150e96d61a9e987274ee6c249dbef) Thanks [@​benjamn](https://togithub.com/benjamn)! - Tolerate undefined `concast.sources` if `complete` called earlier than `concast.start` - [#​10497](https://togithub.com/apollographql/apollo-client/pull/10497) [`8a883d8a1`](https://togithub.com/apollographql/apollo-client/commit/8a883d8a1c8899f94a3e2ae09cb2069bde2b2150) Thanks [@​nevir](https://togithub.com/nevir)! - Update `SingleExecutionResult` and `IncrementalPayload`'s `data` types such that they no longer include `undefined`, which was not a valid runtime value, to fix errors when TypeScript's `exactOptionalPropertyTypes` is enabled. </details> <details> <summary>apollographql/federation (@​apollo/gateway)</summary> ### [`v2.3.2`](https://togithub.com/apollographql/federation/blob/HEAD/gateway-js/CHANGELOG.md#​232) [Compare Source](https://togithub.com/apollographql/federation/compare/@apollo/gateway@2.3.1...@apollo/gateway@2.3.2) ##### Patch Changes - Move gateway post-processing errors from `errors` into `extensions.valueCompletion` of the response ([#​2380](https://togithub.com/apollographql/federation/pull/2380)) \[https://github.com/apollographql/federation/pull/2335](https://togithub.com/apollographql/federation/pull/2335)5]\(PR [#​2335](https://togithub.com/apollographql/federation/issues/2335)) introduced a breaking change that broke existing usages with respect to nullability and gateway error handling. In response to \[https://github.com/apollographql/federation/issues/2374](https://togithub.com/apollographql/federation/issues/2374)4]\(Issue [#​2374](https://togithub.com/apollographql/federation/issues/2374)), we are reverting the breaking portion of this change by continuing to swallow post processing errors as the gateway did prior to v2.3.0. Instead, those errors will now be included on the `extensions.valueCompletion` object in the response object. Gateway v2.3.0 and v2.3.1 are both affected by this change in behavior. - Updated dependencies \[]: - [@​apollo/composition](https://togithub.com/apollo/composition)[@​2](https://togithub.com/2).3.2 - [@​apollo/federation-internals](https://togithub.com/apollo/federation-internals)[@​2](https://togithub.com/2).3.2 - [@​apollo/query-planner](https://togithub.com/apollo/query-planner)[@​2](https://togithub.com/2).3.2 </details> <details> <summary>apollographql/federation (@​apollo/subgraph)</summary> ### [`v2.3.2`](https://togithub.com/apollographql/federation/blob/HEAD/subgraph-js/CHANGELOG.md#​232) [Compare Source](https://togithub.com/apollographql/federation/compare/@apollo/subgraph@2.3.1...@apollo/subgraph@2.3.2) ##### Patch Changes - Updated dependencies \[]: - [@​apollo/federation-internals](https://togithub.com/apollo/federation-internals)[@​2](https://togithub.com/2).3.2 </details> <details> <summary>typescript-eslint/typescript-eslint (@​typescript-eslint/eslint-plugin)</summary> ### [`v5.52.0`](https://togithub.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#​5520-httpsgithubcomtypescript-eslinttypescript-eslintcomparev5510v5520-2023-02-13) [Compare Source](https://togithub.com/typescript-eslint/typescript-eslint/compare/v5.51.0...v5.52.0) ##### Bug Fixes - **eslint-plugin:** \[no-import-type-side-effects] correctly ignore zero-specifier imports ([#​6444](https://togithub.com/typescript-eslint/typescript-eslint/issues/6444)) ([d5a6688](https://togithub.com/typescript-eslint/typescript-eslint/commit/d5a6688a22ebaa2992e549f44c224fc8d0fc5cc7)) - **eslint-plugin:** \[no-unnecessary-condition] account for optional chaining on potentially void values ([#​6432](https://togithub.com/typescript-eslint/typescript-eslint/issues/6432)) ([e1d9c67](https://togithub.com/typescript-eslint/typescript-eslint/commit/e1d9c67981be53e091a4107f326b9bf097650c1f)), closes [#​5255](https://togithub.com/typescript-eslint/typescript-eslint/issues/5255) - **eslint-plugin:** \[no-unnecessary-condition] fix false positive when checking indexed access types ([#​6452](https://togithub.com/typescript-eslint/typescript-eslint/issues/6452)) ([d569924](https://togithub.com/typescript-eslint/typescript-eslint/commit/d569924cf3c223c185f6ba913390cd865cd33197)) - **eslint-plugin:** fix key-spacing when type starts on next line ([#​6412](https://togithub.com/typescript-eslint/typescript-eslint/issues/6412)) ([3eb2eed](https://togithub.com/typescript-eslint/typescript-eslint/commit/3eb2eed6167e2ffad6c44c0fcbd86be4b6202aeb)) ##### Features - **eslint-plugin:** \[block-spacing] extending base rule for TS related blocks ([#​6195](https://togithub.com/typescript-eslint/typescript-eslint/issues/6195)) ([b2db3f5](https://togithub.com/typescript-eslint/typescript-eslint/commit/b2db3f57d3b551e1159380c3d23edee14f133ac1)) - **eslint-plugin:** \[explicit-function-return-type] add allowFunctionsWithoutTypeParameters option ([#​6105](https://togithub.com/typescript-eslint/typescript-eslint/issues/6105)) ([113640e](https://togithub.com/typescript-eslint/typescript-eslint/commit/113640e9742acb3a193078e9704648517aebf1d8)) - **eslint-plugin:** \[explicit-function-return-type] add allowIIFEs option ([#​6237](https://togithub.com/typescript-eslint/typescript-eslint/issues/6237)) ([a1b3f7b](https://togithub.com/typescript-eslint/typescript-eslint/commit/a1b3f7b4d97154ac4b0d7934d12f1d5970cffe15)) </details> <details> <summary>typescript-eslint/typescript-eslint (@​typescript-eslint/parser)</summary> ### [`v5.52.0`](https://togithub.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#​5520-httpsgithubcomtypescript-eslinttypescript-eslintcomparev5510v5520-2023-02-13) [Compare Source](https://togithub.com/typescript-eslint/typescript-eslint/compare/v5.51.0...v5.52.0) **Note:** Version bump only for package [@​typescript-eslint/parser](https://togithub.com/typescript-eslint/parser) </details> <details> <summary>streetsidesoftware/cspell</summary> ### [`v6.26.3`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/CHANGELOG.md#​6263-2023-02-16) [Compare Source](https://togithub.com/streetsidesoftware/cspell/compare/v6.26.2...v6.26.3) ##### Bug Fixes - Be able to read cache format from config ([#​4190](https://togithub.com/streetsidesoftware/cspell/issues/4190)) ([6029893](https://togithub.com/streetsidesoftware/cspell/commit/60298938cd39669982ad1ca4293571242918761d)) ### [`v6.26.2`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/CHANGELOG.md#​6262-2023-02-16) [Compare Source](https://togithub.com/streetsidesoftware/cspell/compare/v6.26.1...v6.26.2) ##### Bug Fixes - `node:worker_threads` breaks on node 14 ([#​4185](https://togithub.com/streetsidesoftware/cspell/issues/4185)) ([8654ac7](https://togithub.com/streetsidesoftware/cspell/commit/8654ac7161b0ac558e864cfc116a9ad9ce6dc32e)) ### [`v6.26.1`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/CHANGELOG.md#​6261-2023-02-15) [Compare Source](https://togithub.com/streetsidesoftware/cspell/compare/v6.26.0...v6.26.1) ##### Bug Fixes - improve Dynamic Import README.md ([#​4178](https://togithub.com/streetsidesoftware/cspell/issues/4178)) ([4ad1133](https://togithub.com/streetsidesoftware/cspell/commit/4ad1133e6230969e9486d7e7a158cba5c3d75d7f)) ### [`v6.26.0`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/CHANGELOG.md#​6260-2023-02-15) [Compare Source](https://togithub.com/streetsidesoftware/cspell/compare/v6.25.0...v6.26.0) ##### Features - All `flagWords` and `suggestWords` suggestions are preferred. ([#​4176](https://togithub.com/streetsidesoftware/cspell/issues/4176)) ([abfb09c](https://togithub.com/streetsidesoftware/cspell/commit/abfb09c1fefe0b17aae332a23bb79017496c416a)) ### [`v6.25.0`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/CHANGELOG.md#​6250-2023-02-14) [Compare Source](https://togithub.com/streetsidesoftware/cspell/compare/v6.24.0...v6.25.0) ##### Bug Fixes - Add `.webm` to know file types ([#​4171](https://togithub.com/streetsidesoftware/cspell/issues/4171)) ([eeb9497](https://togithub.com/streetsidesoftware/cspell/commit/eeb9497143aa2215d857c8a872b94362c1ffe19e)) ### [`v6.24.0`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/CHANGELOG.md#​6240-2023-02-13) [Compare Source](https://togithub.com/streetsidesoftware/cspell/compare/v6.23.1...v6.24.0) **Note:** Version bump only for package cspell-monorepo #### 6.23.1 (2023-02-12) **Note:** Version bump only for package cspell-monorepo ### [`v6.23.1`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/CHANGELOG.md#​6231-2023-02-12) [Compare Source](https://togithub.com/streetsidesoftware/cspell/compare/v6.23.0...v6.23.1) **Note:** Version bump only for package cspell-monorepo ### [`v6.23.0`](https://togithub.com/streetsidesoftware/cspell/blob/HEAD/CHANGELOG.md#​6230-2023-02-11) [Compare Source](https://togithub.com/streetsidesoftware/cspell/compare/v6.22.0...v6.23.0) **Note:** Version bump only for package cspell-monorepo </details> <details> <summary>eslint/eslint</summary> ### [`v8.34.0`](https://togithub.com/eslint/eslint/releases/tag/v8.34.0) [Compare Source](https://togithub.com/eslint/eslint/compare/v8.33.0...v8.34.0) #### Features - [`9b2fcf7`](https://togithub.com/eslint/eslint/commit/9b2fcf7e928fc92ac6d43617bdee1bda250b7491) feat: `array-callback-return` supports `Array.prototype.toSorted` ([#​16845](https://togithub.com/eslint/eslint/issues/16845)) (SUZUKI Sosuke) #### Bug Fixes - [`923f61d`](https://togithub.com/eslint/eslint/commit/923f61d8fc82d83b912c6ba95abb5a509c4d7b52) fix: false positive with assignment in `no-extra-parens` ([#​16872](https://togithub.com/eslint/eslint/issues/16872)) (Francesco Trotta) #### Documentation - [`f0a9883`](https://togithub.com/eslint/eslint/commit/f0a988384ea1a262150e70d83abd8a5e50c46fa7) docs: split rules documentation ([#​16797](https://togithub.com/eslint/eslint/issues/16797)) (Ben Perlmutter) - [`67aa37b`](https://togithub.com/eslint/eslint/commit/67aa37b583f059226b9c959672400f04ed6a56b5) docs: fix typo in command-line-interface.md ([#​16871](https://togithub.com/eslint/eslint/issues/16871)) (Kevin Rouchut) - [`337f7ed`](https://togithub.com/eslint/eslint/commit/337f7ed96131d873be7ae6b010739476d0ad15e9) docs: fix width of language input ([#​16849](https://togithub.com/eslint/eslint/issues/16849)) (Tanuj Kanti) - [`71349a1`](https://togithub.com/eslint/eslint/commit/71349a1f709baa361bd656a7ce4a7d35d857a9a8) docs: Configure a Parser page ([#​16803](https://togithub.com/eslint/eslint/issues/16803)) (Ben Perlmutter) - [`de7e925`](https://togithub.com/eslint/eslint/commit/de7e925d03764f3681269b30bb60b92ee463c10f) docs: remove extra line numbers in example ([#​16848](https://togithub.com/eslint/eslint/issues/16848)) (jonz94) - [`ad38d77`](https://togithub.com/eslint/eslint/commit/ad38d77102d6fe30cfa92c831174f178bb35c88b) docs: Update README (GitHub Actions Bot) #### Chores - [`9dbe06d`](https://togithub.com/eslint/eslint/commit/9dbe06d0ad875e6d5964497e2975e8d789e763d0) chore: add `type` property to array-element-newline schema ([#​16877](https://togithub.com/eslint/eslint/issues/16877)) (MHO) - [`a061527`](https://togithub.com/eslint/eslint/commit/a061527a0332f0edf559acfc2902a327cae098d9) chore: Remove unused functions ([#​16868](https://togithub.com/eslint/eslint/issues/16868)) (Nicholas C. Zakas) </details> <details> <summary>facebook/jest</summary> ### [`v29.4.3`](https://togithub.com/facebook/jest/blob/HEAD/CHANGELOG.md#​2943) [Compare Source](https://togithub.com/facebook/jest/compare/v29.4.2...v29.4.3) ##### Features - `[expect]` Update `toThrow()` to be able to use error `cause`s ([#​13606](https://togithub.com/facebook/jest/pull/13606)) - `[jest-core]` allow to use `workerIdleMemoryLimit` with only 1 worker or `runInBand` option ([#​13846](https://togithub.com/facebook/jest/pull/13846)) - `[jest-message-util]` Add support for [error `cause`s](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause) ([#​13868](https://togithub.com/facebook/jest/pull/13868) & [#​13912](https://togithub.com/facebook/jest/pull/13912)) - `[jest-runtime]` Revert `import assertions` for JSON modules as it's been relegated to Stage 2 ([#​13911](https://togithub.com/facebook/jest/pull/13911)) ##### Fixes - `[@jest/expect-utils]` `subsetEquality` should consider also an object's inherited string keys ([#​13824](https://togithub.com/facebook/jest/pull/13824)) - `[jest-mock]` Clear mock state when `jest.restoreAllMocks()` is called ([#​13867](https://togithub.com/facebook/jest/pull/13867)) - `[jest-mock]` Prevent `mockImplementationOnce` and `mockReturnValueOnce` bleeding into `withImplementation` ([#​13888](https://togithub.com/facebook/jest/pull/13888)) - `[jest-mock]` Do not restore mocks when `jest.resetAllMocks()` is called ([#​13866](https://togithub.com/facebook/jest/pull/13866)) </details> <details> <summary>nodejs/node</summary> ### [`v18.14.1`](https://togithub.com/nodejs/node/releases/tag/v18.14.1): 2023-02-16, Version 18.14.1 'Hydrogen' (LTS), @​RafaelGSS prepared by @​juanarbol [Compare Source](https://togithub.com/nodejs/node/compare/v18.14.0...v18.14.1) This is a security release. ##### Notable Changes The following CVEs are fixed in this release: - **[CVE-2023-23918](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23918)**: Node.js Permissions policies can be bypassed via process.mainModule (High) - **[CVE-2023-23919](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23919)**: Node.js OpenSSL error handling issues in nodejs crypto library (Medium) - **[CVE-2023-23936](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23936)**: Fetch API in Node.js did not protect against CRLF injection in host headers (Medium) - **[CVE-2023-24807](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-24807)**: Regular Expression Denial of Service in Headers in Node.js fetch API (Low) - **[CVE-2023-23920](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-23920)**: Node.js insecure loading of ICU data through ICU_DATA environment variable (Low) More detailed information on each of the vulnerabilities can be found in [February 2023 Security Releases](https://nodejs.org/en/blog/vulnerability/february-2023-security-releases/) blog post. This security release includes OpenSSL security updates as outlined in the recent [OpenSSL security advisory](https://www.openssl.org/news/secadv/20230207.txt). ##### Commits - \[[`8393ebc72d`](https://togithub.com/nodejs/node/commit/8393ebc72d)] - **build**: build ICU with ICU_NO_USER_DATA_OVERRIDE (RafaelGSS) [nodejs-private/node-private#​379](https://togithub.com/nodejs-private/node-private/pull/379) - \[[`004e34d046`](https://togithub.com/nodejs/node/commit/004e34d046)] - **crypto**: clear OpenSSL error on invalid ca cert (RafaelGSS) [#​46572](https://togithub.com/nodejs/node/pull/46572) - \[[`5e0142a852`](https://togithub.com/nodejs/node/commit/5e0142a852)] - **deps**: cherry-pick Windows ARM64 fix for openssl (Richard Lau) [#​46572](https://togithub.com/nodejs/node/pull/46572) - \[[`f71fe278a6`](https://togithub.com/nodejs/node/commit/f71fe278a6)] - **deps**: update archs files for quictls/openssl-3.0.8+quic (RafaelGSS) [#​46572](https://togithub.com/nodejs/node/pull/46572) - \[[`2c6817e42b`](https://togithub.com/nodejs/node/commit/2c6817e42b)] - **deps**: upgrade openssl sources to quictls/openssl-3.0.8+quic (RafaelGSS) [#​46572](https://togithub.com/nodejs/node/pull/46572) - \[[`f0afa0bfe5`](https://togithub.com/nodejs/node/commit/f0afa0bfe5)] - **deps**: update undici to 5.19.1 (Node.js GitHub Bot) [#​46634](https://togithub.com/nodejs/node/pull/46634) - \[[`c26a34c13e`](https://togithub.com/nodejs/node/commit/c26a34c13e)] - **deps**: update undici to 5.18.0 (Node.js GitHub Bot) [#​46634](https://togithub.com/nodejs/node/pull/46634) - \[[`db93ee4a15`](https://togithub.com/nodejs/node/commit/db93ee4a15)] - **deps**: update undici to 5.17.1 (Node.js GitHub Bot) [#​46634](https://togithub.com/nodejs/node/pull/46634) - \[[`b4e49fb02c`](https://togithub.com/nodejs/node/commit/b4e49fb02c)] - **deps**: update undici to 5.16.0 (Node.js GitHub Bot) [#​46634](https://togithub.com/nodejs/node/pull/46634) - \[[`90994e6a2c`](https://togithub.com/nodejs/node/commit/90994e6a2c)] - **deps**: update undici to 5.15.1 (Node.js GitHub Bot) [#​46634](https://togithub.com/nodejs/node/pull/46634) - \[[`00302fc7ac`](https://togithub.com/nodejs/node/commit/00302fc7ac)] - **deps**: update undici to 5.15.0 (Node.js GitHub Bot) [#​46634](https://togithub.com/nodejs/node/pull/46634) - \[[`0e3b796cc5`](https://togithub.com/nodejs/node/commit/0e3b796cc5)] - **lib**: makeRequireFunction patch when experimental policy (RafaelGSS) [nodejs-private/node-private#​371](https://togithub.com/nodejs-private/node-private/pull/371) - \[[`7cccd5565f`](https://togithub.com/nodejs/node/commit/7cccd5565f)] - **policy**: makeRequireFunction on mainModule.require (RafaelGSS) [nodejs-private/node-private#​371](https://togithub.com/nodejs-private/node-private/pull/371) </details> <details> <summary>npm/cli</summary> ### [`v9.5.0`](https://togithub.com/npm/cli/blob/HEAD/CHANGELOG.md#​950-httpsgithubcomnpmclicomparev942v950-2023-02-14) [Compare Source](https://togithub.com/npm/cli/compare/v9.4.2...v9.5.0) ##### Features - [`79bfd03`](https://togithub.com/npm/cli/commit/79bfd03947a25f4bfb67d1c54893be7c79ec77e2) [#​6153](https://togithub.com/npm/cli/pull/6153) audit signatures verifies attestations ([@​feelepxyz](https://togithub.com/feelepxyz)) - [`5fc6473`](https://togithub.com/npm/cli/commit/5fc647316cdc07d4337cdf1b75f73a0663822c7f) add provenance attestation ([@​bdehamer](https://togithub.com/bdehamer)) ##### Bug Fixes - [`53f75a4`](https://togithub.com/npm/cli/commit/53f75a4faeac02b97cfac91309a7f9f4efe553a0) [#​6158](https://togithub.com/npm/cli/pull/6158) gracefully fallback from auth-type=web ([#​6158](https://togithub.com/npm/cli/issues/6158)) ([@​MylesBorins](https://togithub.com/MylesBorins)) - [`ed59aae`](https://togithub.com/npm/cli/commit/ed59aae51cc55f57ee32d43e898ef05236005a09) [#​6162](https://togithub.com/npm/cli/pull/6162) refactor error reporting in audit command ([@​bdehamer](https://togithub.com/bdehamer)) ##### Dependencies - [`fad0473`](https://togithub.com/npm/cli/commit/fad04737d7b0d1e3a8cd3d3a651e90db6b185f7b) `minipass@4.0.3` - [`678c6bf`](https://togithub.com/npm/cli/commit/678c6bf716012fd834c06644ed1a82e10a5393ad) `minimatch@6.2.0` - [`9b4b366`](https://togithub.com/npm/cli/commit/9b4b366af5dac21b6db5d722d30b7e1fff064600) `ci-info@3.8.0` - [`d20ee2a`](https://togithub.com/npm/cli/commit/d20ee2afa0b9c97ed6822cb8e6838ba537dd76a9) `pacote@15.1.0` - [Workspace](https://togithub.com/npm/cli/releases/tag/libnpmpublish-v7.1.0): `libnpmpublish@7.1.0` - [Workspace](https://togithub.com/npm/cli/releases/tag/libnpmteam-v5.0.3): `libnpmteam@5.0.3` </details> <details> <summary>rollup/rollup</summary> ### [`v3.15.0`](https://togithub.com/rollup/rollup/blob/HEAD/CHANGELOG.md#​3150) [Compare Source](https://togithub.com/rollup/rollup/compare/v3.14.0...v3.15.0) *2023-02-10* ##### Features - Do not consider instantiating a constructor a side effect if it adds properties to "this" and is instantiated elsewhere ([#​4842](https://togithub.com/rollup/rollup/issues/4842)) ##### Bug Fixes - Improve side effect detection in constructors ([#​4842](https://togithub.com/rollup/rollup/issues/4842)) ##### Pull Requests - [#​4842](https://togithub.com/rollup/rollup/pull/4842): fix: add this option to context.ignore ([@​TrickyPi](https://togithub.com/TrickyPi)) - [#​4843](https://togithub.com/rollup/rollup/pull/4843): fixed the logo link ([@​oMatheuss](https://togithub.com/oMatheuss)) - [#​4844](https://togithub.com/rollup/rollup/pull/4844): Update index.md ([@​cunzaizhuyi](https://togithub.com/cunzaizhuyi)) - [#​4845](https://togithub.com/rollup/rollup/pull/4845): docs: fix style ([@​TrickyPi](https://togithub.com/TrickyPi)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/apollographql/apollo-server). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC4xNDIuMSIsInVwZGF0ZWRJblZlciI6IjM0LjE0Mi4xIn0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
With
@interfaceObject
, some queries can sometimes be entirely fullfilled by a sugraph using the@interfaceObject
(when only fields provided by that subgraph are queried and the query does not necessitate knowledge of the underlying implementation type as neither__typename
is queried, nor is there any type condition). But the post-processing that the gateway does on the internal results to compute the final response was currently using GraphQL-js execution, and this was breaking in those cases because we get results for what is an interface in the supergraph but with no __typename.Additionally, using GraphQL-js execution for this post-processing has long been a "FIXME" of the code, as this is a heavy-handed way to do this processing.
This patch rewrite this post-processing to stop using GraphQL-js execution and instead implements the subset of what is truly necessary for that post-processing. Doing so allows to ensure that the code work as needed with the
@interfaceObject
cases mentioned above.Fixes #2320