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

Update dependency @apollo/client to v3.9.5 #10087

Merged
merged 1 commit into from
Mar 5, 2024

Conversation

renovate[bot]
Copy link
Contributor

@renovate renovate bot commented Mar 1, 2024

Mend Renovate

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
@apollo/client (source) 3.8.10 -> 3.9.5 age adoption passing confidence

Release Notes

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

v3.9.5

Compare Source

Patch Changes

v3.9.4

Compare Source

Patch Changes

v3.9.3

Compare Source

Patch Changes

v3.9.2

Compare Source

Patch Changes

v3.9.1

Compare Source

Patch Changes

v3.9.0

Compare Source

Minor Changes
Memory optimizations
  • #​11424 62f3b6d Thanks @​phryneas! - Simplify RetryLink, fix potential memory leak

    Historically, RetryLink would keep a values array of all previous values, in case the operation would get an additional subscriber at a later point in time.

    In practice, this could lead to a memory leak (#​11393) and did not serve any further purpose, as the resulting observable would only be subscribed to by Apollo Client itself, and only once - it would be wrapped in a Concast before being exposed to the user, and that Concast would handle subscribers on its own.

  • #​11435 5cce53e Thanks @​phryneas! - Deprecates canonizeResults.

    Using canonizeResults can result in memory leaks so we generally do not recommend using this option anymore. A future version of Apollo Client will contain a similar feature without the risk of memory leaks.

  • #​11254 d08970d Thanks @​benjamn! - Decouple canonicalStringify from ObjectCanon for better time and memory performance.

  • #​11356 cc4ac7e Thanks @​phryneas! - Fix a potential memory leak in FragmentRegistry.transform and FragmentRegistry.findFragmentSpreads that would hold on to passed-in DocumentNodes for too long.

  • #​11370 25e2cb4 Thanks @​phryneas! - parse function: improve memory management

    • use LRU WeakCache instead of Map to keep a limited number of parsed results
    • cache is initiated lazily, only when needed
    • expose parse.resetCache() method
  • #​11389 139acd1 Thanks @​phryneas! - documentTransform: use optimism and WeakCache instead of directly storing data on the Trie

  • #​11358 7d939f8 Thanks @​phryneas! - Fixes a potential memory leak in Concast that might have been triggered when Concast was used outside of Apollo Client.

  • #​11344 bd26676 Thanks @​phryneas! - Add a resetCache method to DocumentTransform and hook InMemoryCache.addTypenameTransform up to InMemoryCache.gc

  • #​11367 30d17bf Thanks @​phryneas! - print: use WeakCache instead of WeakMap

  • #​11387 4dce867 Thanks @​phryneas! - QueryManager.transformCache: use WeakCache instead of WeakMap

  • #​11369 2a47164 Thanks @​phryneas! - Persisted Query Link: improve memory management

    • use LRU WeakCache instead of WeakMap to keep a limited number of hash results
    • hash cache is initiated lazily, only when needed
    • expose persistedLink.resetHashCache() method
    • reset hash cache if the upstream server reports it doesn't accept persisted queries
  • #​10804 221dd99 Thanks @​phryneas! - use WeakMap in React Native with Hermes

  • #​11355 7d8e184 Thanks @​phryneas! - InMemoryCache.gc now also triggers FragmentRegistry.resetCaches (if there is a FragmentRegistry)

  • #​11409 2e7203b Thanks @​phryneas! - Adds an experimental ApolloClient.getMemoryInternals helper

  • #​11343 776631d Thanks @​phryneas! - Add reset method to print, hook up to InMemoryCache.gc

Suspense-enabled data fetching on user interaction with useLoadableQuery
  • #​11300 a815873 Thanks @​jerelmiller! - Introduces a new useLoadableQuery hook. This hook works similarly to useBackgroundQuery in that it returns a queryRef that can be used to suspend a component via the useReadQuery hook. It provides a more ergonomic way to load the query during a user interaction (for example when wanting to preload some data) that would otherwise be clunky with useBackgroundQuery.

    function App() {
      const [loadQuery, queryRef, { refetch, fetchMore, reset }] =
        useLoadableQuery(query, options);
    
      return (
        <>
          <button onClick={() => loadQuery(variables)}>Load query</button>
          <Suspense fallback={<SuspenseFallback />}>
            {queryRef && <Child queryRef={queryRef} />}
          </Suspense>
        </>
      );
    }
    
    function Child({ queryRef }) {
      const { data } = useReadQuery(queryRef);
    
      // ...
    }
Begin preloading outside of React with createQueryPreloader
  • #​11412 58db5c3 Thanks @​jerelmiller! - Add the ability to start preloading a query outside React to begin fetching as early as possible. Call createQueryPreloader to create a preloadQuery function which can be called to start fetching a query. This returns a queryRef which is passed to useReadQuery and suspended until the query is done fetching.
Testing utility improvements
  • #​11178 4d64a6f Thanks @​sebakerckhof! - Support re-using of mocks in the MockedProvider

  • #​6701 8d2b4e1 Thanks @​prowe! - Ability to dynamically match mocks

    Adds support for a new property MockedResponse.variableMatcher: a predicate function that accepts a variables param. If true, the variables will be passed into the ResultFunction to help dynamically build a response.

New useQueryRefHandlers hook
  • #​11412 58db5c3 Thanks @​jerelmiller! - Create a new useQueryRefHandlers hook that returns refetch and fetchMore functions for a given queryRef. This is useful to get access to handlers for a queryRef that was created by createQueryPreloader or when the handlers for a queryRef produced by a different component are inaccessible.

    const MyComponent({ queryRef }) {
      const { refetch, fetchMore } = useQueryRefHandlers(queryRef);
    
      // ...
    }
Bail out of optimisticResponse updates with the IGNORE sentinel object
  • #​11410 07fcf6a Thanks @​sf-twingate! - Allow returning IGNORE sentinel object from optimisticResponse functions to bail-out from the optimistic update.

    Consider this example:

    const UPDATE_COMMENT = gql`
      mutation UpdateComment($commentId: ID!, $commentContent: String!) {
        updateComment(commentId: $commentId, content: $commentContent) {
          id
          __typename
          content
        }
      }
    `;
    
    function CommentPageWithData() {
      const [mutate] = useMutation(UPDATE_COMMENT);
      return (
        <Comment
          updateComment={({ commentId, commentContent }) =>
            mutate({
              variables: { commentId, commentContent },
              optimisticResponse: (vars, { IGNORE }) => {
                if (commentContent === "foo") {
                  // conditionally bail out of optimistic updates
                  return IGNORE;
                }
                return {
                  updateComment: {
                    id: commentId,
                    __typename: "Comment",
                    content: commentContent,
                  },
                };
              },
            })
          }
        />
      );
    }

    The IGNORE sentinel can be destructured from the second parameter in the callback function signature passed to optimisticResponse.

    const preloadQuery = createQueryPreloader(client);
    const queryRef = preloadQuery(QUERY, { variables, ...otherOptions });
    
    function App() {
      return {
        <Suspense fallback={<div>Loading</div>}>
          <MyQuery />
        </Suspense>
      }
    }
    
    function MyQuery() {
      const { data } = useReadQuery(queryRef);
    
      // do something with data
    }
Network adapters for multipart subscriptions usage with Relay and urql
  • #​11301 46ab032 Thanks @​alessbell! - Add multipart subscription network adapters for Relay and urql

    Relay
    import { createFetchMultipartSubscription } from "@&#8203;apollo/client/utilities/subscriptions/relay";
    import { Environment, Network, RecordSource, Store } from "relay-runtime";
    
    const fetchMultipartSubs = createFetchMultipartSubscription(
      "http://localhost:4000",
    );
    
    const network = Network.create(fetchQuery, fetchMultipartSubs);
    
    export const RelayEnvironment = new Environment({
      network,
      store: new Store(new RecordSource()),
    });
    Urql
    import { createFetchMultipartSubscription } from "@&#8203;apollo/client/utilities/subscriptions/urql";
    import { Client, fetchExchange, subscriptionExchange } from "@&#8203;urql/core";
    
    const url = "http://localhost:4000";
    
    const multipartSubscriptionForwarder = createFetchMultipartSubscription(url);
    
    const client = new Client({
      url,
      exchanges: [
        fetchExchange,
        subscriptionExchange({
          forwardSubscription: multipartSubscriptionForwarder,
        }),
      ],
    });
skipPollAttempt callback function
  • #​11397 3f7eecb Thanks @​aditya-kumawat! - Adds a new skipPollAttempt callback function that's called whenever a refetch attempt occurs while polling. If the function returns true, the refetch is skipped and not reattempted until the next poll interval. This will solve the frequent use-case of disabling polling when the window is inactive.

    useQuery(QUERY, {
      pollInterval: 1000,
      skipPollAttempt: () => document.hidden, // or !document.hasFocus()
    });
    // or define it globally
    new ApolloClient({
      defaultOptions: {
        watchQuery: {
          skipPollAttempt: () => document.hidden, // or !document.hasFocus()
        },
      },
    });
QueryManager.inFlightLinkObservables now uses a strong Trie as an internal data structure
  • #​11345 1759066 Thanks @​phryneas!

    Warning: requires @apollo/experimental-nextjs-app-support update

    If you are using @apollo/experimental-nextjs-app-support, you will need to update that to at least 0.5.2, as it accesses this internal data structure.

More Minor Changes

  • #​11202 7c2bc08 Thanks @​benjamn! - Prevent QueryInfo#markResult mutation of result.data and return cache data consistently whether complete or incomplete.

  • #​11442 4b6f2bc Thanks @​jerelmiller! - Remove the need to call retain from useLoadableQuery since useReadQuery will now retain the query. This means that a queryRef that is not consumed by useReadQuery within the given autoDisposeTimeoutMs will now be auto diposed for you.

    Thanks to #​11412, disposed query refs will be automatically resubscribed to the query when consumed by useReadQuery after it has been disposed.

  • #​11438 6d46ab9 Thanks @​jerelmiller! - Remove the need to call retain from useBackgroundQuery since useReadQuery will now retain the query. This means that a queryRef that is not consumed by useReadQuery within the given autoDisposeTimeoutMs will now be auto diposed for you.

    Thanks to #​11412, disposed query refs will be automatically resubscribed to the query when consumed by useReadQuery after it has been disposed.

  • #​11175 d6d1491 Thanks @​phryneas! - To work around issues in React Server Components, especially with bundling for
    the Next.js "edge" runtime we now use an external package to wrap react imports
    instead of importing React directly.

  • #​11495 1190aa5 Thanks @​jerelmiller! - Increase the default memory limits for executeSelectionSet and executeSelectionSetArray.

Patch Changes

  • #​11275 3862f9b Thanks @​phryneas! - Add a defaultContext option and property on ApolloClient, e.g. for keeping track of changing auth tokens or dependency injection.

    This can be used e.g. in authentication scenarios, where a new token might be generated outside of the link chain and should passed into the link chain.

    import { ApolloClient, createHttpLink, InMemoryCache } from "@&#8203;apollo/client";
    import { setContext } from "@&#8203;apollo/client/link/context";
    
    const httpLink = createHttpLink({
      uri: "/graphql",
    });
    
    const authLink = setContext((_, { headers, token }) => {
      return {
        headers: {
          ...headers,
          authorization: token ? `Bearer ${token}` : "",
        },
      };
    });
    
    const client = new ApolloClient({
      link: authLink.concat(httpLink),
      cache: new InMemoryCache(),
    });
    
    // somewhere else in your application
    function onNewToken(newToken) {
      // token can now be changed for future requests without need for a global
      // variable, scoped ref or recreating the client
      client.defaultContext.token = newToken;
    }
  • #​11443 ff5a332 Thanks @​phryneas! - Adds a deprecation warning to the HOC and render prop APIs.

    The HOC and render prop APIs have already been deprecated since 2020,
    but we previously didn't have a @deprecated tag in the DocBlocks.

  • #​11385 d9ca4f0 Thanks @​phryneas! - ensure defaultContext is also used for mutations and subscriptions

  • #​11503 67f62e3 Thanks @​jerelmiller! - Release changes from v3.8.10

  • #​11078 14edebe Thanks @​phryneas! - ObservableQuery: prevent reporting results of previous queries if the variables changed since

  • #​11439 33454f0 Thanks @​jerelmiller! - Address bundling issue introduced in #​11412 where the react/cache internals ended up duplicated in the bundle. This was due to the fact that we had a react/hooks entrypoint that imported these files along with the newly introduced createQueryPreloader function, which lived outside of the react/hooks folder.

  • #​11371 ebd8fe2 Thanks @​phryneas! - Clarify types of EntityStore.makeCacheKey.


Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Enabled.

Rebasing: Whenever PR becomes conflicted, 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 has been generated by Mend Renovate. View repository job log here.

@renovate renovate bot enabled auto-merge (squash) March 1, 2024 18:21
@renovate renovate bot changed the title fix(deps): update dependency @apollo/client to v3.9.5 Update dependency @apollo/client to v3.9.5 Mar 3, 2024
@ahaywood ahaywood added this to the next-release milestone Mar 5, 2024
@ahaywood ahaywood added fixture-ok Override the test project fixture check changelog-ok release:chore This PR is a chore (means nothing for users) labels Mar 5, 2024
@renovate renovate bot merged commit 8d01d38 into main Mar 5, 2024
43 of 51 checks passed
@renovate renovate bot deleted the renovate/apollo-graphql-packages branch March 5, 2024 17:15
ahaywood pushed a commit that referenced this pull request Mar 5, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@apollo/client](https://www.apollographql.com/docs/react/)
([source](https://github.com/apollographql/apollo-client)) | [`3.8.10`
->
`3.9.5`](https://renovatebot.com/diffs/npm/@apollo%2fclient/3.8.10/3.9.5)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@apollo%2fclient/3.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@apollo%2fclient/3.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@apollo%2fclient/3.8.10/3.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@apollo%2fclient/3.8.10/3.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

<details>
<summary>apollographql/apollo-client (@&#8203;apollo/client)</summary>

[`v3.9.5`](https://github.com/apollographql/apollo-client/blob/HEAD/CHANGELOG.md#395)

[Compare
Source](https://github.com/apollographql/apollo-client/compare/v3.9.4...v3.9.5)

-
[#&#8203;11595](https://github.com/apollographql/apollo-client/pull/11595)
[`8c20955`](https://github.com/apollographql/apollo-client/commit/8c20955874562e5b2ab35557325e047b059bc4fc)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! - Bumps the
dependency `rehackt` to 0.0.5

-
[#&#8203;11592](https://github.com/apollographql/apollo-client/pull/11592)
[`1133469`](https://github.com/apollographql/apollo-client/commit/1133469bd91ff76b9815e815a454a79d8e23a9bc)
Thanks [@&#8203;Stephen2](https://github.com/Stephen2)! - Strengthen
`MockedResponse.newData` type

-
[#&#8203;11579](https://github.com/apollographql/apollo-client/pull/11579)
[`1ba2fd9`](https://github.com/apollographql/apollo-client/commit/1ba2fd919f79dfdc7b9d3f7d1a7aa5918e648349)
Thanks [@&#8203;jerelmiller](https://github.com/jerelmiller)! - Fix
issue where partial data is reported to `useQuery` when using
`notifyOnNetworkStatusChange` after it errors while another overlapping
query succeeds.

-
[#&#8203;11579](https://github.com/apollographql/apollo-client/pull/11579)
[`1ba2fd9`](https://github.com/apollographql/apollo-client/commit/1ba2fd919f79dfdc7b9d3f7d1a7aa5918e648349)
Thanks [@&#8203;jerelmiller](https://github.com/jerelmiller)! - Fix an
issue where a partial cache write for an errored query would result in
automatically refetching that query.

-
[#&#8203;11562](https://github.com/apollographql/apollo-client/pull/11562)
[`65ab695`](https://github.com/apollographql/apollo-client/commit/65ab695470741e8dcaef1ebd7742c3c397526354)
Thanks [@&#8203;mspiess](https://github.com/mspiess)! - Mocks with an
infinite delay no longer require result or error

[`v3.9.4`](https://github.com/apollographql/apollo-client/blob/HEAD/CHANGELOG.md#394)

[Compare
Source](https://github.com/apollographql/apollo-client/compare/v3.9.3...v3.9.4)

-
[#&#8203;11403](https://github.com/apollographql/apollo-client/pull/11403)
[`b0c4f3a`](https://github.com/apollographql/apollo-client/commit/b0c4f3ad8198981a229b46dc430345a76e577e9c)
Thanks [@&#8203;jerelmiller](https://github.com/jerelmiller)! - Fix
issue in `useLazyQuery` that results in a double network call when
calling the execute function with no arguments after having called it
previously with another set of arguments.

-
[#&#8203;11576](https://github.com/apollographql/apollo-client/pull/11576)
[`e855d00`](https://github.com/apollographql/apollo-client/commit/e855d00447e4d9ae478d98f6796d842ef6cc76d1)
Thanks [@&#8203;alessbell](https://github.com/alessbell)! - Revert PR
[#&#8203;11202](https://github.com/apollographql/apollo-client/pull/11202)
to fix caching bug reported in
[#&#8203;11560](https://github.com/apollographql/apollo-client/issues/11560)

[`v3.9.3`](https://github.com/apollographql/apollo-client/blob/HEAD/CHANGELOG.md#393)

[Compare
Source](https://github.com/apollographql/apollo-client/compare/v3.9.2...v3.9.3)

-
[#&#8203;11525](https://github.com/apollographql/apollo-client/pull/11525)
[`dce923a`](https://github.com/apollographql/apollo-client/commit/dce923ae57eb6b6d889e2980635cb90e2c6cbca3)
Thanks [@&#8203;vezaynk](https://github.com/vezaynk)! - Allows passing
in client via options to useFragment

-
[#&#8203;11558](https://github.com/apollographql/apollo-client/pull/11558)
[`8cba16f`](https://github.com/apollographql/apollo-client/commit/8cba16f041609443111ecf5fb58faea1b3e79569)
Thanks [@&#8203;alessbell](https://github.com/alessbell)! - Fix
[`unbound-method`](https://github.com/apollographql/apollo-client/issues/11554)
linter error on ObservableQuery methods exposed on useQuery's
QueryResult object.

[`v3.9.2`](https://github.com/apollographql/apollo-client/blob/HEAD/CHANGELOG.md#392)

[Compare
Source](https://github.com/apollographql/apollo-client/compare/v3.9.1...v3.9.2)

-
[#&#8203;11552](https://github.com/apollographql/apollo-client/pull/11552)
[`6ac2b0c`](https://github.com/apollographql/apollo-client/commit/6ac2b0ce4d999c63478d85b40ad56ccda9624797)
Thanks [@&#8203;jerelmiller](https://github.com/jerelmiller)! - Fix
import in `useLazyRef` causing import issues in the nextjs package.

[`v3.9.1`](https://github.com/apollographql/apollo-client/blob/HEAD/CHANGELOG.md#391)

[Compare
Source](https://github.com/apollographql/apollo-client/compare/v3.9.0...v3.9.1)

-
[#&#8203;11516](https://github.com/apollographql/apollo-client/pull/11516)
[`8390fea`](https://github.com/apollographql/apollo-client/commit/8390fea13175bada8361ba5f0df2e43197085aba)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! - Fix an
incorrect string substitution in a warning message.

-
[#&#8203;11515](https://github.com/apollographql/apollo-client/pull/11515)
[`c9bf93b`](https://github.com/apollographql/apollo-client/commit/c9bf93bdc2816f7fdba96961e1435f463f440bd1)
Thanks [@&#8203;vladar](https://github.com/vladar)! - Avoid redundant
refetchQueries call for mutation with no-cache policy (fixes
[#&#8203;10238](https://github.com/apollographql/apollo-client/issues/10238))

-
[#&#8203;11545](https://github.com/apollographql/apollo-client/pull/11545)
[`84a6bea`](https://github.com/apollographql/apollo-client/commit/84a6beaeae69acdffea49ba6b8242752cc188172)
Thanks [@&#8203;alessbell](https://github.com/alessbell)! - Remove
error thrown by `inFlightLinkObservables` intended to be removed before
3.9 release.

[`v3.9.0`](https://github.com/apollographql/apollo-client/blob/HEAD/CHANGELOG.md#390)

[Compare
Source](https://github.com/apollographql/apollo-client/compare/v3.8.10...v3.9.0)

-
[#&#8203;11424](https://github.com/apollographql/apollo-client/pull/11424)
[`62f3b6d`](https://github.com/apollographql/apollo-client/commit/62f3b6d0e89611e27d9f29812ee60e5db5963fd6)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! - Simplify
RetryLink, fix potential memory leak

Historically, `RetryLink` would keep a `values` array of all previous
values, in case the operation would get an additional subscriber at a
later point in time.

In practice, this could lead to a memory leak
([#&#8203;11393](https://github.com/apollographql/apollo-client/pull/11393))
and did not serve any further purpose, as the resulting observable would
only be subscribed to by Apollo Client itself, and only once - it would
be wrapped in a `Concast` before being exposed to the user, and that
`Concast` would handle subscribers on its own.

-
[#&#8203;11435](https://github.com/apollographql/apollo-client/pull/11435)
[`5cce53e`](https://github.com/apollographql/apollo-client/commit/5cce53e83b976f85d2d2b06e28cc38f01324fea1)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! - Deprecates
`canonizeResults`.

Using `canonizeResults` can result in memory leaks so we generally do
not recommend using this option anymore. A future version of Apollo
Client will contain a similar feature without the risk of memory leaks.

-
[#&#8203;11254](https://github.com/apollographql/apollo-client/pull/11254)
[`d08970d`](https://github.com/apollographql/apollo-client/commit/d08970d348cf4ad6d80c6baf85b4a4cd4034a3bb)
Thanks [@&#8203;benjamn](https://github.com/benjamn)! - Decouple
`canonicalStringify` from `ObjectCanon` for better time and memory
performance.

-
[#&#8203;11356](https://github.com/apollographql/apollo-client/pull/11356)
[`cc4ac7e`](https://github.com/apollographql/apollo-client/commit/cc4ac7e1917f046bcd177882727864eed40b910e)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! - Fix a
potential memory leak in `FragmentRegistry.transform` and
`FragmentRegistry.findFragmentSpreads` that would hold on to passed-in
`DocumentNodes` for too long.

-
[#&#8203;11370](https://github.com/apollographql/apollo-client/pull/11370)
[`25e2cb4`](https://github.com/apollographql/apollo-client/commit/25e2cb431c76ec5aa88202eaacbd98fad42edc7f)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! - `parse`
function: improve memory management

- use LRU `WeakCache` instead of `Map` to keep a limited number of
parsed results
    -   cache is initiated lazily, only when needed
    -   expose `parse.resetCache()` method

-
[#&#8203;11389](https://github.com/apollographql/apollo-client/pull/11389)
[`139acd1`](https://github.com/apollographql/apollo-client/commit/139acd1153afa1445b69dcb4e139668ab8c5889a)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! -
`documentTransform`: use `optimism` and `WeakCache` instead of directly
storing data on the `Trie`

-
[#&#8203;11358](https://github.com/apollographql/apollo-client/pull/11358)
[`7d939f8`](https://github.com/apollographql/apollo-client/commit/7d939f80fbc2c419c58a6c55b6a35ee7474d0379)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! - Fixes a
potential memory leak in `Concast` that might have been triggered when
`Concast` was used outside of Apollo Client.

-
[#&#8203;11344](https://github.com/apollographql/apollo-client/pull/11344)
[`bd26676`](https://github.com/apollographql/apollo-client/commit/bd2667619700139af32a45364794d11f845ab6cf)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! - Add a
`resetCache` method to `DocumentTransform` and hook
`InMemoryCache.addTypenameTransform` up to `InMemoryCache.gc`

-
[#&#8203;11367](https://github.com/apollographql/apollo-client/pull/11367)
[`30d17bf`](https://github.com/apollographql/apollo-client/commit/30d17bfebe44dbfa7b78c8982cfeb49afd37129c)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! - `print`: use
`WeakCache` instead of `WeakMap`

-
[#&#8203;11387](https://github.com/apollographql/apollo-client/pull/11387)
[`4dce867`](https://github.com/apollographql/apollo-client/commit/4dce8673b1757d8a3a4edd2996d780e86fad14e3)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! -
`QueryManager.transformCache`: use `WeakCache` instead of `WeakMap`

-
[#&#8203;11369](https://github.com/apollographql/apollo-client/pull/11369)
[`2a47164`](https://github.com/apollographql/apollo-client/commit/2a471646616e3af1b5c039e961f8d5717fad8f32)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! - Persisted
Query Link: improve memory management

- use LRU `WeakCache` instead of `WeakMap` to keep a limited number of
hash results
    -   hash cache is initiated lazily, only when needed
    -   expose `persistedLink.resetHashCache()` method
- reset hash cache if the upstream server reports it doesn't accept
persisted queries

-
[#&#8203;10804](https://github.com/apollographql/apollo-client/pull/10804)
[`221dd99`](https://github.com/apollographql/apollo-client/commit/221dd99ffd1990f8bd0392543af35e9b08d0fed8)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! - use WeakMap
in React Native with Hermes

-
[#&#8203;11355](https://github.com/apollographql/apollo-client/pull/11355)
[`7d8e184`](https://github.com/apollographql/apollo-client/commit/7d8e18493cd13134726c6643cbf0fadb08be2d37)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! -
InMemoryCache.gc now also triggers FragmentRegistry.resetCaches (if
there is a FragmentRegistry)

-
[#&#8203;11409](https://github.com/apollographql/apollo-client/pull/11409)
[`2e7203b`](https://github.com/apollographql/apollo-client/commit/2e7203b3a9618952ddb522627ded7cceabd7f250)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! - Adds an
experimental `ApolloClient.getMemoryInternals` helper

-
[#&#8203;11343](https://github.com/apollographql/apollo-client/pull/11343)
[`776631d`](https://github.com/apollographql/apollo-client/commit/776631de4500d56252f6f5fdaf29a81c41dfbdc7)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! - Add `reset`
method to `print`, hook up to `InMemoryCache.gc`

`useLoadableQuery`

-
[#&#8203;11300](https://github.com/apollographql/apollo-client/pull/11300)
[`a815873`](https://github.com/apollographql/apollo-client/commit/a8158733cfa3e65180ec23518d657ea41894bb2b)
Thanks [@&#8203;jerelmiller](https://github.com/jerelmiller)! -
Introduces a new `useLoadableQuery` hook. This hook works similarly to
`useBackgroundQuery` in that it returns a `queryRef` that can be used to
suspend a component via the `useReadQuery` hook. It provides a more
ergonomic way to load the query during a user interaction (for example
when wanting to preload some data) that would otherwise be clunky with
`useBackgroundQuery`.

    ```tsx
    function App() {
      const [loadQuery, queryRef, { refetch, fetchMore, reset }] =
        useLoadableQuery(query, options);

      return (
        <>
<button onClick={() => loadQuery(variables)}>Load query</button>
          <Suspense fallback={<SuspenseFallback />}>
            {queryRef && <Child queryRef={queryRef} />}
          </Suspense>
        </>
      );
    }

    function Child({ queryRef }) {
      const { data } = useReadQuery(queryRef);

      // ...
    }
    ```

-
[#&#8203;11412](https://github.com/apollographql/apollo-client/pull/11412)
[`58db5c3`](https://github.com/apollographql/apollo-client/commit/58db5c3295b88162f91019f0898f6baa4b9cced6)
Thanks [@&#8203;jerelmiller](https://github.com/jerelmiller)! - Add
the ability to start preloading a query outside React to begin fetching
as early as possible. Call `createQueryPreloader` to create a
`preloadQuery` function which can be called to start fetching a query.
This returns a `queryRef` which is passed to `useReadQuery` and
suspended until the query is done fetching.

-
[#&#8203;11178](https://github.com/apollographql/apollo-client/pull/11178)
[`4d64a6f`](https://github.com/apollographql/apollo-client/commit/4d64a6fa2ad5abe6f7f172c164f5e1fc2cb89829)
Thanks [@&#8203;sebakerckhof](https://github.com/sebakerckhof)! -
Support re-using of mocks in the MockedProvider

-
[#&#8203;6701](https://github.com/apollographql/apollo-client/pull/6701)
[`8d2b4e1`](https://github.com/apollographql/apollo-client/commit/8d2b4e107d7c21563894ced3a65d631183b58fd9)
Thanks [@&#8203;prowe](https://github.com/prowe)! - Ability to
dynamically match mocks

Adds support for a new property `MockedResponse.variableMatcher`: a
predicate function that accepts a `variables` param. If `true`, the
`variables` will be passed into the `ResultFunction` to help dynamically
build a response.

-
[#&#8203;11412](https://github.com/apollographql/apollo-client/pull/11412)
[`58db5c3`](https://github.com/apollographql/apollo-client/commit/58db5c3295b88162f91019f0898f6baa4b9cced6)
Thanks [@&#8203;jerelmiller](https://github.com/jerelmiller)! - Create
a new `useQueryRefHandlers` hook that returns `refetch` and `fetchMore`
functions for a given `queryRef`. This is useful to get access to
handlers for a `queryRef` that was created by `createQueryPreloader` or
when the handlers for a `queryRef` produced by a different component are
inaccessible.

    ```jsx
    const MyComponent({ queryRef }) {
      const { refetch, fetchMore } = useQueryRefHandlers(queryRef);

      // ...
    }
    ```

sentinel object

-
[#&#8203;11410](https://github.com/apollographql/apollo-client/pull/11410)
[`07fcf6a`](https://github.com/apollographql/apollo-client/commit/07fcf6a3bf5bc78ffe6f3e598897246b4da02cbb)
Thanks [@&#8203;sf-twingate](https://github.com/sf-twingate)! - Allow
returning `IGNORE` sentinel object from `optimisticResponse` functions
to bail-out from the optimistic update.

    Consider this example:

    ```jsx
    const UPDATE_COMMENT = gql`
mutation UpdateComment($commentId: ID!, $commentContent: String!) {
        updateComment(commentId: $commentId, content: $commentContent) {
          id
          __typename
          content
        }
      }
    `;

    function CommentPageWithData() {
      const [mutate] = useMutation(UPDATE_COMMENT);
      return (
        <Comment
          updateComment={({ commentId, commentContent }) =>
            mutate({
              variables: { commentId, commentContent },
              optimisticResponse: (vars, { IGNORE }) => {
                if (commentContent === "foo") {
                  // conditionally bail out of optimistic updates
                  return IGNORE;
                }
                return {
                  updateComment: {
                    id: commentId,
                    __typename: "Comment",
                    content: commentContent,
                  },
                };
              },
            })
          }
        />
      );
    }
    ```

The `IGNORE` sentinel can be destructured from the second parameter in
the callback function signature passed to `optimisticResponse`.

    ```tsx
    const preloadQuery = createQueryPreloader(client);
const queryRef = preloadQuery(QUERY, { variables, ...otherOptions });

    function App() {
      return {
        <Suspense fallback={<div>Loading</div>}>
          <MyQuery />
        </Suspense>
      }
    }

    function MyQuery() {
      const { data } = useReadQuery(queryRef);

      // do something with data
    }
    ```

urql

-
[#&#8203;11301](https://github.com/apollographql/apollo-client/pull/11301)
[`46ab032`](https://github.com/apollographql/apollo-client/commit/46ab032af83a01f184bfcce5edba4b55dbb2962a)
Thanks [@&#8203;alessbell](https://github.com/alessbell)! - Add
multipart subscription network adapters for Relay and urql

    ##### Relay

    ```tsx
import { createFetchMultipartSubscription } from
"@&#8203;apollo/client/utilities/subscriptions/relay";
import { Environment, Network, RecordSource, Store } from
"relay-runtime";

    const fetchMultipartSubs = createFetchMultipartSubscription(
      "http://localhost:4000",
    );

    const network = Network.create(fetchQuery, fetchMultipartSubs);

    export const RelayEnvironment = new Environment({
      network,
      store: new Store(new RecordSource()),
    });
    ```

    ##### Urql

    ```tsx
import { createFetchMultipartSubscription } from
"@&#8203;apollo/client/utilities/subscriptions/urql";
import { Client, fetchExchange, subscriptionExchange } from
"@&#8203;urql/core";

    const url = "http://localhost:4000";

const multipartSubscriptionForwarder =
createFetchMultipartSubscription(url);

    const client = new Client({
      url,
      exchanges: [
        fetchExchange,
        subscriptionExchange({
          forwardSubscription: multipartSubscriptionForwarder,
        }),
      ],
    });
    ```

-
[#&#8203;11397](https://github.com/apollographql/apollo-client/pull/11397)
[`3f7eecb`](https://github.com/apollographql/apollo-client/commit/3f7eecbfbd4f4444cffcaac7dd9fd225c8c2a401)
Thanks [@&#8203;aditya-kumawat](https://github.com/aditya-kumawat)! -
Adds a new `skipPollAttempt` callback function that's called whenever a
refetch attempt occurs while polling. If the function returns `true`,
the refetch is skipped and not reattempted until the next poll interval.
This will solve the frequent use-case of disabling polling when the
window is inactive.

    ```ts
    useQuery(QUERY, {
      pollInterval: 1000,
      skipPollAttempt: () => document.hidden, // or !document.hasFocus()
    });
    // or define it globally
    new ApolloClient({
      defaultOptions: {
        watchQuery: {
skipPollAttempt: () => document.hidden, // or !document.hasFocus()
        },
      },
    });
    ```

an internal data structure

-
[#&#8203;11345](https://github.com/apollographql/apollo-client/pull/11345)
[`1759066`](https://github.com/apollographql/apollo-client/commit/1759066a8f9a204e49228568aef9446a64890ff3)
Thanks [@&#8203;phryneas](https://github.com/phryneas)!

If you are using `@apollo/experimental-nextjs-app-support`, you will
need to update that to at least 0.5.2, as it accesses this internal data
structure.

<details open>
  <summary><h4>More Minor Changes</h4></summary>

-
[#&#8203;11202](https://github.com/apollographql/apollo-client/pull/11202)
[`7c2bc08`](https://github.com/apollographql/apollo-client/commit/7c2bc08b2ab46b9aa181d187a27aec2ad7129599)
Thanks [@&#8203;benjamn](https://github.com/benjamn)! - Prevent
`QueryInfo#markResult` mutation of `result.data` and return cache data
consistently whether complete or incomplete.

-
[#&#8203;11442](https://github.com/apollographql/apollo-client/pull/11442)
[`4b6f2bc`](https://github.com/apollographql/apollo-client/commit/4b6f2bccf3ba94643b38689b32edd2839e47aec1)
Thanks [@&#8203;jerelmiller](https://github.com/jerelmiller)! - Remove
the need to call `retain` from `useLoadableQuery` since `useReadQuery`
will now retain the query. This means that a `queryRef` that is not
consumed by `useReadQuery` within the given `autoDisposeTimeoutMs` will
now be auto diposed for you.

Thanks to
[#&#8203;11412](https://github.com/apollographql/apollo-client/pull/11412),
disposed query refs will be automatically resubscribed to the query when
consumed by `useReadQuery` after it has been disposed.

-
[#&#8203;11438](https://github.com/apollographql/apollo-client/pull/11438)
[`6d46ab9`](https://github.com/apollographql/apollo-client/commit/6d46ab930a5e9bd5cae153d3b75b8966784fcd4e)
Thanks [@&#8203;jerelmiller](https://github.com/jerelmiller)! - Remove
the need to call `retain` from `useBackgroundQuery` since `useReadQuery`
will now retain the query. This means that a `queryRef` that is not
consumed by `useReadQuery` within the given `autoDisposeTimeoutMs` will
now be auto diposed for you.

Thanks to
[#&#8203;11412](https://github.com/apollographql/apollo-client/pull/11412),
disposed query refs will be automatically resubscribed to the query when
consumed by `useReadQuery` after it has been disposed.

-
[#&#8203;11175](https://github.com/apollographql/apollo-client/pull/11175)
[`d6d1491`](https://github.com/apollographql/apollo-client/commit/d6d14911c40782cd6d69167b6f6169c890091ccb)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! - To work
around issues in React Server Components, especially with bundling for
the Next.js "edge" runtime we now use an external package to wrap
`react` imports
    instead of importing React directly.

-
[#&#8203;11495](https://github.com/apollographql/apollo-client/pull/11495)
[`1190aa5`](https://github.com/apollographql/apollo-client/commit/1190aa59a106217f7192c1f81099adfa5e4365c1)
Thanks [@&#8203;jerelmiller](https://github.com/jerelmiller)! -
Increase the default memory limits for `executeSelectionSet` and
`executeSelectionSetArray`.

</details>

<details open>
  <summary><h3>Patch Changes</h3></summary>

-
[#&#8203;11275](https://github.com/apollographql/apollo-client/pull/11275)
[`3862f9b`](https://github.com/apollographql/apollo-client/commit/3862f9ba9086394c4cf4c2ecd99e8e0f6cf44885)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! - Add a
`defaultContext` option and property on `ApolloClient`, e.g. for keeping
track of changing auth tokens or dependency injection.

This can be used e.g. in authentication scenarios, where a new token
might be generated outside of the link chain and should passed into the
link chain.

    ```js
import { ApolloClient, createHttpLink, InMemoryCache } from
"@&#8203;apollo/client";
    import { setContext } from "@&#8203;apollo/client/link/context";

    const httpLink = createHttpLink({
      uri: "/graphql",
    });

    const authLink = setContext((_, { headers, token }) => {
      return {
        headers: {
          ...headers,
          authorization: token ? `Bearer ${token}` : "",
        },
      };
    });

    const client = new ApolloClient({
      link: authLink.concat(httpLink),
      cache: new InMemoryCache(),
    });

    // somewhere else in your application
    function onNewToken(newToken) {
// token can now be changed for future requests without need for a
global
      // variable, scoped ref or recreating the client
      client.defaultContext.token = newToken;
    }
    ```

-
[#&#8203;11443](https://github.com/apollographql/apollo-client/pull/11443)
[`ff5a332`](https://github.com/apollographql/apollo-client/commit/ff5a332ff8b190c418df25371e36719d70061ebe)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! - Adds a
deprecation warning to the HOC and render prop APIs.

The HOC and render prop APIs have already been deprecated since 2020,
    but we previously didn't have a `@deprecated` tag in the DocBlocks.

-
[#&#8203;11385](https://github.com/apollographql/apollo-client/pull/11385)
[`d9ca4f0`](https://github.com/apollographql/apollo-client/commit/d9ca4f0821c66ae4f03cf35a7ac93fe604cc6de3)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! - ensure
`defaultContext` is also used for mutations and subscriptions

-
[#&#8203;11503](https://github.com/apollographql/apollo-client/pull/11503)
[`67f62e3`](https://github.com/apollographql/apollo-client/commit/67f62e359bc471787d066319326e5582b4a635c8)
Thanks [@&#8203;jerelmiller](https://github.com/jerelmiller)! -
Release changes from
[`v3.8.10`](https://github.com/apollographql/apollo-client/releases/tag/v3.8.10)

-
[#&#8203;11078](https://github.com/apollographql/apollo-client/pull/11078)
[`14edebe`](https://github.com/apollographql/apollo-client/commit/14edebebefb7634c32b921d02c1c85c6c8737989)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! -
ObservableQuery: prevent reporting results of previous queries if the
variables changed since

-
[#&#8203;11439](https://github.com/apollographql/apollo-client/pull/11439)
[`33454f0`](https://github.com/apollographql/apollo-client/commit/33454f0a40a05ea2b00633bda20a84d0ec3a4f4d)
Thanks [@&#8203;jerelmiller](https://github.com/jerelmiller)! -
Address bundling issue introduced in
[#&#8203;11412](https://github.com/apollographql/apollo-client/pull/11412)
where the `react/cache` internals ended up duplicated in the bundle.
This was due to the fact that we had a `react/hooks` entrypoint that
imported these files along with the newly introduced
`createQueryPreloader` function, which lived outside of the
`react/hooks` folder.

-
[#&#8203;11371](https://github.com/apollographql/apollo-client/pull/11371)
[`ebd8fe2`](https://github.com/apollographql/apollo-client/commit/ebd8fe2c1b8b50bfeb2da20aeca5671300fb5564)
Thanks [@&#8203;phryneas](https://github.com/phryneas)! - Clarify
types of `EntityStore.makeCacheKey`.

</details>

</details>

---

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

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

---

- [ ] <!-- 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://developer.mend.io/github/redwoodjs/redwood).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMjAuMiIsInVwZGF0ZWRJblZlciI6IjM3LjIyMC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
dac09 added a commit that referenced this pull request Mar 6, 2024
…support

* 'main' of github.com:redwoodjs/redwood: (30 commits)
  fix(scenario): Make sure to cleanup even if test fails (#10112)
  Update babel monorepo to v7.24.0 (#10090)
  Update storybook monorepo to v7.6.17 (#10089)
  Update dependency @apollo/client to v3.9.5 (#10087)
  fix(serve): Allow periods in most paths (#10114)
  feat(rsc-streaming): Integrating RSC builds with Streaming and Client side hydration (#10031)
  chore(style): getDefaultViteConfig source format (#10111)
  chore(refactor): vite - extract default vite config (#10110)
  chore(comment): cli index FIXME comment about ugly big red box
  RSC: rscBuildAnalyze: Start at web/src/ (#10109)
  RSC: ensureProcessDirWeb() (#10108)
  RSC: Extract webpack shims into their own file (#10107)
  RSC: Remove completed TODO comment
  RSC: Babel react plugin not needed for analyze phase (#10106)
  RSC: runFeServer: wrap RSC code with `if (rscEnabled)` (#10105)
  RSC: Update comments, naming etc based on Danny's input (#10104)
  RSC: Rename to buildRscClientAndServer (#10103)
  RSC: Rename to rscBuildForServer, and tweak some comments (#10102)
  SSR: Extract buildForStreamingServer function (#10099)
  chore(unit-tests): Silence middleware error logging (#10097)
  ...
@jtoar jtoar modified the milestones: next-release, v7.1.0 Mar 7, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
fixture-ok Override the test project fixture check release:chore This PR is a chore (means nothing for users)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants