/**
 * Provides utility types and functions to provide difference information if two structures
 * are not equal. Maybe. Sometime, in the far future this will be as capable as the waldo package :dream:
 *
 * @module
 */
import type { MergeableRecord } from './objects';
/**
 * Unifies the shape of all difference reports.
 * They should have an array of comments on the potential differences/equality of
 * the structures and a function to check if they are really equal.
 */
export interface DifferenceReport {
    /**
     * A human-readable description of differences during the comparison
     * In combination with {@link isEqual} this can be used to provide detailed
     * explanation on equal structures as well (e.g., if structures _could_ be equal).
     */
    comments(): readonly string[] | undefined;
    /**
     * @returns true iff the compared structures are equal (i.e., the diff is empty)
     */
    isEqual(): boolean;
}
export interface WriteableDifferenceReport extends DifferenceReport {
    addComment(comment: string): void;
}
/**
 * Identifies the information required by the core difference functions.
 * The `leftname` and `rightname` fields are only used to provide more useful
 * information in the difference report.
 */
export interface GenericDifferenceInformation<Report extends WriteableDifferenceReport> extends MergeableRecord {
    /** A human-readable name for the left structure in `left == right`. */
    readonly leftname: string;
    /** A human-readable name for the right structure in `left == right`. */
    readonly rightname: string;
    /** The report on the difference of the two structures. */
    readonly report: Report;
    /** A human-readable indication of where we are (the prefix of the information if the structures differ) */
    readonly position: string;
    readonly config: GenericDiffConfiguration;
}
export interface GenericDiffConfiguration {
    /**
     * The left graph may contain more vertices and or edges than the right graph.
     * However, those which are the same (based on their ids) have to be equal
     */
    readonly rightIsSubgraph?: boolean;
    /**
     * Similar to {@link rightIsSubgraph}, but for the left graph.
     */
    readonly leftIsSubgraph?: boolean;
}
export declare function setDifference<T, Report extends WriteableDifferenceReport = WriteableDifferenceReport>(left: ReadonlySet<T>, right: ReadonlySet<T>, info: GenericDifferenceInformation<Report>): void;
