import type { Logger } from '../../../../utils/logger.cjs';
import type { SupergraphState } from '../../../state.cjs';
import { Edge } from './edge.cjs';
import { Node } from './node.cjs';
import type { SelectionResolver } from './selection.cjs';
export declare class Graph {
    name: string;
    private supergraphState;
    private selectionResolver;
    private ignoreInaccessible;
    private _warnedAboutIncorrectEdge;
    private nodesByTypeIndex;
    private edgesByHeadTypeIndex;
    private edgesByTailTypeIndex;
    private typeNameToNodeIndexes;
    private typeChildren;
    private typeChildrenCache;
    private isSubgraph;
    private logger;
    private id;
    private idSymbol;
    constructor(logger: Logger, id: string | Symbol, name: string, supergraphState: SupergraphState, selectionResolver: SelectionResolver, ignoreInaccessible?: boolean);
    addUnreachableTypes(): this;
    addFromRoots(): this;
    addInterfaceObjectFields(): void;
    addFromEntities(): this;
    addSubgraph(graph: Graph): void;
    private connectUnionOrInterface;
    private connectEntities;
    private addProvidedInterfaceFields;
    private addProvidedField;
    joinSubgraphs(): this;
    private duplicateNode;
    private replaceEdgeAt;
    print(asLink?: boolean): string;
    graphNameToId(graphName: string): string | undefined;
    nodeOf(typeName: string): Node;
    nodeOf(typeName: string, failIfMissing: true): Node;
    nodeOf(typeName: string, failIfMissing?: false): Node | undefined;
    nodesOf(typeName: string, failIfMissing?: boolean): Node[];
    private getSameGraphEdgesOfIndex;
    fieldEdgesOfHead(head: Node, fieldName: string): Edge[];
    abstractEdgesOfHead(head: Node): Edge<import("./moves.js").Move>[];
    entityEdgesOfHead(head: Node): Edge<import("./moves.js").Move>[];
    indirectEdgesOfHead(head: Node): Edge<import("./moves.js").Move>[];
    edgesOfHead(head: Node): Edge<import("./moves.js").Move>[];
    edgesOfTail(tail: Node): Edge<import("./moves.js").Move>[];
    possibleTypesOf(typeName: string): string[];
    canReachTypeFromType(fromTypeName: string, toTypeName: string): boolean;
    private createNodesAndEdgesForType;
    private ensureNonOrSingleNode;
    private createNodesAndEdgesForObjectType;
    private createNodeForScalarType;
    private createNodeForEnumType;
    private createNodeForUnionType;
    private createNodeForInterfaceType;
    private createEdgeForInterfaceTypeField;
    private createEdgeForObjectTypeField;
    private createTypeNode;
    private createNode;
    private addNode;
    private addEdge;
    private getIndexesOfType;
    private trueOrIfSubgraphThen;
    private isSupergraph;
}
//# sourceMappingURL=graph.d.ts.map