import { FieldNode, InlineFragmentNode, GraphQLField, GraphQLObjectType } from 'graphql';
import { MultiMap } from '../utilities/MultiMap';
declare module 'graphql' {
    interface GraphQLSchemaExtensions {
        federation?: FederationSchemaMetadata;
    }
    interface GraphQLObjectTypeExtensions {
        federation?: FederationTypeMetadata;
    }
    interface GraphQLFieldExtensions<_TSource, _TContext, _TArgs = {
        [argName: string]: any;
    }> {
        federation?: FederationFieldMetadata;
    }
}
export declare function getFederationMetadataForType(type: GraphQLObjectType): FederationTypeMetadata | undefined;
export declare function getFederationMetadataForField(field: GraphQLField<any, any>): FederationFieldMetadata | undefined;
export declare type GraphName = string;
export declare type FieldSet = readonly (FieldNode | InlineFragmentNode)[];
export interface Graph {
    name: string;
    url: string;
}
export declare type GraphMap = Map<string, Graph>;
export interface FederationSchemaMetadata {
    graphs: GraphMap;
}
export declare type FederationTypeMetadata = FederationEntityTypeMetadata | FederationValueTypeMetadata;
export interface FederationEntityTypeMetadata {
    graphName: GraphName;
    keys: MultiMap<GraphName, FieldSet>;
    isValueType: false;
}
interface FederationValueTypeMetadata {
    isValueType: true;
}
export declare function isEntityTypeMetadata(metadata: FederationTypeMetadata): metadata is FederationEntityTypeMetadata;
export interface FederationFieldMetadata {
    graphName?: GraphName;
    requires?: FieldSet;
    provides?: FieldSet;
}
export {};
//# sourceMappingURL=metadata.d.ts.map