import { ArrayElementResult } from './Comparer';
export interface ArrayMergerOptions {
    base: any[];
    ours: any[];
    theirs: any[];
    preferred?: SourceType | null;
    filename?: string | null;
    path?: string[];
    deletionsAllowed?: boolean;
}
export interface ArrayMergerVariant {
    seemsValid: boolean;
    positions: Array<{
        unionPosition: number;
        basePosition: number | null;
        oursPosition: number | null;
        theirsPosition: number | null;
    }>;
    similarityScore: number;
}
export interface UnionArrayElementResult extends ArrayElementResult {
    unionIndex: number;
}
export type SourceType = 'base' | 'ours' | 'theirs';
export declare class ArrayMerger {
    ours: any[];
    theirs: any[];
    base: any[];
    union: any[];
    preferred: SourceType;
    filename: string | null;
    path: string[] | null;
    variants: ArrayMergerVariant[] | null;
    objectPossiblePositions: UnionArrayElementResult[] | null;
    deletionsAllowed: boolean;
    constructor({ base, ours, theirs, preferred, filename, path, deletionsAllowed, }: ArrayMergerOptions);
    private getUnion;
    getObjectPositions(): UnionArrayElementResult[];
    private getPositionsAsArray;
    private getPositionIndex;
    private getPositionScore;
    private getNextVariants;
    getVariants(): ArrayMergerVariant[];
    generateFromVariant(variant: ArrayMergerVariant): any[];
    getMergedObject(theirs: any, ours: any): any;
    merge(): any[];
}
export default ArrayMerger;
