Skip to content

chore(deps): update dependency @apollo/client to v4#3298

Open
renovate[bot] wants to merge 1 commit intomainfrom
renovate/apollo-client-4.x
Open

chore(deps): update dependency @apollo/client to v4#3298
renovate[bot] wants to merge 1 commit intomainfrom
renovate/apollo-client-4.x

Conversation

@renovate
Copy link
Contributor

@renovate renovate bot commented Sep 6, 2025

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
@apollo/client (source) 3.8.84.1.6 age adoption passing confidence

Release Notes

apollographql/apollo-client (@​apollo/client)

v4.1.6

Compare Source

Patch Changes
  • #​13128 6c0b8e4 Thanks @​pavelivanov! - Fix useQuery hydration mismatch when ssr: false and skip: true are used together

    When both options were combined, the server would return loading: false (because useSSRQuery checks skip first), but the client's getServerSnapshot was returning ssrDisabledResult with loading: true, causing a hydration mismatch.

v4.1.5

Compare Source

Patch Changes

v4.1.4

Compare Source

Patch Changes
  • #​13124 578081f Thanks @​Re-cool! - Ensure PersistedQueryLink merges http and fetchOptions context values instead of overwriting them.

v4.1.3

Compare Source

Patch Changes
  • #​13111 bf46fe0 Thanks @​RogerHYang! - Fix createFetchMultipartSubscription to support cancellation via AbortController

    Previously, calling dispose() or unsubscribe() on a subscription created by createFetchMultipartSubscription had no effect - the underlying fetch request would continue running until completion. This was because no AbortController was created or passed to fetch(), and no cleanup function was returned from the Observable.

v4.1.2

Compare Source

Patch Changes
  • #​13105 8b62263 Thanks @​phryneas! - ssrMode, ssrForceFetchDelay or prioritizeCacheValues should not override fetchPolicy: 'cache-only', fetchPolicy: 'no-cache', fetchPolicy: 'standby', skip: true, or skipToken when reading the initial value of an ObservableQuery.

  • #​13105 8b62263 Thanks @​phryneas! - Fix skipToken in useQuery with prerenderStatic and related SSR functions.

  • #​13105 8b62263 Thanks @​phryneas! - Avoid fetches with fetchPolicy: no-cache in useQuery with prerenderStatic and related SSR functions.

v4.1.1

Compare Source

Patch Changes

v4.1.0

Compare Source

