import { ApiEdgeDefinition } from "../edge/ApiEdgeDefinition";
import { Api } from "../Api";
export interface ExportedApiEdgeRelation {
    type: string;
    name: string;
    relationId: string;
    relatedId: string;
    from: string;
    to: string;
    hasPair: boolean;
}
export type ApiEdgeRelationConstructor = new (from: ApiEdgeDefinition, to: ApiEdgeDefinition) => ApiEdgeRelation;
export declare const ApiEdgeRelationTypes: {
    [key: string]: ApiEdgeRelationConstructor;
};
export declare abstract class ApiEdgeRelation {
    abstract getType(): string;
    constructor(from: ApiEdgeDefinition, to: ApiEdgeDefinition);
    name: string;
    relationId: string;
    relatedId: string;
    from: ApiEdgeDefinition;
    to: ApiEdgeDefinition;
    hasPair: boolean;
    readonly external: boolean;
    private resolved;
    onResolve: () => void;
    toJSON(): {
        type: string;
        name: string;
        relationId: string;
        relatedId: string;
        from: string;
        to: string;
        hasPair: boolean;
    };
    static fromJSON(obj: ExportedApiEdgeRelation, api: Api): Promise<ApiEdgeRelation>;
    resolve(): Promise<boolean>;
}
