import type { AdjacentEdgeRow, AnyEdgeKind, AnyNodeKind, CallableNodeRow, CallEdgeRow, ChildNodeRow, ComplexityMetrics, FileNodeRow, ImportEdgeRow, ImportGraphEdgeRow, IntraFileCallEdge, ListFunctionOpts, NodeIdRow, NodeRow, NodeRowWithFanIn, QueryOpts, RelatedNodeRow, Role, TriageNodeRow, TriageQueryOpts } from '../../types.js';
import { Repository } from './base.js';
/**
 * In-memory Repository implementation backed by Maps.
 * No SQLite dependency — suitable for fast unit tests.
 */
export declare class InMemoryRepository extends Repository {
    #private;
    /**
     * Add a node. Returns the auto-assigned id.
     */
    addNode(attrs: {
        name: string;
        kind: AnyNodeKind;
        file: string;
        line: number;
        end_line?: number;
        parent_id?: number;
        exported?: 0 | 1;
        qualified_name?: string;
        scope?: string;
        visibility?: 'public' | 'private' | 'protected';
        role?: Role;
    }): number;
    /**
     * Add an edge. Returns the auto-assigned id.
     */
    addEdge(attrs: {
        source_id: number;
        target_id: number;
        kind: AnyEdgeKind;
        confidence?: number;
        dynamic?: 0 | 1;
    }): number;
    /**
     * Add complexity metrics for a node.
     */
    addComplexity(nodeId: number, metrics: {
        cognitive: number;
        cyclomatic: number;
        max_nesting: number;
        maintainability_index?: number;
        halstead_volume?: number;
    }): void;
    findNodeById(id: number): NodeRow | undefined;
    findNodesByFile(file: string): NodeRow[];
    findFileNodes(fileLike: string): NodeRow[];
    findNodesWithFanIn(namePattern: string, opts?: QueryOpts): NodeRowWithFanIn[];
    countNodes(): number;
    countEdges(): number;
    countFiles(): number;
    getNodeId(name: string, kind: string, file: string, line: number): number | undefined;
    getFunctionNodeId(name: string, file: string, line: number): number | undefined;
    bulkNodeIdsByFile(file: string): NodeIdRow[];
    findNodeChildren(parentId: number): ChildNodeRow[];
    findNodesByScope(scopeName: string, opts?: QueryOpts): NodeRow[];
    findNodeByQualifiedName(qualifiedName: string, opts?: {
        file?: string;
    }): NodeRow[];
    listFunctionNodes(opts?: ListFunctionOpts): NodeRow[];
    iterateFunctionNodes(opts?: ListFunctionOpts): IterableIterator<NodeRow>;
    findNodesForTriage(opts?: TriageQueryOpts): TriageNodeRow[];
    findCallees(nodeId: number): RelatedNodeRow[];
    findCallers(nodeId: number): RelatedNodeRow[];
    findDistinctCallers(nodeId: number): RelatedNodeRow[];
    findAllOutgoingEdges(nodeId: number): AdjacentEdgeRow[];
    findAllIncomingEdges(nodeId: number): AdjacentEdgeRow[];
    findCalleeNames(nodeId: number): string[];
    findCallerNames(nodeId: number): string[];
    findImportTargets(nodeId: number): ImportEdgeRow[];
    findImportSources(nodeId: number): ImportEdgeRow[];
    findImportDependents(nodeId: number): NodeRow[];
    findCrossFileCallTargets(file: string): Set<number>;
    countCrossFileCallers(nodeId: number, file: string): number;
    getClassHierarchy(classNodeId: number): Set<number>;
    findImplementors(nodeId: number): RelatedNodeRow[];
    findInterfaces(nodeId: number): RelatedNodeRow[];
    findIntraFileCallEdges(file: string): IntraFileCallEdge[];
    getCallableNodes(): CallableNodeRow[];
    getCallEdges(): CallEdgeRow[];
    getFileNodesAll(): FileNodeRow[];
    getImportEdges(): ImportGraphEdgeRow[];
    hasCfgTables(): boolean;
    hasEmbeddings(): boolean;
    hasDataflowTable(): boolean;
    getComplexityForNode(nodeId: number): ComplexityMetrics | undefined;
}
//# sourceMappingURL=in-memory-repository.d.ts.map