Minor Changes
  • #​13043 65e66ca Thanks @​jerelmiller! - Support headers transport for enhanced client awareness.

  • #​12927 785e223 Thanks @​jerelmiller! - You can now provide a callback function as the context option on the mutate function returned by useMutation. The callback function is called with the value of the context option provided to the useMutation hook. This is useful if you'd like to merge the context object provided to the useMutation hook with a value provided to the mutate function.

    function MyComponent() {
      const [mutate, result] = useMutation(MUTATION, {
        context: { foo: true },
      });
    
      async function runMutation() {
        await mutate({
          // sends context as { foo: true, bar: true }
          context: (hookContext) => ({ ...hookContext, bar: true }),
        });
      }
    
      // ...
    }
  • #​12923 94ea3e3 Thanks @​jerelmiller! - Fix an issue where deferred payloads that returned arrays with fewer items than the original cached array would retain items from the cached array. This change includes @stream arrays where stream arrays replace the cached arrays.

  • #​12927 96b531f Thanks @​jerelmiller! - Don't set the fallback value of a @client field to null when a read function is defined. Instead the read function will be called with an existing value of undefined to allow default arguments to be used to set the returned value.

    When a read function is not defined nor is there a defined resolver for the field, warn and set the value to null only in that instance.

  • #​12927 45ebb52 Thanks @​jerelmiller! - Add support for from: null in client.watchFragment and cache.watchFragment. When from is null, the emitted result is:

    {
      data: null,
      dataState: "complete",
      complete: true,
    }
  • #​12926 2b7f2c1 Thanks @​jerelmiller! - Support the newer incremental delivery format for the @defer directive implemented in graphql@17.0.0-alpha.9. Import the GraphQL17Alpha9Handler to use the newer incremental delivery format with @defer.

    import { GraphQL17Alpha9Handler } from "@​apollo/client/incremental";
    
    const client = new ApolloClient({
      // ...
      incrementalHandler: new GraphQL17Alpha9Handler(),
    });

    [!NOTE]
    In order to use the GraphQL17Alpha9Handler, the GraphQL server MUST implement the newer incremental delivery format. You may see errors or unusual behavior if you use the wrong handler. If you are using Apollo Router, continue to use the Defer20220824Handler because Apollo Router does not yet support the newer incremental delivery format.

  • #​12927 45ebb52 Thanks @​jerelmiller! - Add support for arrays with useFragment, useSuspenseFragment, and client.watchFragment. This allows the ability to use a fragment to watch multiple entities in the cache. Passing an array to from will return data as an array where each array index corresponds to the index in the from array.

    function MyComponent() {
      const result = useFragment({
        fragment,
        from: [item1, item2, item3],
      });
    
      // `data` is an array with 3 items
      console.log(result); // { data: [{...}, {...}, {...}], dataState: "complete", complete: true }
    }
  • #​12927 45ebb52 Thanks @​jerelmiller! - Add a getCurrentResult function to the observable returned by client.watchFragment and cache.watchFragment that returns the current value for the watched fragment.

    const observable = client.watchFragment({
      fragment,
      from: { __typename: "Item", id: 1 },
    });
    
    console.log(observable.getCurrentResult());
    // {
    //   data: {...},
    //   dataState: "complete",
    //   complete: true,
    // }
  • #​13038 109efe7 Thanks @​jerelmiller! - Add the from option to readFragment, watchFragment, and updateFragment.

  • #​12918 2e224b9 Thanks @​jerelmiller! - Add support for the @stream directive on both the Defer20220824Handler and the GraphQL17Alpha2Handler.

    [!NOTE]
    The implementations of @stream differ in the delivery of incremental results between the different GraphQL spec versions. If you upgrading from the older format to the newer format, expect the timing of some incremental results to change.

  • #​13056 b224efc Thanks @​jerelmiller! - InMemoryCache no longer filters out explicitly returned undefined items from read functions for array fields. This now makes it possible to create read functions on array fields that return partial data and trigger a fetch for the full list.

  • #​13058 121a2cb Thanks @​jerelmiller! - Add an extensions option to cache.write, cache.writeQuery, and client.writeQuery. This makes extensions available in cache merge functions which can be accessed with the other merge function options.

    As a result of this change, any extensions returned in GraphQL operations are now available in merge in the cache writes for these operations.

  • #​12927 96b531f Thanks @​jerelmiller! - Add an abstract resolvesClientField function to ApolloCache that can be used by caches to tell LocalState if it can resolve a @client field when a local resolver is not defined.

    LocalState will emit a warning and set a fallback value of null when no local resolver is defined and resolvesClientField returns false, or isn't defined. Returning true from resolvesClientField signals that a mechanism in the cache will set the field value. In this case, LocalState won't set the field value.

  • #​13078 bf1e0dc Thanks @​phryneas! - Use the default stream merge function for @stream fields only if stream info is present. This change means that using the older Defer20220824Handler will not use the default stream merge function and will instead truncate the streamed array on the first chunk.

Patch Changes
  • #​12884 d329790 Thanks @​phryneas! - Ensure that PreloadedQueryRef instances are unsubscribed when garbage collected

  • #​13086 1a1d408 Thanks @​phryneas! - Change the returned value from null to {} when all fields in a query were skipped.

    This also fixes a bug where useSuspenseQuery would suspend indefinitely when all fields were skipped.

  • #​13010 7627000 Thanks @​jerelmiller! - Fix an issue where errors parsed from incremental chunks in ErrorLink might throw when using the GraphQL17Alpha9Handler.

  • #​12927 45ebb52 Thanks @​jerelmiller! - Deduplicate watches created by useFragment, client.watchFragment, and cache.watchFragment that contain the same fragment, variables, and identifier. This should improve performance in situations where a useFragment or a client.watchFragment is used to watch the same object in multiple places of an application.

  • #​12927 259ae9b Thanks @​jerelmiller! - Allow FragmentType not only to be called as FragmentType<TData>, but also as FragmentType<TypedDocumentNode>.

  • #​12925 5851800 Thanks @​jerelmiller! - Fix an issue where calling fetchMore with @defer or @stream would not rerender incremental results as they were streamed.

  • #​12927 9e55188 Thanks @​jerelmiller! - Truncate @stream arrays only on last chunk by default.

  • #​13083 f3c2be1 Thanks @​phryneas! - Expose the ExtensionsWithStreamInfo type for extensions in Cache.writeQuery, Cache.write and Cache.update so other cache implementations also can correctly access them.

  • #​12923 94ea3e3 Thanks @​jerelmiller! - Improve the cache data loss warning message when existing or incoming is an array.

  • #​12927 4631175 Thanks @​jerelmiller! - Ignore top-level data values on subsequent chunks in incremental responses.

  • #​12927 2be8de2 Thanks @​jerelmiller! - Create mechanism to add experimental features to Apollo Client

  • #​12927 96b531f Thanks @​jerelmiller! - Ensure LocalState doesn't try to read from the cache when using a no-cache fetch policy.

  • #​12927 bb8ed7b Thanks @​jerelmiller! - Ensure an error is thrown when @stream is detected and an incrementalDelivery handler is not configured.

  • #​13053 23ca0ba Thanks @​phryneas! - Use memoized observable mapping when using watchFragment, useFragment or useSuspenseFragment.

  • #​12927 44706a2 Thanks @​jerelmiller! - Add helper type QueryRef.ForQuery<TypedDocumentNode>

  • #​13082 c257418 Thanks @​phryneas! - Pass streamInfo through result extensions as a WeakRef.

  • #​12927 4631175 Thanks @​jerelmiller! - Fix the Defer20220824Handler.SubsequentResult type to match the FormattedSubsequentIncrementalExecutionResult type in graphql@17.0.0-alpha.2.

  • #​12927 96b531f Thanks @​jerelmiller! - Warn when using a no-cache fetch policy without a local resolver defined. no-cache queries do not read or write to the cache which meant no-cache queries are silently incomplete when the @client field value was handled by a cache read function.

  • #​12927 5776ea0 Thanks @​jerelmiller! - Update the accept header used with the GraphQL17Alpha9Handler to multipart/mixed;incrementalSpec=v0.2 to ensure the newest incremental delivery format is requested.

  • #​12927 45ebb52 Thanks @​jerelmiller! - DeepPartial<Array<TData>> now returns Array<DeepPartial<TData>> instead of Array<DeepPartial<TData | undefined>>.

  • #​13071 99ffe9a Thanks @​phryneas! - prerenderStatic: Expose return value of renderFunction to userland, fix aborted property.

    This enables usage of resumeAndPrerender with React 19.2.

  • #​13026 05eee67 Thanks @​jerelmiller! - Reduce the number of observables created by watchFragment by reusing existing observables as much as possible. This should improve performance when watching the same item in the cache multiple times after a cache update occurs.

  • #​13010 7627000 Thanks @​jerelmiller! - Handle @stream payloads that send multiple items in the same chunk when using the Defer20220824Handler.

  • #​13010 7627000 Thanks @​jerelmiller! - Handle an edge case with the Defer20220824Handler where an error for a @stream item that bubbles to the @stream boundary (such as an item returning null for a non-null array item) would write items from future chunks to the wrong array index. In these cases, the @stream field is no longer processed and future updates to the field are ignored. This prevents runtime errors that TypeScript would otherwise not be able to catch.

  • #​13081 1e06ad7 Thanks @​jerelmiller! - Avoid calling merge functions more than once for the same incremental chunk.

v4.0.13

Compare Source

Patch Changes
  • #​13094 9cbe2c2 Thanks @​phryneas! - Ensure that compact and mergeOptions preserve symbol keys.

    This fixes an issue where the change introduced in 4.0.11 via #​13049 would not
    be applied if defaultOptions for watchQuery were declared.

    Please note that compact and mergeOptions are considered internal utilities
    and they might have similar behavior changes in future releases.
    Do not use them in your application code - a change like this is not considered
    breaking and will not be announced as such.

v4.0.12

Compare Source

Patch Changes

v4.0.11

Compare Source

Patch Changes
  • #​13050 8020829 Thanks @​phryneas! - Replace usage of findLast with more backwards-compatible methods.

  • #​13049 05638de Thanks @​phryneas! - Fixes an issue where queries starting with skipToken or lazy queries from useLazyQuery were included in client.refetchQueries() before they had been executed for the first time. While generally queries with a standby fetchPolicy should be included in refetch, these queries never had variables passed in, so they should be excluded until they have run once and received their actual variables.

    These queries are now properly excluded from refetch operations until after their initial execution.

    This change adds a new hidden option to client.watchQuery, [variablesUnknownSymbol], which may be set true for queries starting with a fetchPolicy of standby. It will only be applied when creating the ObservableQuery instance and cannot be changed later. This flag indicates that the query's variables are not yet known, and thus it should be excluded from refetch operations until they are.
    This option is not meant for everyday use and is intended for framework integrations only.

