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

Returning null from reference resolver results in "non-nullable field" error for nullable object #2374

Closed
jfairley opened this issue Feb 4, 2023 · 5 comments · Fixed by #2380

Comments

@jfairley
Copy link

jfairley commented Feb 4, 2023

Starting with @apollo/gateway: 2.3.0, returning null from a __resolveReference adds an error to the graphql response even when the type is declared to be nullable in the relevant subgraph.

I've included a query and the error response.

Further down, I've included snippets of source code. Notably, notice that the field resolver for "boundary" declares it to be nullable.

click to see query and error
query SearchGeoMetrics(
  ...
) {
  searchGeoMetrics(
    ...
  ) {
    value {
      boundary {
        featureId
        layer
      }
    }
  }
}
    {
      "message": "Cannot return null for non-nullable field MapboxBoundary.featureId.",
      "path": [
        "searchGeoMetrics",
        53,
        "value",
        "boundary",
        "featureId"
      ],
      "extensions": {
        "code": "INVALID_GRAPHQL",
        "exception": {
          "stacktrace": [
            "GraphQLError: Cannot return null for non-nullable field MapboxBoundary.featureId.",
            "    at Object.err (/usr/src/app/node_modules/@apollo/federation-internals/dist/error.js:11:32)",
            "    at updateOutputValue (/usr/src/app/node_modules/@apollo/gateway/dist/resultShaping.js:159:86)",
            "    at applySelectionSet (/usr/src/app/node_modules/@apollo/gateway/dist/resultShaping.js:99:44)",
            "    at applySelectionSet (/usr/src/app/node_modules/@apollo/gateway/dist/resultShaping.js:119:29)",
            "    at updateOutputValue (/usr/src/app/node_modules/@apollo/gateway/dist/resultShaping.js:209:21)",
            "    at applySelectionSet (/usr/src/app/node_modules/@apollo/gateway/dist/resultShaping.js:99:44)",
            "    at applySelectionSet (/usr/src/app/node_modules/@apollo/gateway/dist/resultShaping.js:119:29)",
            "    at updateOutputValue (/usr/src/app/node_modules/@apollo/gateway/dist/resultShaping.js:209:21)",
            "    at updateOutputValue (/usr/src/app/node_modules/@apollo/gateway/dist/resultShaping.js:148:40)",
            "    at applySelectionSet (/usr/src/app/node_modules/@apollo/gateway/dist/resultShaping.js:99:44)",
            "    at updateOutputValue (/usr/src/app/node_modules/@apollo/gateway/dist/resultShaping.js:209:21)",
            "    at updateOutputValue (/usr/src/app/node_modules/@apollo/gateway/dist/resultShaping.js:148:40)",
            "    at /usr/src/app/node_modules/@apollo/gateway/dist/resultShaping.js:177:25",
            "    at Array.map (<anonymous>)",
            "    at updateOutputValue (/usr/src/app/node_modules/@apollo/gateway/dist/resultShaping.js:175:41)",
            "    at updateOutputValue (/usr/src/app/node_modules/@apollo/gateway/dist/resultShaping.js:148:40)"
          ]
        }
      }
    },

Expected vs Actual

Expected Behavior

Graph shows null in response with no "errors".

Works this way with "@apollo/gateway": "2.2.2".

Actual Behavior

Graph shows null in response with "errors".

Works this way with "@apollo/gateway": "2.3.0".

Sample Code

My code examples are based on code-first federation using NestJS, but the issue clearly appears upon an upgrade to @apollo/gateway 2.3.0.

click to expand

subgraph 1 (using "@apollo/subgraph": "2.3.0"

MapboxBoundaryType (resolvable)

@ObjectType("MapboxBoundary")
@Directive('@key(fields: "city region country zipcode")')
@Directive('@key(fields: "featureId")')
export class MapboxBoundaryType extends MapboxBoundaryDTO {
  @Field()
  name: string;

  @Field()
  fullyQualifiedName: string;

  @Field((type) => MapboxBoundaryLayerEnum)
  layer: MapboxBoundaryDTO.LayerEnum;

  @Field()
  layerLabel: string;

  @Field()
  type: string;

  @Field()
  level: number;

  @Field()
  polyTilesetName: string;

  @Field()
  polyLayerName: string;

  @Field()
  featureId: string;

  @Field({ nullable: true })
  zipcode?: string;

  // Below fields exist solely for ApolloFederation
  @Field((type) => String, { nullable: true, deprecationReason: "field exists solely for ApolloFederation" })
  city?: Nullable<string>;

  @Field({ nullable: true, deprecationReason: "field exists solely for ApolloFederation" })
  region?: string;

  @Field({ nullable: true, deprecationReason: "field exists solely for ApolloFederation" })
  country?: string;
}

Reference resolver

  @ResolveReference()
  async resolveReference(ref: MapboxBoundaryTypeReference): Promise<Nilable<MapboxBoundaryType>> {
	// here, we search for data
    // this could return null (technically, a promise that resolves to null)
  }

subgraph 2 (using "@apollo/subgraph": "2.3.0")

MapboxBoundaryType (unresolvable)

@ObjectType("MapboxBoundary")
@Directive('@key(fields: "city region country zipcode", resolvable: false)')
export class MapboxBoundaryType {
  @Field((type) => String, { nullable: true })
  city?: Nullable<string>;

  @Field({ nullable: true })
  region?: string;

  @Field({ nullable: true })
  country?: string;

  @Field({ nullable: true })
  zipcode?: string;
}

field resolver

    @ResolveField(() => MapboxBoundaryType, { nullable: true })
    boundary(@Parent() { city, region, country, zip }: T): MapboxBoundaryType {
      return { city, region, country, zipcode: zip ?? undefined };
    }
@spencersteers
Copy link

Seeing the same thing in "@apollo/gateway": "2.3.1".

pcmanus pushed a commit to pcmanus/federation that referenced this issue Feb 7, 2023
This align with what the router does, and allow to include
post-processing error messages in the response without generating
errors we weren't before and thus avoids backward compatibility
headaches.

Fixes apollographql#2374.
pcmanus pushed a commit to pcmanus/federation that referenced this issue Feb 7, 2023
This align with what the router does, and allow to include
post-processing error messages in the response without generating
errors we weren't before and thus avoids backward compatibility
headaches.

Fixes apollographql#2374.
@pcmanus
Copy link
Contributor

pcmanus commented Feb 7, 2023

The short answer is that the change was kind of on purpose, but I didn't fully realized the concrete consequence of it. And I agree it's not great so I've created #2380 which (more or less) remove the error (more or less because in practice the error is moved into the response "extensions"; read on for the reasoning behind that).

As for the longer answer, let me explain what's happening here, both for posterity and because that could be useful. As in fact, the error here is kind of correct, and to some extent it was previous versions that were incorrect of not including it.

If you look at the error message, the issue is in fact not about boundary being null. The problem is with MapboxBoundary.featureId, which is non-nullable, and the error is meant to explain why boundary ends null in the response.

In particular, the reason that boundary is null in the response is not due the fact that the first subgraph resolveReference returns null, at least not directly. In fact, if you were to make the featureId and layer fields nullable, then that same query with the same resolvers (still returning null) would not return boundary: null anymore. It would return a boundary object populated with its key fields (city, region, country and zipcode) and with both featureId and layer set to null.

What is happening inside of the gateway is that the 2nd subgraph is first queried and return some boundary object with its key fields. Then, the 1st is queried using that key. But when that 1st subgraph returns null (due to the resolveReference return value), the actual behaviour of the gateway is to "ignore" that response (not to set boundary to null in particular). And so internally, boundary is still the object from the initial fetch to the 2nd subgraph. This is why, if featureId and layer were nullable, you would just get that object back.

But featureId is non-nullable, and so it would be invalid to send back as response a boundary object where featureId is null. As such, the gateway (at least the 2.3 version) just follows the GraphQL spec: it adds an error to the response and propagates the null to the parent field. That parent field is boundary, which is nullable, and so the propagation stops there and that is why the response ultimately has boundary: null (and an error that explains that it is null due to "bubbling up" the nullability error on featureId).

So, technically speaking, it is more spec compliant to have an error than to not have it. And the reason previous versions of the gateway weren't including the error was that, for some historical reasons, errors generated during the processing of the final response (as the one here) were never included in said response. Meaning that a whole class of errors (any errors resulting of the post-processing of subgraph responses) was silently swallowing by the gateway. The intent of 2.3 was to fix that.

But with all that said, I do understand why the prior behaviour of not having any error in this particular case was actually convenient: it ended up behaving "as if" returning null from the 1st subgraph resolveReference allowed to make the entity null in the response and I can see how one would want that.

And so, long story short, we're going to revert the change of including "post-processing errors" in the response errors, at least for now. We're just not going to fully revert to completely swallowing those errors, because while in this specific case those errors may feel undesirable, there is plenty of other case where other kinds of post-propcessing errors are genuinely a big help for debugging issues, so we'd like to surface them somehow.

And so the attached PR puts those "post-processing errors" into the response "extensions" (under response.extensions, not response.errors), which as it happens is also what the Apollo router already does. That way, those errors will not show up as errors in any client/tooling.

I hope this will solve your issue.

@spencersteers
Copy link

@pcmanus Thanks for the quick turnaround. I had a feeling this was the underlying cause of the issue. Appreciate you taking the time to explain whats going on.

@jfairley
Copy link
Author

jfairley commented Feb 8, 2023

Thanks @pcmanus for the very thorough response. I see it is a sticky situation.

I like your proposed change, and I'll follow #2380 to see what comes of it.

pcmanus pushed a commit that referenced this issue Feb 8, 2023
This align with what the router does, and allow to include
post-processing error messages in the response without generating
errors we weren't before and thus avoids backward compatibility
headaches.

Fixes #2374.
@pcmanus
Copy link
Contributor

pcmanus commented Feb 8, 2023

For the record, we're going ahead with #2380 for now, which will be part of 2.3.2, but I do feel it's ultimately a bit of a hack (as explained above, this move all post-processing errors into response "extensions", and while it's strictly better that the older behaviour of not surfacing them at all, those error still ought to be "normal" errors in most cases). I think the underlying longer term issue is that we may be lacking flexibility in our rules around the handling of nullability: if there was a direct way for a subgraph to nullify an entity directly in the output, then one would be able to achieve the desired result here without having any error triggered internally. But how to improve that is a discussion for another time.

renovate bot added a commit to apollographql/apollo-server that referenced this issue 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))


\[apollographql/federation#2335
[#&#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
\[apollographql/federation#2374
[#&#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 a pull request may close this issue.

3 participants