apollographql / apollo-client

:rocket: Β A fully-featured, production ready caching GraphQL client for every UI framework and GraphQL server.
https://apollographql.com/client
MIT License
19.38k stars 2.66k forks source link

Fix issue returning arrays from cache.modify modifier functions when the array contains a union type #11994

Closed jerelmiller closed 3 months ago

jerelmiller commented 3 months ago

Fixes an issue with the following type:

cache.modify<{
  union: Array<
    | { __typename: "Type1"; a: string }
    | { __typename: "Type2"; b: string }
  >;
}>({
  fields: {
    union(field) {
      return field.filter((a) => a);
    },
  },
});

This PR also makes it possible to return a DeepPartial object for fields that are more complex types and don't query for the whole value:

cache.modify<{
  union: Array<
    | { __typename: "Type1"; a: string; c: { foo: string } }
    | { __typename: "Type2"; b: string; d: { bar: number } }
  >;
}>({
  fields: {
    union(field) {
      return [{ __typename: "Type1", a: "foo" }];
    },
  },
});

This makes it easier to pass a raw server GraphQL parent type to cache.modify.

Caveat: We don't recommend intentionally omitting fields like this example in real app code. This does a direct cache write which means that if data were available on c or d, that data would get removed from the cache. This is just to illustrate that this would previously create a TypeScript error but is now allowed since you may only be working with a subset of the field data at any given time.

changeset-bot[bot] commented 3 months ago

πŸ¦‹ Changeset detected

Latest commit: d6e7b4fc882efedb3a3070e3e3f29af86fb83a0c

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package | Name | Type | | -------------- | ----- | | @apollo/client | Patch |

Not sure what this means? Click here to learn what changesets are.

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

jerelmiller commented 3 months ago

/release:pr

github-actions[bot] commented 3 months ago

size-limit report πŸ“¦

Path Size
dist/apollo-client.min.cjs 39.33 KB (0%)
import { ApolloClient, InMemoryCache, HttpLink } from "dist/main.cjs" 47.99 KB (0%)
import { ApolloClient, InMemoryCache, HttpLink } from "dist/main.cjs" (production) 45.57 KB (0%)
import { ApolloClient, InMemoryCache, HttpLink } from "dist/index.js" 34.4 KB (0%)
import { ApolloClient, InMemoryCache, HttpLink } from "dist/index.js" (production) 32.28 KB (0%)
import { ApolloProvider } from "dist/react/index.js" 1.26 KB (0%)
import { ApolloProvider } from "dist/react/index.js" (production) 1.24 KB (0%)
import { useQuery } from "dist/react/index.js" 5.21 KB (0%)
import { useQuery } from "dist/react/index.js" (production) 4.29 KB (0%)
import { useLazyQuery } from "dist/react/index.js" 5.69 KB (0%)
import { useLazyQuery } from "dist/react/index.js" (production) 4.77 KB (0%)
import { useMutation } from "dist/react/index.js" 3.62 KB (0%)
import { useMutation } from "dist/react/index.js" (production) 2.84 KB (0%)
import { useSubscription } from "dist/react/index.js" 4.41 KB (0%)
import { useSubscription } from "dist/react/index.js" (production) 3.46 KB (0%)
import { useSuspenseQuery } from "dist/react/index.js" 5.49 KB (0%)
import { useSuspenseQuery } from "dist/react/index.js" (production) 4.15 KB (0%)
import { useBackgroundQuery } from "dist/react/index.js" 4.99 KB (0%)
import { useBackgroundQuery } from "dist/react/index.js" (production) 3.64 KB (0%)
import { useLoadableQuery } from "dist/react/index.js" 5.07 KB (0%)
import { useLoadableQuery } from "dist/react/index.js" (production) 3.72 KB (0%)
import { useReadQuery } from "dist/react/index.js" 3.39 KB (0%)
import { useReadQuery } from "dist/react/index.js" (production) 3.33 KB (0%)
import { useFragment } from "dist/react/index.js" 2.32 KB (0%)
import { useFragment } from "dist/react/index.js" (production) 2.27 KB (0%)
github-actions[bot] commented 3 months ago

A new release has been made for this PR. You can install it with:

npm i @apollo/client@0.0.0-pr-11994-20240807160232
netlify[bot] commented 3 months ago

Deploy Preview for apollo-client-docs ready!

Name Link
Latest commit 6702ea779c18e3c4c9de2cdb211a7e3f1e98dead
Latest deploy log https://app.netlify.com/sites/apollo-client-docs/deploys/66b3a9f5cf1fbd00084254bb
Deploy Preview https://deploy-preview-11994--apollo-client-docs.netlify.app
Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

jerelmiller commented 3 months ago

/release:pr

github-actions[bot] commented 3 months ago

A new release has been made for this PR. You can install it with:

npm i @apollo/client@0.0.0-pr-11994-20240807171545