v4.0.10

Compare Source

Patch Changes

v4.0.9

Compare Source

Patch Changes
  • #​12993 8f3bc9b Thanks @​jerelmiller! - Fix an issue where switching from options with variables to skipToken with useSuspenseQuery and useBackgroundQuery would create a new ObservableQuery. This could cause unintended refetches where variables were absent in the request when the query was referenced with refetchQueries.

v4.0.8

Compare Source

Patch Changes

v4.0.7

Compare Source

Patch Changes

v4.0.6

Compare Source

Patch Changes
  • #​12937 3b0d89b Thanks @​phryneas! - Fix a problem with fetchMore where the loading state wouldn't reset if the result wouldn't result in a data update.

v4.0.5

Compare Source

Patch Changes

v4.0.4

Compare Source

Patch Changes
  • #​12892 db8a04b Thanks @​jerelmiller! - Prevent unhandled rejections from the promise returned by calling the mutate function from the useMutation hook.

  • #​12899 5352c12 Thanks @​phryneas! - Fix an issue when invariant is called by external libraries when no dev error message handler is loaded.

  • #​12895 71f2517 Thanks @​jerelmiller! - Support skipToken with useQuery to provide a more type-safe way to skip query execution.

    import { skipToken, useQuery } from "@&#8203;apollo/client/react";
    
    // Use `skipToken` in place of `skip: true` for better type safety
    // for required variables
    const { data } = useQuery(QUERY, id ? { variables: { id } } : skipToken);

    Note: this change is provided as a patch within the 4.0 minor version because the changes to TypeScript validation with required variables in version 4.0 made using the skip option more difficult.

  • #​12900 c0d5be7 Thanks @​phryneas! - Use named export equal instead of default from "@&#8203;wry/equality"

v4.0.3

Compare Source

Patch Changes

v4.0.2

Compare Source

Patch Changes

v4.0.1

Compare Source

Patch Changes
  • #​12876 b00f231 Thanks @​phryneas! - Fix CJS build output for invariantErrorCodes

  • #​12866 0d1614a Thanks @​jerelmiller! - Export isNetworkStatusInFlight from @apollo/client/utilities. Add isNetworkStatusSettled to @apollo/client/utilities and re-export it from @apollo/client with a deprecation.

v4.0.0

Compare Source

v3.14.0

Compare Source

Minor Changes
Patch Changes

v3.13.9

Compare Source

Patch Changes
  • #​12804 32c9aa9 Thanks @​phryneas! - Fix a possible race condition on queries that were reobserved before they were subscribed to the first time.

v3.13.8

Compare Source

Patch Changes

v3.13.7

Compare Source

Patch Changes

v3.13.6

Compare Source

Patch Changes

v3.13.5

Compare Source

Patch Changes
  • #​12461 12c8d06 Thanks @​jerelmiller! - Fix an issue where a cache-first query would return the result for previous variables when a cache update is issued after simultaneously changing variables and skipping the query.

v3.13.4

Compare Source

Patch Changes

v3.13.3

Compare Source

Patch Changes
  • #​12362 f6d387c Thanks @​jerelmiller! - Fixes an issue where calling observableQuery.getCurrentResult() when the errorPolicy was set to all would return the networkStatus as NetworkStatus.ready when there were errors returned in the result. This has been corrected to report NetworkStatus.error.

    This bug also affected the useQuery and useLazyQuery hooks and may affect you if you check for networkStatus in your component.

v3.13.2

Compare Source

Patch Changes
  • #​12409 6aa2f3e Thanks @​phryneas! - To mitigate problems when Apollo Client ends up more than once in the bundle, some unique symbols were converted into Symbol.for calls.

  • #​12392 644bb26 Thanks @​Joja81! - Fixes an issue where the DeepOmit type would turn optional properties into required properties. This should only affect you if you were using the omitDeep or stripTypename utilities exported by Apollo Client.

  • #​12404 4332b88 Thanks @​jerelmiller! - Show NaN rather than converting to null in debug messages from MockLink for unmatched variables values.

v3.13.1

Compare Source

Patch Changes

v3.13.0

Compare Source

