import { Variables } from '@apollo-orbit/angular/core';
import { Action, ActionType, EffectFn, MutationIdentifier, MutationUpdateFn, OptimisticResponseFn, RefetchQueriesFn, Resolver, STATE_DEFINITION_SYMBOL, State, TypeField } from '@apollo-orbit/core';
import { ApolloCache, PossibleTypesMap, TypePolicies } from '@apollo/client/core';
import { DocumentNode } from 'graphql';
import { ActionFn } from './types';
export declare function state(configure: (descriptor: StateDescriptor) => StateDescriptor | void, definition?: State): State;
export declare class StateDescriptor {
    private readonly descriptor;
    constructor(definition?: State);
    private get [STATE_DEFINITION_SYMBOL]();
    /**
     * Client name in a multi-client setup
     */
    clientId(clientId: string): this;
    typeDefs(typeDefs: string | Array<string> | DocumentNode | Array<DocumentNode>): this;
    typePolicies(typePolicies: TypePolicies): this;
    possibleTypes(possibleTypes: PossibleTypesMap): this;
    onInit(onInit: (cache: ApolloCache<any>) => void): this;
    mutationUpdate<T = any, V = Variables>(mutation: MutationIdentifier<T, V>, update: MutationUpdateFn<T, V>): this;
    refetchQueries<T = any, V = Variables>(mutation: MutationIdentifier<T, V>, refetchQueries: RefetchQueriesFn<T, V>): this;
    optimisticResponse<T = any, V = Variables>(mutation: MutationIdentifier<T, V>, optimisticResponse: OptimisticResponseFn<T, V>): this;
    effect<T = any, V = Variables>(mutation: MutationIdentifier<T, V>, effect: EffectFn<T, V>): this;
    resolver(typeField: TypeField, resolver: Resolver): this;
    action<T = any>(action: ActionType<T>, actionFn: ActionFn<T>): this;
    action<TAction extends Action>(type: TAction['type'], actionFn: ActionFn<TAction>): this;
}
