import type { Feature, FetchRelatedFeaturesOptions } from "../../data/Feature.js";
import type { FeatureSet } from "../../data/FeatureSet.js";
import type { RelationshipType } from "../../data/_Relationship.js";
import type { PropertyDefs } from "../../support/Serializable.js";
import type { QueryBasedRelationshipProperties } from "./QueryBasedRelationship.js";
import { QueryBasedRelationship } from "./QueryBasedRelationship.js";
/**
 * Properties that can be passed into the constructor for
 * {@link ArcGISRelationship}.
 */
export interface ArcGISRelationshipProperties extends QueryBasedRelationshipProperties {
    /**
     * See {@link ArcGISRelationship.relationshipTableId}.
     */
    relationshipTableId?: number;
    /**
     * See {@link ArcGISRelationship.originForeignKey}.
     */
    originForeignKey?: string;
    /**
     * See {@link ArcGISRelationship.destinationForeignKey}.
     */
    destinationForeignKey?: string;
}
/**
 * A {@link data/_Relationship!Relationship} that works by querying the
 * queryRelatedRecords endpoint of a FeatureLayer, Table, or ArcGIS Sublayer.
 */
export declare class ArcGISRelationship extends QueryBasedRelationship<ArcGISRelationshipProperties> {
    readonly relationshipType: RelationshipType;
    /**
     * The ID of the intermediate table in the feature service for attributed
     * relationships. This property will only be exposed if the relationship is
     * attributed.
     */
    readonly relationshipTableId: number | undefined;
    /**
     * In an attributed relationship, originForeignKey is the foreign key in the
     * intermediate table, which relates the rows of the intermediate table to
     * the origin layer or table. This property will only be exposed if the
     * relationship is attributed.
     */
    readonly originForeignKey: string | undefined;
    /**
     * In attributed relationships, this is the foreign key in the intermediate
     * table that relates the rows of the intermediate table to the destination
     * layer or table. This property will only be exposed if the relationship is
     * attributed.
     */
    readonly destinationForeignKey: string | undefined;
    constructor(properties: ArcGISRelationshipProperties);
    /**
     * Whether the relationship is attributed.
     */
    get isAttributed(): boolean;
    protected _getSerializableProperties(): PropertyDefs<ArcGISRelationshipProperties>;
    protected _getRelatedFeatures(feature: Feature, options?: FetchRelatedFeaturesOptions): Promise<FeatureSet>;
    protected _getAllRelatedFeatures(features: Feature[], options?: FetchRelatedFeaturesOptions): Promise<Map<Feature, FeatureSet>>;
}