Minor Changes
  • #​12066 c01da5d Thanks @​jerelmiller! - Adds a new useSuspenseFragment hook.

    useSuspenseFragment suspends until data is complete. It is a drop-in replacement for useFragment when you prefer to use Suspense to control the loading state of a fragment. See the documentation for more details.

  • #​12174 ba5cc33 Thanks @​jerelmiller! - Ensure errors thrown in the onCompleted callback from useMutation don't call onError.

  • #​12340 716d02e Thanks @​phryneas! - Deprecate the onCompleted and onError callbacks of useQuery and useLazyQuery.
    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 to observableQuery.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-safe previousData property and a new complete property in the 2nd argument that determines whether previousData 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 the onCompleted callback of useMutation.

Patch Changes
  • #​12276 670f112 Thanks @​Cellule! - Fix the return type of the updateQuery function to allow for undefined. 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 option ignoreResults in useMutation.
    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 use useApolloClient to get your ApolloClient instance and call client.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 the variables property passed as the 2nd argument to the subscribeToMore callback. This was previously reported as the variables type for the subscription itself, but is now properly typed as the query variables.

v3.12.11

Compare Source

Patch Changes

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 is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot requested a review from a team as a code owner September 6, 2025 01:07
@changeset-bot
Copy link

changeset-bot bot commented Sep 6, 2025

⚠️ No Changeset found

Latest commit: 88d580e

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@apollo-librarian
Copy link

apollo-librarian bot commented Sep 6, 2025

✅ Docs preview has no changes

The preview was not built because there were no changes.

Build ID: bd48f4662e946048d92176d5
Build Logs: View logs


✅ AI Style Review — No Changes Detected

No MDX files were changed in this pull request.

Review Log: View detailed log

This review is AI-generated. Please use common sense when accepting these suggestions, as they may not always be accurate or appropriate for your specific context.

@codesandbox-ci
Copy link

codesandbox-ci bot commented Sep 6, 2025

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.

@renovate renovate bot force-pushed the renovate/apollo-client-4.x branch 2 times, most recently from 930d5ef to 98cd5ce Compare September 17, 2025 19:32
@renovate renovate bot force-pushed the renovate/apollo-client-4.x branch 5 times, most recently from 1f71963 to 58f0397 Compare October 1, 2025 16:23
@renovate renovate bot force-pushed the renovate/apollo-client-4.x branch 3 times, most recently from 952f2e2 to a7fc34f Compare October 9, 2025 16:17
@renovate renovate bot force-pushed the renovate/apollo-client-4.x branch 2 times, most recently from 2beff86 to 3bc7f00 Compare October 17, 2025 16:46
@renovate renovate bot force-pushed the renovate/apollo-client-4.x branch 2 times, most recently from 0ebc66b to e85b3b3 Compare October 27, 2025 21:37
@renovate renovate bot force-pushed the renovate/apollo-client-4.x branch 2 times, most recently from bc89364 to 2a80999 Compare November 3, 2025 22:55
@renovate renovate bot force-pushed the renovate/apollo-client-4.x branch 2 times, most recently from 91ed65b to 98b2b4f Compare November 5, 2025 22:01
@renovate renovate bot force-pushed the renovate/apollo-client-4.x branch 5 times, most recently from 1af96a0 to 702b03f Compare November 17, 2025 17:57
@renovate renovate bot force-pushed the renovate/apollo-client-4.x branch from 702b03f to 4bd8f26 Compare November 24, 2025 19:03
@renovate renovate bot force-pushed the renovate/apollo-client-4.x branch 2 times, most recently from 7719295 to 4351855 Compare December 18, 2025 18:30
@renovate renovate bot force-pushed the renovate/apollo-client-4.x branch 4 times, most recently from 5370a57 to b75ecf3 Compare January 16, 2026 02:00
@renovate renovate bot force-pushed the renovate/apollo-client-4.x branch 4 times, most recently from 7f91098 to f9df693 Compare January 21, 2026 09:52
@renovate renovate bot force-pushed the renovate/apollo-client-4.x branch from f9df693 to 71f3592 Compare January 28, 2026 22:10
@renovate renovate bot force-pushed the renovate/apollo-client-4.x branch from 71f3592 to d8585cd Compare February 5, 2026 18:38
@renovate renovate bot force-pushed the renovate/apollo-client-4.x branch 8 times, most recently from 73ab6e4 to 48cebac Compare February 23, 2026 18:38
@renovate renovate bot force-pushed the renovate/apollo-client-4.x branch 8 times, most recently from 3091c58 to 871194e Compare March 13, 2026 15:34
@renovate renovate bot force-pushed the renovate/apollo-client-4.x branch from 871194e to 88d580e Compare March 17, 2026 20:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants