import { GraphQLSchema, GraphQLError, TypeDefinitionNode, DirectiveDefinitionNode, TypeExtensionNode } from 'graphql';
import { CompositionResult } from './utils';
import { ServiceDefinition, ExternalFieldDefinition } from './types';
import type { ServiceNameToKeyDirectivesMap } from '../composition/types';
import { DirectiveMetadata } from './DirectiveMetadata';
interface TypeDefinitionsMap {
    [name: string]: TypeDefinitionNode[];
}
interface TypeExtensionsMap {
    [name: string]: TypeExtensionNode[];
}
interface DirectiveDefinitionsMap {
    [name: string]: {
        [serviceName: string]: DirectiveDefinitionNode;
    };
}
interface TypeToServiceMap {
    [typeName: string]: {
        owningService?: string;
        extensionFieldsToOwningServiceMap: {
            [fieldName: string]: string;
        };
    };
}
export interface KeyDirectivesMap {
    [typeName: string]: ServiceNameToKeyDirectivesMap;
}
declare type ValueTypes = Set<string>;
export declare function buildMapsFromServiceList(serviceList: ServiceDefinition[]): {
    typeToServiceMap: TypeToServiceMap;
    typeDefinitionsMap: TypeDefinitionsMap;
    typeExtensionsMap: TypeExtensionsMap;
    directiveDefinitionsMap: DirectiveDefinitionsMap;
    externalFields: ExternalFieldDefinition[];
    keyDirectivesMap: KeyDirectivesMap;
    valueTypes: ValueTypes;
    directiveMetadata: DirectiveMetadata;
};
export declare function buildSchemaFromDefinitionsAndExtensions({ typeDefinitionsMap, typeExtensionsMap, directiveDefinitionsMap, directiveMetadata, serviceList, }: {
    typeDefinitionsMap: TypeDefinitionsMap;
    typeExtensionsMap: TypeExtensionsMap;
    directiveDefinitionsMap: DirectiveDefinitionsMap;
    directiveMetadata: DirectiveMetadata;
    serviceList: ServiceDefinition[];
}): {
    schema: GraphQLSchema;
    errors: GraphQLError[];
};
export declare function addFederationMetadataToSchemaNodes({ schema, typeToServiceMap, externalFields, keyDirectivesMap, valueTypes, directiveDefinitionsMap, directiveMetadata, }: {
    schema: GraphQLSchema;
    typeToServiceMap: TypeToServiceMap;
    externalFields: ExternalFieldDefinition[];
    keyDirectivesMap: KeyDirectivesMap;
    valueTypes: ValueTypes;
    directiveDefinitionsMap: DirectiveDefinitionsMap;
    directiveMetadata: DirectiveMetadata;
}): void;
export declare function composeServices(services: ServiceDefinition[]): CompositionResult;
export {};
//# sourceMappingURL=compose.d.ts.map