import { EntityBase } from "../Entity.js";
import type { Feature, FetchRelatedFeaturesOptions } from "../data/Feature.js";
import type { FeatureSet } from "../data/FeatureSet.js";
import type { FeatureSource } from "../data/FeatureSource.js";
import type { PropertyDefs } from "../support/Serializable.js";
import type { FeatureStream } from "./FeatureStream.js";
import type { Cardinality, Relationship, RelationshipProperties, RelationshipType } from "./_Relationship.js";
/**
 * A base class for implementations of {@link data/_Relationship!Relationship}.
 */
export declare abstract class RelationshipBase<TProperties extends RelationshipProperties = RelationshipProperties> extends EntityBase<TProperties> implements Relationship {
    /**
     * @inheritDoc
     */
    title: string;
    /**
     * @inheritDoc
     */
    get source(): FeatureSource;
    /**
     * @inheritDoc
     */
    abstract readonly relatedSource: FeatureSource;
    /**
     * @inheritDoc
     */
    abstract readonly cardinality: Cardinality;
    /**
     * @inheritDoc
     */
    abstract readonly relationshipType: RelationshipType;
    /**
     * @inheritDoc
     */
    protected readonly _itemType: string;
    /**
     * @inheritDoc
     */
    protected _source: FeatureSource;
    private readonly _getRelatedFeaturesPromises;
    /**
     * @inheritDoc
     */
    getRelatedFeatures(feature: Feature, options?: FetchRelatedFeaturesOptions): Promise<FeatureSet>;
    /**
     * @inheritDoc
     */
    getAllRelatedFeatures(features: Feature[] | FeatureSet | FeatureStream, options?: FetchRelatedFeaturesOptions): Promise<Map<Feature, FeatureSet>>;
    protected _getSerializableProperties(): PropertyDefs<TProperties>;
    /**
     * Called to get related features. Subclasses must override this.
     */
    protected abstract _getRelatedFeatures(feature: Feature, options?: FetchRelatedFeaturesOptions): Promise<FeatureSet>;
    /**
     * Called to get related features. Subclasses must override this.
     */
    protected abstract _getAllRelatedFeatures(features: Feature[], options?: FetchRelatedFeaturesOptions): Promise<Map<Feature, FeatureSet>>;
}
