Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
f1b483d
Enter prerelease mode
github-actions[bot] Sep 4, 2025
2be8de2
Create mechanism to add experimental features to Apollo Client (#12915)
phryneas Sep 24, 2025
96b531f
More robust handling of local state default value when read function …
jerelmiller Sep 26, 2025
303e72d
Version Packages (alpha) (#12940)
github-actions[bot] Sep 26, 2025
bb8ed7b
Throw an error when using `@stream` without a configured `incremental…
jerelmiller Oct 10, 2025
785e223
Add `context` as callback to `useMutation` `mutate` function (#12959)
jerelmiller Oct 10, 2025
257eb18
Version Packages (alpha) (#12962)
github-actions[bot] Oct 10, 2025
5776ea0
Update `accept` header used with `GraphQL17Alpha9Handler` (#12973)
jerelmiller Oct 21, 2025
4631175
Ignore `data` values set in subsequent chunks in incremental response…
jerelmiller Oct 27, 2025
45ebb52
Add array support to `useFragment`, `useSuspenseFragment`, and `clien…
jerelmiller Oct 27, 2025
6d0b989
Version Packages (alpha) (#12977)
github-actions[bot] Oct 27, 2025
259ae9b
Allow `FragmentType` to be called as `FragmentType<TypedDocumentNode>…
phryneas Nov 13, 2025
44706a2
Add helper type QueryRef.ForQuery<TypedDocumentNode> (#13012)
phryneas Nov 14, 2025
410ceec
Update React Compiler to 1.0.0 (#13004)
phryneas Nov 14, 2025
2b7f2c1
Add support for the new incremental format in GraphQL 17.0.0-alpha.9 …
jerelmiller Nov 14, 2025
2e224b9
Add support for `@stream` (#12918)
jerelmiller Nov 14, 2025
94ea3e3
Improve handling of arrays in `@defer` and `@stream` payloads (#12923)
jerelmiller Nov 14, 2025
5851800
Ensure using `@defer` or `@stream` with `fetchMore` rerenders with in…
jerelmiller Nov 14, 2025
c4b52c9
Version Packages (alpha) (#12928)
github-actions[bot] Sep 17, 2025
2ad6c0d
Merge remote-tracking branch 'origin/main' into release-4.1
jerelmiller Nov 17, 2025
a617c10
Version Packages (alpha) (#13011)
github-actions[bot] Nov 17, 2025
7627000
Feedback from open incremental PRs (#13010)
jerelmiller Nov 19, 2025
b0f9f97
Version Packages (alpha) (#13025)
github-actions[bot] Nov 19, 2025
05eee67
Reuse observables in `client.watchFragment` as much as possible (#13026)
jerelmiller Dec 1, 2025
40645e9
Merge remote-tracking branch 'origin/main' into release-4.1
jerelmiller Dec 1, 2025
4a6c100
Version Packages (alpha) (#13035)
github-actions[bot] Dec 1, 2025
109efe7
Add support for the `from` option in `readFragment`, `writeFragment`,…
jerelmiller Dec 3, 2025
db71fb4
Version Packages (alpha) (#13039)
github-actions[bot] Dec 3, 2025
65e66ca
Add `headers` transport option for enhanced client awareness (#13043)
jerelmiller Dec 5, 2025
0c68bc0
Merge branch 'main' into release-4.1
jerelmiller Dec 5, 2025
73cc591
Version Packages (alpha) (#13044)
github-actions[bot] Dec 5, 2025
da0b5ce
Merge remote-tracking branch 'origin/main' into release-4.1
phryneas Dec 10, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 69 additions & 21 deletions .api-reports/api-report-cache.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,12 @@ import { getApolloCacheMemoryInternals } from '@apollo/client/utilities/internal
import type { GetDataState } from '@apollo/client';
import { getInMemoryCacheMemoryInternals } from '@apollo/client/utilities/internal';
import type { InlineFragmentNode } from 'graphql';
import type { IsAny } from '@apollo/client/utilities/internal';
import { isReference } from '@apollo/client/utilities';
import type { NoInfer as NoInfer_2 } from '@apollo/client/utilities/internal';
import { Observable } from 'rxjs';
import type { OperationVariables } from '@apollo/client';
import type { Prettify } from '@apollo/client/utilities/internal';
import { Reference } from '@apollo/client/utilities';
import type { SelectionSetNode } from 'graphql';
import type { StoreObject } from '@apollo/client/utilities';
Expand All @@ -39,20 +41,36 @@ type AllFieldsModifier<Entity extends Record<string, any>> = Modifier<Entity[key

// @public (undocumented)
export namespace ApolloCache {
export type FromOptionValue<TData> = StoreObject | Reference | FragmentType<NoInfer_2<TData>> | string;
// (undocumented)
export interface ObservableFragment<TData = unknown> extends Observable<ApolloCache.WatchFragmentResult<TData>> {
getCurrentResult: () => ApolloCache.WatchFragmentResult<TData>;
}
export interface WatchFragmentOptions<TData = unknown, TVariables extends OperationVariables = OperationVariables> {
fragment: DocumentNode | TypedDocumentNode<TData, TVariables>;
fragmentName?: string;
from: StoreObject | Reference | FragmentType<NoInfer_2<TData>> | string;
from: ApolloCache.FromOptionValue<TData> | Array<ApolloCache.FromOptionValue<TData> | null> | null;
optimistic?: boolean;
variables?: TVariables;
}
export type WatchFragmentResult<TData = unknown> = ({
export type WatchFragmentResult<TData = unknown> = true extends IsAny<TData> ? ({
complete: true;
missing?: never;
} & GetDataState<TData, "complete">) | ({
} & GetDataState<any, "complete">) | ({
complete: false;
missing: MissingTree;
} & GetDataState<TData, "partial">);
missing?: MissingTree;
} & GetDataState<any, "partial">) : TData extends null | null[] ? Prettify<{
complete: true;
missing?: never;
} & GetDataState<TData, "complete">> : Prettify<{
complete: true;
missing?: never;
} & GetDataState<TData, "complete">> | {
complete: false;
missing?: MissingTree;
data: TData extends Array<infer TItem> ? Array<DataValue.Partial<TItem> | null> : DataValue.Partial<TData>;
dataState: "partial";
};
}

// @public (undocumented)
Expand All @@ -77,11 +95,12 @@ export abstract class ApolloCache {
lookupFragment(fragmentName: string): FragmentDefinitionNode | null;
// (undocumented)
modify<Entity extends Record<string, any> = Record<string, any>>(options: Cache_2.ModifyOptions<Entity>): boolean;
protected onAfterBroadcast: (cb: () => void) => void;
// (undocumented)
abstract performTransaction(transaction: Transaction, optimisticId?: string | null): void;
// (undocumented)
abstract read<TData = unknown, TVariables extends OperationVariables = OperationVariables>(query: Cache_2.ReadOptions<TData, TVariables>): Unmasked<TData> | null;
readFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>({ fragment, variables, fragmentName, id, optimistic, returnPartialData, }: Cache_2.ReadFragmentOptions<TData, TVariables>): Unmasked<TData> | null;
readFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>({ fragment, variables, fragmentName, id, from, optimistic, returnPartialData, }: Cache_2.ReadFragmentOptions<TData, TVariables>): Unmasked<TData> | null;
// (undocumented)
readFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: Cache_2.ReadFragmentOptions<TData, TVariables>,
optimistic: boolean): Unmasked<TData> | null;
Expand All @@ -94,6 +113,7 @@ export abstract class ApolloCache {
abstract removeOptimistic(id: string): void;
// (undocumented)
abstract reset(options?: Cache_2.ResetOptions): Promise<void>;
resolvesClientField?(typename: string, fieldName: string): boolean;
abstract restore(serializedState: unknown): this;
// (undocumented)
transformDocument(document: DocumentNode): DocumentNode;
Expand All @@ -105,10 +125,31 @@ export abstract class ApolloCache {
updateQuery<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: Cache_2.UpdateQueryOptions<TData, TVariables>, update: (data: Unmasked<TData> | null) => Unmasked<TData> | null | void): Unmasked<TData> | null;
// (undocumented)
abstract watch<TData = unknown, TVariables extends OperationVariables = OperationVariables>(watch: Cache_2.WatchOptions<TData, TVariables>): () => void;
watchFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: ApolloCache.WatchFragmentOptions<TData, TVariables>): Observable<ApolloCache.WatchFragmentResult<Unmasked<TData>>>;
// (undocumented)
watchFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: ApolloCache.WatchFragmentOptions<TData, TVariables> & {
from: Array<ApolloCache.FromOptionValue<TData>>;
}): ApolloCache.ObservableFragment<Array<Unmasked<TData>>>;
// (undocumented)
watchFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: ApolloCache.WatchFragmentOptions<TData, TVariables> & {
from: Array<null>;
}): ApolloCache.ObservableFragment<Array<null>>;
// (undocumented)
watchFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: ApolloCache.WatchFragmentOptions<TData, TVariables> & {
from: Array<ApolloCache.FromOptionValue<TData> | null>;
}): ApolloCache.ObservableFragment<Array<Unmasked<TData> | null>>;
// (undocumented)
watchFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: ApolloCache.WatchFragmentOptions<TData, TVariables> & {
from: null;
}): ApolloCache.ObservableFragment<null>;
// (undocumented)
watchFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: ApolloCache.WatchFragmentOptions<TData, TVariables> & {
from: ApolloCache.FromOptionValue<TData>;
}): ApolloCache.ObservableFragment<Unmasked<TData>>;
// (undocumented)
watchFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: ApolloCache.WatchFragmentOptions<TData, TVariables>): ApolloCache.ObservableFragment<Unmasked<TData> | null>;
// (undocumented)
abstract write<TData = unknown, TVariables extends OperationVariables = OperationVariables>(write: Cache_2.WriteOptions<TData, TVariables>): Reference | undefined;
writeFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>({ data, fragment, fragmentName, variables, overwrite, id, broadcast, }: Cache_2.WriteFragmentOptions<TData, TVariables>): Reference | undefined;
writeFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>({ data, fragment, fragmentName, variables, overwrite, id, from, broadcast, }: Cache_2.WriteFragmentOptions<TData, TVariables>): Reference | undefined;
writeQuery<TData = unknown, TVariables extends OperationVariables = OperationVariables>({ data, query, variables, overwrite, id, broadcast, }: Cache_2.WriteQueryOptions<TData, TVariables>): Reference | undefined;
}

Expand All @@ -134,6 +175,14 @@ namespace Cache_2 {
update(cache: TCache): TUpdateResult;
}
// (undocumented)
type CacheIdentifierOption<TData> = {
id?: string;
from?: never;
} | {
id?: never;
from?: ApolloCache.FromOptionValue<TData>;
};
// (undocumented)
interface DiffOptions<TData = unknown, TVariables extends OperationVariables = OperationVariables> extends Omit<ReadOptions<TData, TVariables>, "rootId"> {
}
// (undocumented)
Expand Down Expand Up @@ -173,14 +222,13 @@ namespace Cache_2 {
optimistic?: boolean;
}
// (undocumented)
interface ReadFragmentOptions<TData, TVariables extends OperationVariables> {
type ReadFragmentOptions<TData, TVariables extends OperationVariables> = {
fragment: DocumentNode_2 | TypedDocumentNode<TData, TVariables>;
fragmentName?: string;
id?: string;
optimistic?: boolean;
returnPartialData?: boolean;
variables?: TVariables;
}
returnPartialData?: boolean;
optimistic?: boolean;
} & Cache_2.CacheIdentifierOption<TData>;
// (undocumented)
interface ReadOptions<TData = unknown, TVariables extends OperationVariables = OperationVariables> {
id?: string;
Expand Down Expand Up @@ -209,8 +257,7 @@ namespace Cache_2 {
discardWatches?: boolean;
}
// (undocumented)
interface UpdateFragmentOptions<TData, TVariables extends OperationVariables> extends Omit<ReadFragmentOptions<TData, TVariables> & WriteFragmentOptions<TData, TVariables>, "data"> {
}
type UpdateFragmentOptions<TData, TVariables extends OperationVariables> = Omit<ReadFragmentOptions<TData, TVariables> & WriteFragmentOptions<TData, TVariables>, "data" | "id" | "from"> & Cache_2.CacheIdentifierOption<TData>;
// (undocumented)
interface UpdateQueryOptions<TData, TVariables extends OperationVariables> extends Omit<ReadQueryOptions<TData, TVariables> & WriteQueryOptions<TData, TVariables>, "data"> {
}
Expand All @@ -228,15 +275,14 @@ namespace Cache_2 {
watcher?: object;
}
// (undocumented)
interface WriteFragmentOptions<TData, TVariables extends OperationVariables> {
broadcast?: boolean;
data: Unmasked<TData>;
type WriteFragmentOptions<TData, TVariables extends OperationVariables> = {
fragment: DocumentNode_2 | TypedDocumentNode<TData, TVariables>;
fragmentName?: string;
id?: string;
overwrite?: boolean;
variables?: TVariables;
}
data: Unmasked<TData>;
broadcast?: boolean;
overwrite?: boolean;
} & Cache_2.CacheIdentifierOption<TData>;
// (undocumented)
interface WriteOptions<TData = unknown, TVariables extends OperationVariables = OperationVariables> {
broadcast?: boolean;
Expand Down Expand Up @@ -544,6 +590,8 @@ export class InMemoryCache extends ApolloCache {
// (undocumented)
reset(options?: Cache_2.ResetOptions): Promise<void>;
// (undocumented)
resolvesClientField(typename: string, fieldName: string): boolean;
// (undocumented)
restore(data: NormalizedCacheObject): this;
// (undocumented)
retain(rootId: string, optimistic?: boolean): number;
Expand Down
52 changes: 44 additions & 8 deletions .api-reports/api-report-core.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,6 @@ export namespace ApolloClient {
export interface ReadFragmentOptions<TData, TVariables extends OperationVariables> {
fragment: DocumentNode_2 | TypedDocumentNode<TData, TVariables>;
fragmentName?: string;
id?: string;
optimistic?: boolean;
returnPartialData?: boolean;
}
Expand All @@ -148,7 +147,6 @@ export namespace ApolloClient {
data: Unmasked<TData>;
fragment: DocumentNode_2 | TypedDocumentNode<TData, TVariables>;
fragmentName?: string;
id?: string;
overwrite?: boolean;
}
}
Expand All @@ -174,6 +172,14 @@ export namespace ApolloClient {
}
}
// (undocumented)
export namespace DocumentationTypes {
// (undocumented)
export interface ReadFragmentOptions<TData, TVariables extends OperationVariables> extends Base.ReadFragmentOptions<TData, TVariables> {
from?: ApolloCache.FromOptionValue<TData>;
id?: string;
}
}
// (undocumented)
export namespace DocumentationTypes {
// (undocumented)
export interface WriteQueryOptions<TData, TVariables extends OperationVariables> extends Base.WriteQueryOptions<TData, TVariables> {
Expand All @@ -191,10 +197,19 @@ export namespace ApolloClient {
export namespace DocumentationTypes {
// (undocumented)
export interface WriteFragmentOptions<TData, TVariables extends OperationVariables> extends Base.WriteFragmentOptions<TData, TVariables> {
from?: ApolloCache.FromOptionValue<TData>;
id?: string;
variables?: TVariables;
}
}
// (undocumented)
export interface Experiment {
// (undocumented)
(this: ApolloClient, options: ApolloClient.Options): void;
// (undocumented)
v: 1;
}
// (undocumented)
export type MutateOptions<TData = unknown, TVariables extends OperationVariables = OperationVariables, TCache extends ApolloCache = ApolloCache> = {
optimisticResponse?: Unmasked<NoInfer<TData>> | ((vars: TVariables, { IGNORE }: {
IGNORE: IgnoreModifier;
Expand All @@ -217,6 +232,10 @@ export namespace ApolloClient {
extensions?: Record<string, unknown>;
}
// (undocumented)
export interface ObservableFragment<TData = unknown> extends Observable_2<ApolloClient.WatchFragmentResult<TData>> {
getCurrentResult: () => ApolloClient.WatchFragmentResult<TData>;
}
// (undocumented)
export interface Options {
assumeImmutableResults?: boolean;
cache: ApolloCache;
Expand All @@ -231,6 +250,7 @@ export namespace ApolloClient {
documentTransform?: DocumentTransform;
// (undocumented)
enhancedClientAwareness?: ClientAwarenessLink.EnhancedClientAwarenessOptions;
experiments?: ApolloClient.Experiment[];
incrementalHandler?: Incremental.Handler<any>;
link: ApolloLink;
// (undocumented)
Expand All @@ -251,7 +271,7 @@ export namespace ApolloClient {
error?: ErrorLike;
}
// (undocumented)
export type ReadFragmentOptions<TData, TVariables extends OperationVariables> = Base.ReadFragmentOptions<TData, TVariables> & VariablesOption<TVariables>;
export type ReadFragmentOptions<TData, TVariables extends OperationVariables> = Base.ReadFragmentOptions<TData, TVariables> & VariablesOption<TVariables> & Cache_2.CacheIdentifierOption<TData>;
// (undocumented)
export type ReadQueryOptions<TData, TVariables extends OperationVariables> = Base.ReadQueryOptions<TData, TVariables> & VariablesOption<TVariables>;
export interface RefetchQueriesOptions<TCache extends ApolloCache, TResult> {
Expand Down Expand Up @@ -287,7 +307,7 @@ export namespace ApolloClient {
// (undocumented)
export type WatchFragmentOptions<TData = unknown, TVariables extends OperationVariables = OperationVariables> = ApolloCache.WatchFragmentOptions<TData, TVariables>;
// (undocumented)
export type WatchFragmentResult<TData = unknown> = ApolloCache.WatchFragmentResult<TData>;
export type WatchFragmentResult<TData = unknown> = ApolloCache.WatchFragmentResult<MaybeMasked<TData>>;
export type WatchQueryOptions<TData = unknown, TVariables extends OperationVariables = OperationVariables> = {
fetchPolicy?: WatchQueryFetchPolicy;
nextFetchPolicy?: WatchQueryFetchPolicy | ((this: WatchQueryOptions<TData, TVariables>, currentFetchPolicy: WatchQueryFetchPolicy, context: NextFetchPolicyContext<TData, TVariables>) => WatchQueryFetchPolicy);
Expand All @@ -302,7 +322,7 @@ export namespace ApolloClient {
query: DocumentNode_2 | TypedDocumentNode<TData, TVariables>;
} & VariablesOption<NoInfer<TVariables>>;
// (undocumented)
export type WriteFragmentOptions<TData, TVariables extends OperationVariables> = Base.WriteFragmentOptions<TData, TVariables> & VariablesOption<TVariables>;
export type WriteFragmentOptions<TData, TVariables extends OperationVariables> = Base.WriteFragmentOptions<TData, TVariables> & VariablesOption<TVariables> & Cache_2.CacheIdentifierOption<TData>;
// (undocumented)
export type WriteQueryOptions<TData, TVariables extends OperationVariables> = Base.WriteQueryOptions<TData, TVariables> & VariablesOption<TVariables>;
}
Expand Down Expand Up @@ -359,7 +379,23 @@ export class ApolloClient {
subscribe<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: ApolloClient.SubscribeOptions<TData, TVariables>): SubscriptionObservable<ApolloClient.SubscribeResult<MaybeMasked<TData>>>;
// (undocumented)
version: string;
watchFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: ApolloClient.WatchFragmentOptions<TData, TVariables>): Observable_2<ApolloClient.WatchFragmentResult<MaybeMasked<TData>>>;
watchFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: ApolloClient.WatchFragmentOptions<TData, TVariables> & {
from: Array<ApolloCache.FromOptionValue<TData>>;
}): ApolloClient.ObservableFragment<Array<TData>>;
watchFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: ApolloClient.WatchFragmentOptions<TData, TVariables> & {
from: Array<null>;
}): ApolloClient.ObservableFragment<Array<null>>;
// (undocumented)
watchFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: ApolloClient.WatchFragmentOptions<TData, TVariables> & {
from: Array<ApolloCache.FromOptionValue<TData> | null>;
}): ApolloClient.ObservableFragment<Array<TData | null>>;
watchFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: ApolloClient.WatchFragmentOptions<TData, TVariables> & {
from: null;
}): ApolloClient.ObservableFragment<null>;
watchFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: ApolloClient.WatchFragmentOptions<TData, TVariables> & {
from: ApolloCache.FromOptionValue<TData>;
}): ApolloClient.ObservableFragment<TData>;
watchFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: ApolloClient.WatchFragmentOptions<TData, TVariables>): ApolloClient.ObservableFragment<TData | null>;
watchQuery<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: ApolloClient.WatchQueryOptions<TData, TVariables>): ObservableQuery<TData, TVariables>;
writeFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: ApolloClient.WriteFragmentOptions<TData, TVariables>): Reference_2 | undefined;
writeQuery<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: ApolloClient.WriteQueryOptions<TData, TVariables>): Reference_2 | undefined;
Expand Down Expand Up @@ -1132,8 +1168,8 @@ export type WatchQueryOptions<TVariables extends OperationVariables = OperationV

// Warnings were encountered during analysis:
//
// src/core/ApolloClient.ts:353:5 - (ae-forgotten-export) The symbol "NextFetchPolicyContext" needs to be exported by the entry point index.d.ts
// src/core/ObservableQuery.ts:361:5 - (ae-forgotten-export) The symbol "QueryManager" needs to be exported by the entry point index.d.ts
// src/core/ApolloClient.ts:372:5 - (ae-forgotten-export) The symbol "NextFetchPolicyContext" needs to be exported by the entry point index.d.ts
// src/core/ObservableQuery.ts:368:5 - (ae-forgotten-export) The symbol "QueryManager" needs to be exported by the entry point index.d.ts
// src/core/QueryManager.ts:180:5 - (ae-forgotten-export) The symbol "MutationStoreValue" needs to be exported by the entry point index.d.ts

// (No @packageDocumentation comment for this package)
Expand Down
Loading