Update Apollo GraphQL packages (major)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| @apollo/gateway | ^0.29.0 -> ^2.0.0 |
||||
| apollo-server | ^2.25.3 -> ^3.0.0 |
||||
| apollo-server | ^2.6.3 -> ^3.0.0 |
Release Notes
apollographql/federation
v2.4.0
Minor Changes
-
This change introduces a configurable query plan cache. This option allows (#2385) developers to provide their own query plan cache like so:
new ApolloGateway({ queryPlannerConfig: { cache: new MyCustomQueryPlanCache(), }, });The current default implementation is effectively as follows:
import { InMemoryLRUCache } from "@​apollo/utils.keyvaluecache"; const cache = new InMemoryLRUCache<string>({ maxSize: Math.pow(2, 20) * 30, sizeCalculation<T>(obj: T): number { return Buffer.byteLength(JSON.stringify(obj), "utf8"); }, });TypeScript users should implement the
QueryPlanCachetype which is now exported by@apollo/query-planner:import { QueryPlanCache } from '@​apollo/query-planner'; class MyCustomQueryPlanCache implements QueryPlanCache { // ... } -
Adds debug/testing query planner options (
debug.bypassPlannerForSingleSubgraph) to bypass the query planning (#2441) process for federated supergraph having only a single subgraph. The option is disabled by default, is not recommended for production, and is not supported (it may be removed later). It is meant for debugging/testing purposes.
Patch Changes
-
Refactor the internal implementation of selection sets used by the query planner to decrease the code complexity and (#2387) improve query plan generation performance in many cases.
-
Optimises query plan generation for parts of queries that can statically be known to not cross across subgraphs (#2449)
-
Updated dependencies [
260c357c,7bc0f8e8,d4426ff9,a9385bdb,1a555d98,ade7ceb8,09382e74,cab383b2]:
v2.3.5
Patch Changes
- Updated dependencies [
09382e74]:
v2.3.4
Patch Changes
-
Handle defaulted variables correctly during post-processing. (#2443)
Users who tried to use built-in conditional directives (skip/include) with defaulted variables and no variable provided would encounter an error thrown by operation post-processing saying that the variables weren't provided. The defaulted values went unaccounted for, so the operation would validate but then fail an assertion while resolving the conditional.
With this change, defaulted variable values are now collected and provided to post-processing (with defaults being overwritten by variables that are actually provided).
-
Updated dependencies [
6e2d24b5]:
v2.3.3
Patch Changes
-
Update @apollo/utils.logger typings dependency (#2269)
-
Exposes, for each subgraph request, the path in the overall gateway operation at which that subgraph request gets inserted. This path is now available as the pathInIncomingRequest field in the arguments of RemoteGraphQLDataSource.willSendRequest and RemoteGraphQLDataSource.didReceiveResponse. (#2384)
-
Previously the
queryPlanStoreKeywas a hash of the query concatenated with an unhashedoperationNameif it was present. This resulted in variable length cache keys that could become unnecessarily long, occupying additional space in the query plan cache. (#2310)This change incorporates the
operationNameinto the hash itself (ifoperationNameis present). -
Update @apollo/utils.createhash package, which drops support for node 12 (#2266)
-
Update @apollo/utils.isnodelike package, which dropped support for node 12 (#2268)
-
Update @apollo/utils.fetcher package, which drops support for node 12 (#2267)
-
Updated dependencies [
71a07f30]:
v2.3.2
Patch Changes
-
Move gateway post-processing errors from
errorsintoextensions.valueCompletionof the response (#2380)[https://github.com/apollographql/federation/pull/2335](https://togithub.com/apollographql/federation/pull/2335)5](PR #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), 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.valueCompletionobject in the response object.Gateway v2.3.0 and v2.3.1 are both affected by this change in behavior.
-
Updated dependencies []:
v2.3.1
Patch Changes
-
Capture non-ftv1 error information in metrics data. This (#2242) error information allows the inline trace plugin to correctly aggregate stats about errors (where no federated trace data is available) and stop reporting incomplete traces which are missing unavailable error information.
This PR is a precursor to apollographql/apollo-server#7136
-
Fix issue where the query planner was incorrectly not querying
__typenamein a subgraph fetch when@interfaceObjectis involved (#2366)
This CHANGELOG pertains only to Apollo Federation packages in the 2.x range. The Federation v0.x equivalent for this package can be found here on the version-0.x branch of this repo.
v2.3.0
- Fix unexpected composition error about
@shareablefield when@externalis on a type in a fed1 schema (one without@link) PR #2343. - Fix issue with some
@interfaceObjectqueries due to missing "input rewrites" PR #2346.
v2.2.3
- Fix possible assertion error during query planning PR #2299
- Fix potential issue with nested @defer in non-deferrable case PR #2312
v2.2.2
- Fix issue with path in query plan's deferred nodes PR #2281.
v2.2.1
- Fix federation spec always being expanded to the last version PR #2274.
v2.2.0
- BREAKING: Disable exposing full document to sub-query by default (introduced 2.1.0):
- This change decreases memory consumption in general (which is the reason for disabling this by
default), but users that have custom code making use of
GraphQLDataSourceProcessOptions.documentwill now need to explicitly setGatewayConfig.queryPlannerConfig.exposeDocumentNodeInFetchNode.
- This change decreases memory consumption in general (which is the reason for disabling this by
default), but users that have custom code making use of
- BREAKING: composition now rejects
@shareableon interface fields. The@shareabledirective is about controlling if multiple subgraphs can resolve a particular field, and as interface field are never directly resolved (it's their implementation that are), having@shareableon interface fields is not completely meaningful and was never meant to be supported. If an existing subgraph does have a@shareableon an interface field, this will now be rejected, but the@shareablecan simply and safely be removed since it previously was ignored. - Allows
@shareableto be repeatable so it can be allowed on both a type definition and its extensions PR #2175.- Note that this require the use of the new 2.2 version of the federation spec introduced in this change.
- Preserve default values of input object fields PR #2218.
- Drop support for node12 PR #2202
- Fix issue where QP was generating invalid plan missing some data #361.
- Avoid reusing named fragments that are invalid for the subgraph PR #2255.
- Fix QP not always type-exploding interface when necessary PR #2246.
- Fix potential QP issue with shareable root fields PR #2239.
- Correctly reject field names starting with
__PR #2237. - Fix error when a skipped enum value had directives applied PR #2232.
- Preserve default values of input object fields PR #2218.
v2.1.4
- Ensures supergraph
@defer/@streamdefinitions of supergraph are not included in the API schema PR #2212. - Optimize plan for defer where only keys are fetched PR #2182.
- Improves error message to help with misspelled source of an
@overridePR #2181. - Fix validation of variable on input field not taking default into account PR #2176.
v2.1.3
- Fix building subgraph selections using the wrong underlying schema PR #2155.
v2.1.2
- Allow fields with arguments in
@requiresPR #2120. - Fix potential inefficient planning due to
__typenamePR #2137. - Fix potential assertion during query planning PR #2133.
- Fix some defer query plans having invalid result sets (with empty branches) PR #2125.
- Fix defer information lost when cloning fetch group (resulting in non-deferred parts) PR #2129.
- Fix directives on fragment spread being lost PR #2126.
v2.1.1
- Fix build-time regression caused by #1970 (removal of @types/node-fetch from runtime dependencies) PR #2116
v2.1.0
- The method
RemoteGraphQLDataSource.errorFromResponsenow returns aGraphQLError(as defined bygraphql) rather than anApolloError(as defined byapollo-server-errors). PR #2028- BREAKING: If you call
RemoteGraphQLDataSource.errorFromResponsemanually and expect its return value to be a particular subclass ofGraphQLError, or if you expect the error received bydidEncounterErrorto be a particular subclass ofGraphQLError, then this change may affect you. We recommend checkingerror.extensions.codeinstead.
- BREAKING: If you call
- The
LocalGraphQLDataSourceclass no longer supports the undocumented__resolveObjectApollo Server feature. PR #2007- BREAKING: If you relied on the undocumented
__resolveObjectfeature withLocalGraphQLDataSource, it will no longer work. If this affects you, file an issue and we can help you find a workaround.
- BREAKING: If you relied on the undocumented
- Fix issue when using a type condition on an inaccessible type in
@require#1873.- BREAKING: this fix required passing a new argument to the
executeQueryPlanmethod, which is technically exported by the gateway. Most users of the gateway should not call this method directly (which is exported mainly for testing purposes in the first place) and will thus be unaffected, but if you do call this method directly, you will have to pass the new argument when upgrading. See the method documentation for details.
- BREAKING: this fix required passing a new argument to the
- Reject directive applications within
fieldsof@key,@providesand@requiresPR #1975.- BREAKING: previously, directive applications within a
@key,@providesor@requireswere parsed but not honored in any way. As this change reject such applications (at composition time), it could theoretically require to remove some existing (ignored) directive applications within a@key,@providesor@requires.
- BREAKING: previously, directive applications within a
- Fix issue where fragment expansion can erase applied directives (most notably
@defer) PR #2093. - Fix abnormally high memory usage when extracting subgraphs for some fed1 supergraphs (and small other memory footprint improvements) PR #2089.
- Fix issue with fragment reusing code something mistakenly re-expanding fragments PR #2098.
- Fix issue when type is only reachable through a @provides PR #2083.
- Fix case where some key field necessary to a
@requirefetch were not previously fetched PR #2075. - Add type definitions to schema extensions PR #2081
- Update peer dependency
graphqlto^16.5.0to useGraphQLErrorOptionsPR #2060 - Upgrade underlying
@apollo/utils.fetcherto support aborting a request. This is a type-only change, and will not impact the underlying runtime. PR #2017. - Some TypeScript types, such as the arguments and return value of
GraphQLDataSource.process, are defined using types from the@apollo/server-gateway-interfacepackage instead of fromapollo-server-typesandapollo-server-core. This is intended to be fully backwards-compatible; please file an issue if this leads to TypeScript compilation issues. PR #2044 - Don't require
@linkwhen using@composeDirectivePR #2046 - Don't do debug logging by default PR #2048
- Add
@composeDirectivedirective to specify directives that should be merged to the supergraph during composition PR #1996. - Fix fragment reuse in subgraph fetches PR #1911.
- Custom
fetchers should now accept aRequestobject which has asignal: AbortSignalproperty https://fetch.spec.whatwg.org/#requestinit for request timeout purposes. PR #2017 - Expose document representation of sub-query request within GraphQLDataSourceProcessOptions so that it is available to RemoteGraphQLDataSource.process and RemoteGraphQLDataSource.willSendRequest PR#1878
- Cleanup error related code, adding missing error code to a few errors PR #1914.
- Fix issue generating plan for a "diamond-shaped" dependency PR #1900.
- Fix issue computing query plan costs that can lead to extra unnecessary fetches PR #1937.
- Move
DEFAULT_UPLINK_ENDPOINTSto static member ofUplinkSupergraphManagerPR #1977. - Add
node-fetchas a runtime dependency PR #1970. - Add timeouts when making requests to Apollo Uplink PR #1950.
- Avoid type-explosion with fed1 supergraphs using a fed2 query planner PR #1994.
- Add callback when fetching a supergraph from Apollo Uplink fails PR #1812.
- Expand support for Node.js v18 PR #1884
v2.0.5
- Fix bug with unsatisfiable query branch when handling federation 1 supergraph PR #1908.
v2.0.4
- Fix issue when all root operations were defined in an
extend schemaPR #1875.
v2.0.3
- Fix bug with type extension of empty type definition PR #1821
- Fix output of
printSubgraphSchemamethod, ensuring it can be read back by composition andbuildSubgraphSchemaPR #1831. - Fix issue with
@requiresand conditional queries (@include/@skip) 1835. - Fix bug with field covariance when the underlying plan use type-explosion 1859.
v2.0.2
- BREAKING: We no longer export a
getDefaultFetcherfunction. This function returned the defaultfetchimplementation used to talk to Uplink (which is distinct from the defaultfetchimplementation used byRemoteGraphQLDataSourceto talk to subgraphs). It was the fetcher frommake-fetch-happenv8 with some preset configuration relating to caching and request headers. However, the caching configuration was not actually being used when talking to Uplink (as we talk to Uplink over POST requests, and the Uplink protocol has an application-level mechanism for avoiding unnecessary large responses), and the request headers were already being provided explicitly by the Uplink client code. Since this release is also upgradingmake-fetch-happen, it is impossible to promise that there would be no behavior change at all to the fetcher returned frommake-fetch-happen, and as none of the preset configuration is actually relevant to the internal use ofgetDefaultFetcher(which now just usesmake-fetch-happenswithout extra configuration), we have removed the function. If you were using this function, you can replaceconst fetcher = getDefaultFetcher()withimport fetcher from 'make-fetch-happen'. PR #1805 - The
fetchimplementation used by default byUplinkFetcherandRemoteGraphQLDataSourceis now imported frommake-fetch-happenv10 instead of v8. The fetcher used byRemoteGraphQLDataSourceno longer limits the number of simultaneous requests per subgraph (or specifically, per host/port pair) to 15 by default; instead, there is no limit. (If you want to restore the previous behavior, installmake-fetch-happen, importfetcherfrom it, and passnew RemoteGraphQLDataSource({ fetcher: fetcher.defaults(maxSockets: 15)}))in yourbuildServiceoption.) Note that if you invoke thefetcheryourself in aRemoteGraphQLDataSourcesubclass, you should ensure that you pass "plain" objects rather thanHeadersorRequestobjects, as the newer version has slightly different logic about how to recognizeHeadersandRequestobjects. We have adjusted the TypeScript types forfetcherso that only these "plain" objects (which result in consistent behavior across all fetcher implementations) are permitted. PR #1805 - Fix
Schema.clonewhen directive application happens before definition PR #1785 - More helpful error message for errors encountered while reading supergraphs generated pre-federation 2 PR #1796
- Fix handling of @require "chains" (a @require whose fields have @require themselves) PR #1790
- Fix bug applying an imported federation directive on another directive definition PR #1797.
- Fix bug where planning a query with
@requireimpacts the plans of followup queries PR #1783. - Improve fed1 schema support during composition PR #1735
- Add missing @apollo/federation-internals dependency to gateway PR #1721
- Improve merging of groups during
@requirehandling in query planning PR #1732 - Move
__resolveReferenceresolvers on toextensionsPR #1746 - Add gateway version to schema extensions PR #1751
- Honor directive imports when directive name is spec name PR #1720
- Migrate to
@apollo/utilspackages forcreateSHAandisNodeLikePR #1765
v2.0.1
- Use
for: SECURITYin the core/link directive application in the supergraph for@inaccessiblePR #1715
v2.0.0
- Previous preview release promoted to general availability! Please see previous changelog entries for full info.
v0.54.1
v0.52.1
v0.52.0
v0.51.0
v0.50.2
v0.50.1
v0.50.0
v0.49.0
v0.48.3
v0.48.1
v0.48.0
v0.47.0
v0.46.0
v0.45.1
v0.45.0
v0.44.1
v0.44.0
v0.43.1
v0.43.0
v0.42.3
v0.42.2
v0.42.1
v0.42.0
v0.41.0
v0.40.0
v0.39.0
v0.38.2
v0.38.1
v0.38.0
v0.37.0
v0.36.0
v0.35.1
v0.35.0
v0.34.0
v0.33.0
v0.32.0
v0.31.1
v0.31.0
v0.30.0
v0.29.1
apollographql/apollo-server
v3.12.0
v3.11.1
v3.11.0
v3.10.4
v3.10.3
v3.10.2
v3.10.1
v3.10.0
v3.9.0
v3.8.2
v3.8.1
v3.8.0
v3.7.0
v3.6.8
v3.6.7
v3.6.6
v3.6.5
v3.6.4
v3.6.3
v3.6.2
v3.6.1
v3.6.0
v3.5.0
v3.4.1
v3.4.0
v3.3.0
v3.2.0
v3.1.2
v3.1.1
v3.1.0
v3.0.2
v3.0.1
v3.0.0
v2.26.1
v2.26.0
v2.25.4
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
- [ ] If you want to rebase/retry this PR, check this box
This PR has been generated by Mend Renovate. View repository job log here.
Edited/Blocked Notification
Renovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR.
You can manually request rebase by checking the rebase/retry box above.
⚠️ Warning: custom changes will be lost.