import type { Row, RowWithID, Table } from "../../types";
import type { EntClass } from "../types";
import type { VC } from "../VC";
import type { Predicate } from "./Predicate";
/**
 * An ent may represent not necessarily a node in the graph, but also an edge
 * between two nodes. Consider EntMember in the below example:
 *
 * vc.principal <--- EntMember[user_id, company_id] ---> EntCompany
 *
 * This predicate verifies that for a e.g. given EntCompany row and a given VC,
 * an EntMember row exists (and optionally matches some criterion) in the
 * database.
 *
 * - entEdgeVCField = user_id in the above example
 * - entEdgeFKField = company_id in the above example
 * - if an EntMember object exists, it must also match entEdgeFilter()
 */
export declare class IncomingEdgeFromVCExists<TEdgeTable extends Table> implements Predicate<RowWithID> {
    readonly EntEdge: EntClass<TEdgeTable>;
    readonly entEdgeVCField: keyof Row<TEdgeTable>;
    readonly entEdgeFKField: keyof Row<TEdgeTable>;
    readonly entEdgeFilter?: ((ent: Row<TEdgeTable>) => boolean) | undefined;
    private readonly instanceID;
    readonly name: string;
    constructor(EntEdge: EntClass<TEdgeTable>, entEdgeVCField: keyof Row<TEdgeTable>, entEdgeFKField: keyof Row<TEdgeTable>, entEdgeFilter?: ((ent: Row<TEdgeTable>) => boolean) | undefined);
    check(vc: VC, row: RowWithID): Promise<boolean>;
}
//# sourceMappingURL=IncomingEdgeFromVCExists.d.ts.map