import type { FieldNode, FragmentDefinitionNode, InlineFragmentNode, SelectionSetNode } from "graphql"; import type { OperationVariables } from "@apollo/client"; import type { Incremental } from "@apollo/client/incremental"; import type { Reference, StoreObject, StoreValue } from "@apollo/client/utilities"; import { isReference } from "@apollo/client/utilities"; import type { FragmentMap } from "@apollo/client/utilities/internal"; import type { CanReadFunction, FieldSpecifier, ReadFieldFunction, ReadFieldOptions, SafeReadonly, ToReferenceFunction } from "../core/types/common.js"; import type { InMemoryCache } from "./inMemoryCache.js"; import type { IdGetter, MergeInfo, ReadMergeModifyContext } from "./types.js"; import type { WriteContext } from "./writeToStore.js"; export type TypePolicies = { [__typename: string]: TypePolicy; }; export type KeySpecifier = ReadonlyArray; export type KeyFieldsContext = { typename: string | undefined; storeObject: StoreObject; readField: ReadFieldFunction; selectionSet?: SelectionSetNode; fragmentMap?: FragmentMap; keyObject?: Record; }; export type KeyFieldsFunction = (object: Readonly, context: KeyFieldsContext) => KeySpecifier | false | ReturnType; export type TypePolicy = { keyFields?: KeySpecifier | KeyFieldsFunction | false; merge?: FieldMergeFunction | boolean; queryType?: true; mutationType?: true; subscriptionType?: true; fields?: { [fieldName: string]: FieldPolicy | FieldReadFunction; }; }; export type KeyArgsFunction = (args: Record | null, context: { typename: string; fieldName: string; field: FieldNode | null; variables?: Record; }) => KeySpecifier | false | ReturnType; export type FieldPolicy = { keyArgs?: KeySpecifier | KeyArgsFunction | false; read?: FieldReadFunction; merge?: FieldMergeFunction | boolean; }; export type StorageType = Record; export interface FieldFunctionOptions, TVariables extends OperationVariables = Record> { args: TArgs | null; fieldName: string; storeFieldName: string; field: FieldNode | null; variables?: TVariables; isReference: typeof isReference; toReference: ToReferenceFunction; storage: StorageType; cache: InMemoryCache; readField: ReadFieldFunction; canRead: CanReadFunction; mergeObjects: MergeObjectsFunction; } export interface FieldReadFunctionOptions, TVariables extends OperationVariables = Record> extends FieldFunctionOptions { } export interface FieldMergeFunctionOptions, TVariables extends OperationVariables = Record> extends FieldFunctionOptions { /** * Any `extensions` provided when writing the cache. */ extensions: Record | undefined; /** * Details about the field when the `@stream` directive is used. Useful with * custom merge functions to determine how to merge existing cache data with * the incoming stream array. * * This field is only available in `merge` functions when the `@stream` * directive is used on the field. * * > [!NOTE] * > This field is not available when using the `Defer20220824Handler` */ streamFieldInfo?: Incremental.StreamFieldInfo; /** * The same value as the `existing` argument, but preserves the `existing` * value on refetches when `refetchWritePolicy` is `overwrite` (the default). */ existingData: unknown; } type MergeObjectsFunction = (existing: T, incoming: T) => T; export type FieldReadFunction = (existing: SafeReadonly | undefined, options: TOptions) => TReadResult | undefined; export type FieldMergeFunction = (existing: SafeReadonly | undefined, incoming: SafeReadonly, options: TOptions) => SafeReadonly; export declare const defaultStreamFieldMergeFn: FieldMergeFunction>; export type PossibleTypesMap = { [supertype: string]: string[]; }; export declare class Policies { private config; private typePolicies; private toBeAdded; private supertypeMap; private fuzzySubtypes; readonly cache: InMemoryCache; readonly rootIdsByTypename: Record; readonly rootTypenamesById: Record; readonly usingPossibleTypes = false; constructor(config: { cache: InMemoryCache; dataIdFromObject?: KeyFieldsFunction; possibleTypes?: PossibleTypesMap; typePolicies?: TypePolicies; }); identify(object: StoreObject, partialContext?: Partial): [string?, StoreObject?]; addTypePolicies(typePolicies: TypePolicies): void; private updateTypePolicy; private setRootTypename; addPossibleTypes(possibleTypes: PossibleTypesMap): void; private getTypePolicy; private getFieldPolicy; private getSupertypeSet; fragmentMatches(fragment: InlineFragmentNode | FragmentDefinitionNode, typename: string | undefined, result?: Record, variables?: Record): boolean; hasKeyArgs(typename: string | undefined, fieldName: string): boolean; getStoreFieldName(fieldSpec: FieldSpecifier): string; readField(options: ReadFieldOptions, context: ReadMergeModifyContext): SafeReadonly | undefined; getReadFunction(typename: string | undefined, fieldName: string): FieldReadFunction | undefined; getMergeFunction(parentTypename: string | undefined, fieldName: string, childTypename: string | undefined): FieldMergeFunction | undefined; runMergeFunction(existing: StoreValue, incoming: StoreValue, { field, typename, merge, path }: MergeInfo, context: WriteContext, storage?: StorageType): any; } export declare function normalizeReadFieldOptions(readFieldArgs: any[], objectOrReference: StoreObject | Reference | undefined, variables?: ReadMergeModifyContext["variables"]): ReadFieldOptions; export {}; //# sourceMappingURL=policies.d.ts.map