import Collection from "@arcgis/core/core/Collection";
import type { FeatureSource } from "../data/FeatureSource.js";
import { RelationshipCollection } from "../data/FeatureSourceBase.js";
import type { Relationship } from "../data/_Relationship.js";
import type { ArcGISRequestHelper } from "./ArcGISRequestHelper.js";
/**
 * Implements relationships for an ArcGIS server layer/sublayer/table. Calling
 * initialize() will automatically load relationship data from ArcGIS server.
 * These relationships will be realized when the source and related source are
 * connected to the same hierarchy.
 */
export declare abstract class ArcGISRelationshipCollection extends RelationshipCollection {
    /**
     * The URL of the layer/table.
     */
    protected abstract get _sourceUrl(): string;
    /**
     * The ID of the source layer/table.
     */
    protected abstract get _sourceLayerId(): number;
    /**
     * Keeps track of relationships that are defined in the source ArcGIS
     * service, but haven't been matched up yet to a related feature source.
     */
    private readonly _unresolvedRelationships;
    private _requestHelper;
    private _initializePromise;
    /**
     * The request helper that will be used to make requests. If not explicitly
     * set, a default one will be used.
     */
    get requestHelper(): ArcGISRequestHelper;
    set requestHelper(value: ArcGISRequestHelper);
    /**
     * Initializes the collection.
     */
    initialize(): Promise<void>;
    protected get _collection(): Collection<Relationship>;
    /**
     * Invoked to find a related feature source.
     *
     * @param layerId The ArcGIS ID of the related layer/table to locate.
     */
    protected abstract _findRelatedSource(layerId: number): FeatureSource;
    /**
     * Searches the hierarchy of the source for a matching related source.
     *
     * @param relationshipProperties The properties of the relationship to
     *   resolve.
     */
    private _resolveRelationship;
}
