Skip to content
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

Merged
merged 1 commit into from
Jan 18, 2023

Conversation

pcmanus
Copy link
Contributor

@pcmanus pcmanus commented Jan 13, 2023

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

@netlify
Copy link

netlify bot commented Jan 13, 2023

👷 Deploy request for apollo-federation-docs pending review.

Visit the deploys page to approve it

Name Link
🔨 Latest commit 8ec14ed

@changeset-bot
Copy link

changeset-bot bot commented Jan 13, 2023

🦋 Changeset detected

Latest commit: 8ec14ed

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 7 packages
Name Type
@apollo/composition Patch
apollo-federation-integration-testsuite Patch
@apollo/gateway Patch
@apollo/federation-internals Patch
@apollo/query-graphs Patch
@apollo/query-planner Patch
@apollo/subgraph Patch

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

@codesandbox-ci
Copy link

codesandbox-ci bot commented Jan 13, 2023

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(`
Copy link
Contributor Author

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(`
Copy link
Contributor Author

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,
Copy link
Contributor Author

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.

@@ -559,9 +556,7 @@ export class ApolloGateway implements GatewayInterface {
): void {
this.queryPlanStore.clear();
this.apiSchema = coreSchema.toAPISchema();
this.schema = addExtensions(
wrapSchemaWithAliasResolver(this.apiSchema.toGraphQLJSSchema()),
Copy link
Contributor Author

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.

@pcmanus pcmanus added this to the 2.3.0 milestone Jan 16, 2023
@pcmanus pcmanus self-assigned this Jan 16, 2023
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
renovate bot referenced this pull request in apollographql/apollo-server Feb 17, 2023
[![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#&#8203;378)

[Compare
Source](https://togithub.com/apollographql/apollo-client/compare/v3.7.7...v3.7.8)

##### Patch Changes

-
[#&#8203;7555](https://togithub.com/apollographql/apollo-client/pull/7555)
[`45562d6fa`](https://togithub.com/apollographql/apollo-client/commit/45562d6fa20eab658bd86d79d092862ace4e1225)
Thanks [@&#8203;TheCeloReis](https://togithub.com/TheCeloReis)! - Adds
`TVariables` generic to `GraphQLRequest` and `MockedResponse`
interfaces.

-
[#&#8203;10526](https://togithub.com/apollographql/apollo-client/pull/10526)
[`1d13de4f1`](https://togithub.com/apollographql/apollo-client/commit/1d13de4f190150e96d61a9e987274ee6c249dbef)
Thanks [@&#8203;benjamn](https://togithub.com/benjamn)! - Tolerate
undefined `concast.sources` if `complete` called earlier than
`concast.start`

-
[#&#8203;10497](https://togithub.com/apollographql/apollo-client/pull/10497)
[`8a883d8a1`](https://togithub.com/apollographql/apollo-client/commit/8a883d8a1c8899f94a3e2ae09cb2069bde2b2150)
Thanks [@&#8203;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 (@&#8203;apollo/gateway)</summary>

###
[`v2.3.2`](https://togithub.com/apollographql/federation/blob/HEAD/gateway-js/CHANGELOG.md#&#8203;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
([#&#8203;2380](https://togithub.com/apollographql/federation/pull/2380))


\[https://github.com/apollographql/federation/pull/2335](https://togithub.com/apollographql/federation/pull/2335)5]\(PR
[#&#8203;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
[#&#8203;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 \[]:
-
[@&#8203;apollo/composition](https://togithub.com/apollo/composition)[@&#8203;2](https://togithub.com/2).3.2
-
[@&#8203;apollo/federation-internals](https://togithub.com/apollo/federation-internals)[@&#8203;2](https://togithub.com/2).3.2
-
[@&#8203;apollo/query-planner](https://togithub.com/apollo/query-planner)[@&#8203;2](https://togithub.com/2).3.2

</details>

<details>
<summary>apollographql/federation (@&#8203;apollo/subgraph)</summary>

###
[`v2.3.2`](https://togithub.com/apollographql/federation/blob/HEAD/subgraph-js/CHANGELOG.md#&#8203;232)

[Compare
Source](https://togithub.com/apollographql/federation/compare/@apollo/subgraph@2.3.1...@apollo/subgraph@2.3.2)

##### Patch Changes

-   Updated dependencies \[]:
-
[@&#8203;apollo/federation-internals](https://togithub.com/apollo/federation-internals)[@&#8203;2](https://togithub.com/2).3.2

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/eslint-plugin)</summary>

###
[`v5.52.0`](https://togithub.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#&#8203;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
([#&#8203;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
([#&#8203;6432](https://togithub.com/typescript-eslint/typescript-eslint/issues/6432))
([e1d9c67](https://togithub.com/typescript-eslint/typescript-eslint/commit/e1d9c67981be53e091a4107f326b9bf097650c1f)),
closes
[#&#8203;5255](https://togithub.com/typescript-eslint/typescript-eslint/issues/5255)
- **eslint-plugin:** \[no-unnecessary-condition] fix false positive when
checking indexed access types
([#&#8203;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
([#&#8203;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
([#&#8203;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
([#&#8203;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
([#&#8203;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
(@&#8203;typescript-eslint/parser)</summary>

###
[`v5.52.0`](https://togithub.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#&#8203;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
[@&#8203;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#&#8203;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
([#&#8203;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#&#8203;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
([#&#8203;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#&#8203;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
([#&#8203;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#&#8203;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.
([#&#8203;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#&#8203;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
([#&#8203;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#&#8203;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#&#8203;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#&#8203;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`
([#&#8203;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`
([#&#8203;16872](https://togithub.com/eslint/eslint/issues/16872))
(Francesco Trotta)

#### Documentation

-
[`f0a9883`](https://togithub.com/eslint/eslint/commit/f0a988384ea1a262150e70d83abd8a5e50c46fa7)
docs: split rules documentation
([#&#8203;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
([#&#8203;16871](https://togithub.com/eslint/eslint/issues/16871))
(Kevin Rouchut)
-
[`337f7ed`](https://togithub.com/eslint/eslint/commit/337f7ed96131d873be7ae6b010739476d0ad15e9)
docs: fix width of language input
([#&#8203;16849](https://togithub.com/eslint/eslint/issues/16849))
(Tanuj Kanti)
-
[`71349a1`](https://togithub.com/eslint/eslint/commit/71349a1f709baa361bd656a7ce4a7d35d857a9a8)
docs: Configure a Parser page
([#&#8203;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
([#&#8203;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
([#&#8203;16877](https://togithub.com/eslint/eslint/issues/16877)) (MHO)
-
[`a061527`](https://togithub.com/eslint/eslint/commit/a061527a0332f0edf559acfc2902a327cae098d9)
chore: Remove unused functions
([#&#8203;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#&#8203;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
([#&#8203;13606](https://togithub.com/facebook/jest/pull/13606))
- `[jest-core]` allow to use `workerIdleMemoryLimit` with only 1 worker
or `runInBand` option
([#&#8203;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)
([#&#8203;13868](https://togithub.com/facebook/jest/pull/13868) &
[#&#8203;13912](https://togithub.com/facebook/jest/pull/13912))
- `[jest-runtime]` Revert `import assertions` for JSON modules as it's
been relegated to Stage 2
([#&#8203;13911](https://togithub.com/facebook/jest/pull/13911))

##### Fixes

- `[@jest/expect-utils]` `subsetEquality` should consider also an
object's inherited string keys
([#&#8203;13824](https://togithub.com/facebook/jest/pull/13824))
- `[jest-mock]` Clear mock state when `jest.restoreAllMocks()` is called
([#&#8203;13867](https://togithub.com/facebook/jest/pull/13867))
- `[jest-mock]` Prevent `mockImplementationOnce` and
`mockReturnValueOnce` bleeding into `withImplementation`
([#&#8203;13888](https://togithub.com/facebook/jest/pull/13888))
- `[jest-mock]` Do not restore mocks when `jest.resetAllMocks()` is
called ([#&#8203;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 &#x27;Hydrogen&#x27; (LTS),
@&#8203;RafaelGSS prepared by @&#8203;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#&#8203;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)
[#&#8203;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)
[#&#8203;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) [#&#8203;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) [#&#8203;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)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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)
[#&#8203;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#&#8203;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#&#8203;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#&#8203;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)
[#&#8203;6153](https://togithub.com/npm/cli/pull/6153) audit signatures
verifies attestations
([@&#8203;feelepxyz](https://togithub.com/feelepxyz))
-
[`5fc6473`](https://togithub.com/npm/cli/commit/5fc647316cdc07d4337cdf1b75f73a0663822c7f)
add provenance attestation
([@&#8203;bdehamer](https://togithub.com/bdehamer))

##### Bug Fixes

-
[`53f75a4`](https://togithub.com/npm/cli/commit/53f75a4faeac02b97cfac91309a7f9f4efe553a0)
[#&#8203;6158](https://togithub.com/npm/cli/pull/6158) gracefully
fallback from auth-type=web
([#&#8203;6158](https://togithub.com/npm/cli/issues/6158))
([@&#8203;MylesBorins](https://togithub.com/MylesBorins))
-
[`ed59aae`](https://togithub.com/npm/cli/commit/ed59aae51cc55f57ee32d43e898ef05236005a09)
[#&#8203;6162](https://togithub.com/npm/cli/pull/6162) refactor error
reporting in audit command
([@&#8203;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#&#8203;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
([#&#8203;4842](https://togithub.com/rollup/rollup/issues/4842))

##### Bug Fixes

- Improve side effect detection in constructors
([#&#8203;4842](https://togithub.com/rollup/rollup/issues/4842))

##### Pull Requests

- [#&#8203;4842](https://togithub.com/rollup/rollup/pull/4842): fix: add
this option to context.ignore
([@&#8203;TrickyPi](https://togithub.com/TrickyPi))
- [#&#8203;4843](https://togithub.com/rollup/rollup/pull/4843): fixed
the logo link ([@&#8203;oMatheuss](https://togithub.com/oMatheuss))
- [#&#8203;4844](https://togithub.com/rollup/rollup/pull/4844): Update
index.md ([@&#8203;cunzaizhuyi](https://togithub.com/cunzaizhuyi))
- [#&#8203;4845](https://togithub.com/rollup/rollup/pull/4845): docs:
fix style ([@&#8203;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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Issue with gateway post-processing for @interfaceObject results
2 participants