Note: This is a cumulative changelog that outlines all of the Apollo Client project child package changes that were bundled into a specific apollo-client release.
- Fixes an issue where the
QueryManagerwas accidentally returning cached data fornetwork-onlyqueries.
@danilobuerger in #4352 - Fixed an issue in the repo
.gitattributesthat was causing binary files to have their line endings adjusted, and cleaned up corrupted documentation images (ref: apollographql#4232).
@rajington in #4438
-
Resolve "invalidate" -> "invalidated" typo in
QueryManager.
@quazzie in #4041 -
Properly type
setQueryand fix now typed callers.
@danilobuerger in #4369 -
Align with the React Apollo decision that result
datashould beTData | undefinedinstead ofTData | {}.
@danilobuerger in #4356 -
Documentation updates.
@danilobuerger in #4340
@justyn-clark in #4383
@jtassin in #4287
@Gongreg in #4386
@davecardwell in #4399
@michaelknoch in #4384
- Support
ApolloClient#stopmethod for safe client disposal.
PR #4336
- Added explicit dependencies on the
tslibpackage to all client packages to fix Issue #4332.
- Reverted some breaking changes accidentally released in a patch version (2.4.10). PR #4334
-
The
apollo-clientpackage no longer exports aprintASTfunction fromgraphql/language/printer. If you need this functionality, import it directly:import { print } from "graphql/language/printer" -
Query polling now uses a simpler scheduling strategy based on a single
setTimeoutinterval rather than multiplesetIntervaltimers. The new timer fires at the rate of the fastest polling interval, and queries with longer polling intervals fire whenever the time elapsed since they last fired exceeds their desired interval.
PR #4243
-
The
optimismnpm package has been updated to a version (0.6.9) that provides its own TypeScript declarations, which should fix problems like Issue #4327.
PR #4331 -
Error messages involving GraphQL queries now print the queries using
JSON.stringifyinstead of theprintfunction exported by thegraphqlpackage, to avoid pulling unnecessary printing logic into your JavaScript bundle.
PR #4234 -
The
QueryKeyMakerabstraction has been removed, meaning that cache results for non-identical queries (or sub-queries) with equivalent structure will no longer be cached together. This feature was a nice optimization in certain specific use cases, but it was not worth the additional complexity or bundle size.
PR #4245
- The
flattenSelectionshelper function is no longer exported fromapollo-utilities, sincegetDirectiveNameshas been reimplemented without usingflattenSelections, andflattenSelectionshas no clear purpose now. If you need the old functionality, use a visitor:import { visit } from "graphql/language/visitor"; function flattenSelections(selection: SelectionNode) { const selections: SelectionNode[] = []; visit(selection, { SelectionSet(ss) { selections.push(...ss.selections); } }); return selections; }
-
Apollo Client has been updated to use
graphql14.x as a dev dependency.
@hwillson in #4233 -
The
onClearStorefunction can now be used to register callbacks that should be triggered when callingclearStore.
@joe-re in #4082 -
Make
isApolloErroravailable for external use.
@FredyC in #4223 -
The
QueryManagernow callscompleteon the observables used by Apollo Client's Subscription handling. This gives finite subscriptions a chance to handle cleanup.
@sujeetsr in #4290 -
Documentation updates.
@lifedup in #3931
@Dem0n3D in #4008
@anand-sundaram-zocdoc in #4009
@mattphoto in #4026
@birge in #4029
@mxstbr in #4127
@Caerbannog in #4140
@jedwards1211 in #4179
@nutboltu in #4182
@CarloPalinckx in #4189
@joebernard in #4206
@evans in #4213
@danilobuerger in #4214
@stubailo in #4220
@haysclark in #4255
@shelmire in #4266
@peggyrayzis in #4280
@caydie-tran in #4300
- Transformation utilities have been refactored to work with
graphql14.x. GraphQL AST's are no longer being directly modified.
@hwillson in #4233
-
The speed and memory usage of optimistic reads and writes has been improved dramatically using a new layering technique that does not require copying the non-optimistic contents of the cache.
PR #4319 -
The
RecordingCacheabstraction has been removed, and thus is no longer exported fromapollo-cache-inmemory.
PR #4319 -
Export the optimism
wrapfunction using ES2015 export syntax, instead of CommonJS.
@ardatan in #4158
-
Documentation and config updates.
@justinanastos in #4187
@PowerKiKi in #3693
@nandito in #3865 -
Schema/AST tranformation utilities have been updated to work properly with
@clientdirectives.
@justinmakaila in #3482
-
Avoid using
DepTrackingCachefor optimistic reads. PR #4521 -
When creating an
InMemoryCacheobject, it's now possible to disable the result caching behavior introduced in #3394, either for diagnostic purposes or because the benefit of caching repeated reads is not worth the extra memory usage in your application:new InMemoryCache({ resultCaching: false })
Part of PR #4521.
- The
ApolloClientconstructor has been updated to acceptnameandversionparams, that can be used to support Apollo Server Client Awareness functionality. These client awareness properties are passed into the defined Apollo Link chain, and are then ultimately sent out as custom headers with outgoing requests.
@hwillson in #4154
- No changes.
- No changes.
- No changes.
- No changes.
- No changes.
-
Added some
returns to prevent errors withnoImplicitReturnsTypeScript rule. PR #4137 -
Exclude the
src/directory when publishingapollo-cache-inmemory. Issue #4083
-
Optimistic tests cleanup. PR #3834 by @joshribakoff
-
Documentation updates. PR #3840 by @chentsulin and PR #3844 by @lorensr
-
Implement
ObservableQuery#isDifferentFromLastResultto fix Issue #4054 and Issue #4031. PR #4069
- Add
readQuerytest to make sure options aren't mutated. @CarloPalinckx in #3838
- Avoid modifying source objects when merging cache results. Issue #4081 PR #4089
-
Discard property accessor functions in
cloneDeephelper, to fix issue #4034. -
Unconditionally remove
cloneDeepproperty accessors. PR #4039 -
Avoid copying non-enumerable and/or
Symbolkeys incloneDeep. PR #4052
-
Throw when querying non-scalar objects without a selection set. Issue #4025 PR #4038
-
Work around spec non-compliance of
Map#setandSet#addin IE11. Issue #4024 PR #4012
-
Add additional checks to make sure we don't try to set the network status of queries in the store, when the store doesn't exist.
@i6mi6 in #3914 -
Documentation updates.
@shanonvl in #3925
@ojh102 in #3920
@Bkucera in #3919
@j4chou in #3915
@billfienberg in #3886
@TLadd in #3884 -
The
ObservableQueryclass now makes a deep clone oflastResultwhen first received, so that theisDifferentResultlogic will not be confused if the result object is modified later. Issue #3992 PR #4032
-
Optimize repeated
apollo-cache-inmemoryreads by caching partial query results, for substantial performance improvements. As a consequence, watched queries will not be rebroadcast unless the data have changed. PR #3394 -
Include root ID and fragment matcher function in cache keys computed by
StoreReader#executeStoreQueryandexecuteSelectionSet, and work around bugs in the React NativeMapandSetpolyfills. PR #3964 React Native PR #21492 (pending) -
The
apollo-cache-inmemorypackage now allowsgraphql@^14.0.0as a peer dependency. Issue #3978 -
The
apollo-cache-inmemorypackage now correctly broadcasts changes even when the new data is===to the old data, since the contents of the data object may have changed. Issue #3992 PR #4032
- Make
graphql-anywherefilterfunction generic (typescript).
@minznerjosh in #3929
- The
fclonepackage has been replaced with a customcloneDeepimplementation that is tolerant of cycles, symbol properties, and non-enumerable properties. PR #4032
- Remove duplicate InMemoryCache export for Babel 6 compatibility. Issue #3910 PR #3932
- No changes.
- Apollo Client no longer deep freezes query results. @hwillson in #3883
- A new
clearStoremethod has been added, that will remove all data from the store. UnlikeresetStore, it will not refetch active queries after removing store data. @hwillson in #3885
- Replace the custom
cloneDeepimplementation withfclone, to avoid crashing when encountering circular references.
@hwillson in #3881
- No changes.
- No changes.
- No changes.
- No changes.
-
mutate'srefetchQueriesoption now allows queries to include a customcontextoption. Thiscontextwill be used when refetching the query. For example:context = { headers: { token: 'some auth token', }, }; client.mutate({ mutation: UPDATE_CUSTOMER_MUTATION, variables: { userId: user.id, firstName, ... }, refetchQueries: [{ query: CUSTOMER_MESSAGES_QUERY, variables: { userId: user.id }, context, }], context, });
The
CUSTOMER_MESSAGES_QUERYabove will be refetched usingcontext. Normally queries are refetched using the original context they were first started with, but this provides a way to override the context, if needed.
@hwillson in #3852
- Various internal infrastructure changes related to building, bundling, testing, etc. @hwillson in #3817
- Various internal infrastructure changes related to building, bundling, testing, etc. @hwillson in #3817
- Various internal infrastructure changes related to building, bundling, testing, etc. @hwillson in #3817
- Various internal infrastructure changes related to building, bundling, testing, etc. @hwillson in #3817
- Various internal infrastructure changes related to building, bundling, testing, etc. @hwillson in #3817
- Add proper error handling for subscriptions. If you have defined an
errorhandler on your subscription observer, it will now be called when an error comes back in a result, and thenexthandler will be skipped (similar to how we're handling errors with mutations). Previously, the error was just passed in the result to thenexthandler. If you don't have anerrorhandler defined, the previous functionality is maintained, meaning the error is passed in the result, giving the next handler a chance to deal with it. This should help address backwards compatibility (and is the reason for the minor version bumo in this release).
@clayne11 in #3800 - Allow an
optimisticparam to be passed intoApolloClient.readQueryandApolloClient.readFragment, that when set totrue, will allow optimistic results to be returned. Isfalseby default.
@jay1337 in #2429 - Optimistic tests cleanup.
@joshribakoff in #3713 - Make sure each package has its own
.npmignore, so they're taken into consideration when publishing via lerna.
@hwillson in #3828 - Documentation updates.
@toolness in #3804
@pungggi in #3798
@lorensr in #3748
@joshribakoff in #3730
@yalamber in #3819
@pschreibs85 in #3812
@msreekm in #3808
@kamaltmo in #3806
@lorensr in #3739
@brainkim in #3680
- No changes.
- No changes.
- No changes.
- No changes.
- Added
@defersupport #3686 - Adjusted the
graphqlpeer dependency to cover explicit minor ranges. Since the ^ operator only covers any minor version if the major version is not 0 (since a major version of 0 is technically considered development by semver 2), the current ^0.11.0 || ^14.0.0 graphql range doesn't cover 0.12.* or 0.13.*. This fixes theapollo-client@X has incorrect peer dependency "graphql@^0.11.0 || ^14.0.0"errors that people might have seen usinggraphql0.12.x or 0.13.x.
@hwillson in #3746 - Document
setVariablesinternal API status.
@PowerKiKi in #3692 - Corrected
ApolloClient.queryManagertyping as it may beundefined.
@danilobuerger in #3661 - Make sure using a
no-cachefetch policy with subscriptions prevents data from being cached.
@hwillson in #3773 - Fixed an issue that sometimes caused empty query results, when using the
no-cachefetch policy.
@hwillson in #3777 - Documentation updates.
@hwillson in #3750
@hwillson in #3754
@TheMightyPenguin in #3725
@bennypowers in #3668
@hwillson in #3762
@chentsulin in #3688
@chentsulin in #3687
@ardouglass in #3645
@hwillson in #3764
@hwillson in #3767
@hwillson in #3774
@hwillson in #3779
- No changes.
- No changes.
- No changes.
- No changes.
- No changes.
- Release 2.3.6 broke Typescript compilation.
QueryManager'sgetQueryWithPreviousResultmethod included an invalidvariablesreturn type in the auto-generatedcore/QueryManager.d.tsdeclaration file. The type definition had a locally referenced path, that appears to have been caused by the typescript compiler getting confused at compile/publish time.getQueryWithPreviousResultreturn types are now excplicity identified, which helps Typescript avoid the local type reference. For more details, see apollographql#3729.
@hwillson in #3731
- No changes.
- Documentation updates.
@ananth99 in #3599
@hwillson in #3635
@JakeDawkins in #3642
@hwillson in #3644
@gbau in #3644
@chentsulin in #3608
@MikaelCarpenter in #3609
@Gamezpedia in #3612
@jinxac in #3647
@abernix in #3705
@dandv in #3703
@hwillson in #3580 - Updated
graphqlpeerDependenciesto handle 14.x versions.
@ivank in #3598 - Add optional generic type params for variables on low level methods.
@mvestergaard in #3588 - Add a new
awaitRefetchQueriesconfig option to the Apollo Clientmutatefunction, that when set totruewill wait for allrefetchQueriesto be fully refetched, before resolving the mutation call.awaitRefetchQueriesisfalseby default.
@jzimmek in #3169
- Allow
fetchto be given as a configuration option toApolloBoost.
@mbaranovski in #3590 - The
apollo-boostApolloClientconstructor now warns about unsupported options.
@quentin- in #3551
- No changes.
- Add
__typenameandidproperties todataIdFromObjectparameter (typescript)
@jfurler in #3641 - Fixed an issue caused by
dataIdFromObjectconsidering returned 0 values to be falsy, instead of being a valid ID, which lead to the store not being updated properly in some cases.
@hwillson in #3711
- No changes.
- Add support for arrays to
graphql-anywhere's filter utility.
@jsweet314 in #3591 - Fix
Cannot convert object to primitive valueerror that was showing up when attempting to report a missing property on an object.
@benjie in #3618
- Internal code formatting updates.
- @chentsulin in #3574
- Documentation updates.
- @andtos90 in #3596
- @serranoarevalo in #3554
- @cooperka in #3594
- @pravdomil in #3587
- @excitement-engineer in #3309
- No changes.
- No changes.
- No changes.
- Removed unnecessary whitespace from error message.
- No changes.
- Export the
QueryOptionsinterface, to make sure it can be used by other projects (likeapollo-angular). - Fixed an issue caused by typescript changes to the constructor
defaultOptionsparam, that preventedquerydefaults from passing type checks. (@hwillson in #3585)
- No changes
- No changes
- No changes
- No changes
- No changes
- Typescript improvements. Made observable query parameterized on data and
variables:
ObservableQuery<TData, TVariables>(@excitement-engineer in #3140) - Added optional generics to cache manipulation methods (typescript). (@mvestergaard in #3541)
- Typescript improvements. Created a new
QueryOptionsinterface that is now used byApolloClient.queryoptions, instead of the previousWatchQueryOptionsinterface. This helps reduce confusion (especially in the docs) that made it look likeApolloClient.queryacceptedApolloClient.watchQueryonly options, likepollingInterval. (@hwillson in #3569)
- Allow
cacheto be given as a configuration option toApolloBoost. (@dandean in #3561) - Allow
headersandcredentialsto be passed in as configuration parameters to theapollo-boostApolloClientconstructor. (@rzane in #3098)
- Added optional generics to cache manipulation methods (typescript). (@mvestergaard in #3541)
- Added optional generics to cache manipulation methods (typescript). (@mvestergaard in #3541)
- Restore non-enumerability of
resultFields[ID_KEY]. (@benjamn in #3544) - Cache query documents transformed by InMemoryCache. (@benjamn in #3553)
- Store key names generated by
getStoreKeyNamenow leverage a more deterministic approach to handling JSON based strings. This prevents store key names from differing when usingargslike{ prop1: 'value1', prop2: 'value2' }and{ prop2: 'value2', prop1: 'value1' }. (@gdi2290 in #2869) - Avoid needless
hasOwnPropertycheck indeepFreeze. (@benjamn in #3545)
- No new changes.
- Fix SSR and
cache-and-networkfetch policy (@dastoori in #3372) - Fixed an issue where the
updateQuerymethod passed toObservableQuery.fetchMorewas receiving the original query variables, instead of the new variables that it used to fetch more data. (@abhiaiyer91 in #3500) - Fixed an issue involving
Object.setPrototypeOf()not working on JSC (Android), by instead setting theprototypeofthismanually. (@seklyza in #3306) - Added safeguards to make sure
QueryStore.initQueryandQueryStore.markQueryResultdon't try to set the network status of afetchMoreForQueryIdquery, if it does not exist in the store. This was happening when a query component was unmounted while afetchMorewas still in flight. (@conrad-vanl in #3367, @doomsower in #3469)
- Various internal code cleanup, tooling and dependency changes.
- Various internal code cleanup, tooling and dependency changes.
- Fixed an issue that caused fragment only queries to sometimes fail. (@abhiaiyer91 in #3507)
- Fixed cache invalidation for inlined mixed types in union fields within arrays. (@dferber90 in #3422)
- Make
maybeDeepFreezea little more defensive, by always usingObject.prototype.hasOwnProperty(to avoid cases where the object being frozen doesn't have its ownhasOwnProperty). (@jorisroling in #3418) - Remove certain small internal caches to prevent memory leaks when using SSR. (@brunorzn in #3444)