Releases: apollographql/apollo-client
v3.13.0-rc.0
Minor Changes
-
#12066
c01da5d
Thanks @jerelmiller! - Adds a newuseSuspenseFragment
hook.useSuspenseFragment
suspends untildata
is complete. It is a drop-in replacement foruseFragment
when you prefer to use Suspense to control the loading state of a fragment. -
#12174
ba5cc33
Thanks @jerelmiller! - Ensure errors thrown in theonCompleted
callback fromuseMutation
don't callonError
. -
#12340
716d02e
Thanks @phryneas! - Deprecate theonCompleted
andonError
callbacks ofuseQuery
anduseLazyQuery
.
For more context, please see the related issue on GitHub. -
#12276
670f112
Thanks @Cellule! - Provide a more type-safe option for the previous data value passed toobservableQuery.updateQuery
. Using it could result in crashes at runtime as this callback could be called with partial data even though its type reported the value as a complete result.The
updateQuery
callback function is now called with a new type-safepreviousData
property and a newcomplete
property in the 2nd argument that determines whetherpreviousData
is a complete or partial result.As a result of this change, it is recommended to use the
previousData
property passed to the 2nd argument of the callback rather than using the previous data value from the first argument since that value is not type-safe. The first argument is now deprecated and will be removed in a future version of Apollo Client.observableQuery.updateQuery( (unsafePreviousData, { previousData, complete }) => { previousData; // ^? TData | DeepPartial<TData> | undefined if (complete) { previousData; // ^? TData } else { previousData; // ^? DeepPartial<TData> | undefined } } );
-
#12174
ba5cc33
Thanks @jerelmiller! - Reject the mutation promise if errors are thrown in theonCompleted
callback ofuseMutation
.
Patch Changes
-
#12276
670f112
Thanks @Cellule! - Fix the return type of theupdateQuery
function to allow forundefined
.updateQuery
had the ability to bail out of the update by returning a falsey value, but the return type enforced a query value.observableQuery.updateQuery( (unsafePreviousData, { previousData, complete }) => { if (!complete) { // Bail out of the update by returning early return; } // ... } );
-
#12296
2422df2
Thanks @Cellule! - Deprecate optionignoreResults
inuseMutation
.
Once this option is removed, existing code still using it might see increase in re-renders.
If you don't want to synchronize your component state with the mutation, please useuseApolloClient
to get your ApolloClient instance and callclient.mutate
directly. -
#12338
67c16c9
Thanks @phryneas! - In case of a multipart response (e.g. with@defer
), query deduplication will
now keep going until the final chunk has been received. -
#12276
670f112
Thanks @Cellule! - Fix the type of thevariables
property passed as the 2nd argument to thesubscribeToMore
updateQuery
callback. This was previously reported as thevariables
type for the subscription itself, but is now properly typed as the queryvariables
.
v3.12.11
Patch Changes
-
#12351
3da908b
Thanks @jerelmiller! - Fixes an issue where the wrongnetworkStatus
andloading
value was emitted fromobservableQuery
when callingfetchMore
with ano-cache
fetch policy. ThenetworkStatus
now properly reports asready
andloading
asfalse
after the result is returned. -
#12354
a24ef94
Thanks @phryneas! - Fix missingmain.d.cts
file
v3.12.10
v3.12.9
Patch Changes
-
#12321
daa4f33
Thanks @jerelmiller! - Fix type ofextensions
inprotocolErrors
forApolloError
and theonError
link. According to the multipart HTTP subscription protocol, fatal tranport errors follow the GraphQL error format which requireextensions
to be a map as its value instead of an array. -
#12318
b17968b
Thanks @jerelmiller! - AllowRetryLink
to retry an operation when fatal transport-level errors are emitted from multipart subscriptions.const retryLink = new RetryLink({ attempts: (count, operation, error) => { if (error instanceof ApolloError) { // errors available on the `protocolErrors` field in `ApolloError` console.log(error.protocolErrors); } return true; }, });
v3.12.8
v3.12.7
Patch Changes
-
#12281
d638ec3
Thanks @jerelmiller! - Make fatal tranport-level errors from multipart subscriptions available to the error link with theprotocolErrors
property.const errorLink = onError(({ protocolErrors }) => { if (protocolErrors) { console.log(protocolErrors); } });
-
#12281
d638ec3
Thanks @jerelmiller! - Fix the array type for theerrors
field on theApolloPayloadResult
type. This type was always in the shape of the GraphQL error format, per the multipart subscriptions protocol and never a plain string or a JavaScript error object.
v3.12.6
Patch Changes
-
#12267
d57429d
Thanks @jerelmiller! - Maintain theTData
type when used withUnmasked
whenTData
is not a masked type generated from GraphQL Codegen. -
#12270
3601246
Thanks @jerelmiller! - Fix handling of tagged/branded primitive types when used as scalar values withUnmasked
.
v3.12.5
Patch Changes
-
#12252
cb9cd4e
Thanks @jerelmiller! - Changes the default behavior of theMaybeMasked
type to preserve types unless otherwise specified. This change makes it easier to upgrade from older versions of the client where types could have unexpectedly changed in the application due to the default of trying to unwrap types into unmasked types. This change also fixes the compilation performance regression experienced when simply upgrading the client since types are now preserved by default.A new
mode
option has now been introduced to allow for the old behavior. See the next section on migrating if you wish to maintain the old default behavior after upgrading to this version.Migrating from <= v3.12.4
If you've adopted data masking and have opted in to using masked types by setting the
enabled
property totrue
, you can remove this configuration entirely:-declare module "@apollo/client" { - interface DataMasking { - mode: "unmask" - } -}
If you prefer to specify the behavior explicitly, change the property from
enabled: true
, tomode: "preserveTypes"
:declare module "@apollo/client" { interface DataMasking { - enabled: true + mode: "preserveTypes" } }
If you rely on the default behavior in 3.12.4 or below and would like to continue to use unmasked types by default, set the
mode
tounmask
:declare module "@apollo/client" { interface DataMasking { mode: "unmask"; } }
v3.12.4
v3.12.3
Patch Changes
-
#12214
8bfee88
Thanks @phryneas! - Data masking: prevent infinite recursion ofContainsFragmentsRefs
type -
#12204
851deb0
Thanks @jerelmiller! - FixUnmasked
unwrapping tuple types into an array of their subtypes. -
#12204
851deb0
Thanks @jerelmiller! - EnsureMaybeMasked
does not try and unwrap types that contain index signatures. -
#12204
851deb0
Thanks @jerelmiller! - EnsureMaybeMasked
does not try to unwrap the type asUnmasked
if the type containsany
.