import type { DocumentNode, FragmentDefinitionNode, InlineFragmentNode } from "graphql"; import type { StoreObject, Reference, DeepPartial, NoInfer } from "../../utilities/index.js"; import { Observable } from "../../utilities/index.js"; import type { DataProxy } from "./types/DataProxy.js"; import type { Cache } from "./types/Cache.js"; import { getApolloCacheMemoryInternals } from "../../utilities/caching/getMemoryInternals.js"; import type { OperationVariables, TypedDocumentNode } from "../../core/types.js"; import type { MissingTree } from "./types/common.js"; import type { FragmentType, MaybeMasked, Unmasked } from "../../masking/index.js"; export type Transaction = (c: ApolloCache) => void; /** * Watched fragment options. */ export interface WatchFragmentOptions { /** * A GraphQL fragment document parsed into an AST with the `gql` * template literal. * * @docGroup 1. Required options */ fragment: DocumentNode | TypedDocumentNode; /** * An object containing a `__typename` and primary key fields * (such as `id`) identifying the entity object from which the fragment will * be retrieved, or a `{ __ref: "..." }` reference, or a `string` ID * (uncommon). * * @docGroup 1. Required options */ from: StoreObject | Reference | FragmentType> | string; /** * Any variables that the GraphQL fragment may depend on. * * @docGroup 2. Cache options */ variables?: TVars; /** * The name of the fragment defined in the fragment document. * * Required if the fragment document includes more than one fragment, * optional otherwise. * * @docGroup 2. Cache options */ fragmentName?: string; /** * If `true`, `watchFragment` returns optimistic results. * * The default value is `true`. * * @docGroup 2. Cache options */ optimistic?: boolean; } /** * Watched fragment results. */ export type WatchFragmentResult = { data: MaybeMasked; complete: true; missing?: never; } | { data: DeepPartial>; complete: false; missing: MissingTree; }; export declare abstract class ApolloCache implements DataProxy { readonly assumeImmutableResults: boolean; abstract read(query: Cache.ReadOptions): Unmasked | null; abstract write(write: Cache.WriteOptions): Reference | undefined; abstract diff(query: Cache.DiffOptions): Cache.DiffResult; abstract watch(watch: Cache.WatchOptions): () => void; abstract reset(options?: Cache.ResetOptions): Promise; abstract evict(options: Cache.EvictOptions): boolean; /** * Replaces existing state in the cache (if any) with the values expressed by * `serializedState`. * * Called when hydrating a cache (server side rendering, or offline storage), * and also (potentially) during hot reloads. */ abstract restore(serializedState: TSerialized): ApolloCache; /** * Exposes the cache's complete state, in a serializable format for later restoration. */ abstract extract(optimistic?: boolean): TSerialized; abstract removeOptimistic(id: string): void; fragmentMatches?(fragment: InlineFragmentNode, typename: string): boolean; lookupFragment(fragmentName: string): FragmentDefinitionNode | null; batch(options: Cache.BatchOptions): U; abstract performTransaction(transaction: Transaction, optimisticId?: string | null): void; recordOptimisticTransaction(transaction: Transaction, optimisticId: string): void; transformDocument(document: DocumentNode): DocumentNode; transformForLink(document: DocumentNode): DocumentNode; identify(object: StoreObject | Reference): string | undefined; gc(): string[]; modify = Record>(options: Cache.ModifyOptions): boolean; readQuery(options: Cache.ReadQueryOptions, optimistic?: boolean): Unmasked | null; /** * Watches the cache store of the fragment according to the options specified and returns an `Observable`. We can subscribe to this `Observable` and receive updated results through an observer when the cache store changes. * * You must pass in a GraphQL document with a single fragment or a document with multiple fragments that represent what you are reading. If you pass in a document with multiple fragments then you must also specify a `fragmentName`. * * @param options - An object of type `WatchFragmentOptions` that allows the cache to identify the fragment and optionally specify whether to react to optimistic updates. * * @since * * 3.10.0 */ watchFragment(options: WatchFragmentOptions): Observable>; private getFragmentDoc; readFragment(options: Cache.ReadFragmentOptions, optimistic?: boolean): Unmasked | null; writeQuery({ id, data, ...options }: Cache.WriteQueryOptions): Reference | undefined; writeFragment({ id, data, fragment, fragmentName, ...options }: Cache.WriteFragmentOptions): Reference | undefined; updateQuery(options: Cache.UpdateQueryOptions, update: (data: Unmasked | null) => Unmasked | null | void): Unmasked | null; updateFragment(options: Cache.UpdateFragmentOptions, update: (data: Unmasked | null) => Unmasked | null | void): Unmasked | null; /** * @experimental * @internal * This is not a stable API - it is used in development builds to expose * information to the DevTools. * Use at your own risk! */ getMemoryInternals?: typeof getApolloCacheMemoryInternals; } //# sourceMappingURL=cache.d.ts.map