import * as Rdf from '../rdf/rdfModel';
import { DataProvider, DataProviderLinkCount, DataProviderLookupParams, DataProviderLookupItem } from '../provider';
import { ElementTypeModel, ElementTypeGraph, LinkTypeModel, ElementModel, LinkModel, PropertyTypeModel, ElementIri, ElementTypeIri, LinkTypeIri, PropertyTypeIri } from '../model';
import { CompositeResponse } from './mergeUtils';
/**
 * Options for {@link CompositeDataProvider}.
 *
 * @see {@link CompositeDataProvider}
 */
export interface CompositeDataProviderOptions {
    /**
     * Base data providers to combine result data from.
     */
    providers: ReadonlyArray<DataProviderDefinition>;
}
/**
 * Combined data provider definition.
 *
 * @see {@link CompositeDataProvider}
 */
export interface DataProviderDefinition {
    /**
     * Provider name to assist in debugging.
     */
    readonly name: string;
    /**
     * Data provider to combine data from.
     */
    readonly provider: DataProvider;
}
/**
 * Provides graph data by combining results from multiple other data providers.
 *
 * @category Data
 */
export declare class CompositeDataProvider implements DataProvider {
    readonly providers: ReadonlyArray<DataProviderDefinition>;
    constructor(options: CompositeDataProviderOptions);
    get factory(): Rdf.DataFactory;
    requestWithMerge<R>(method: (provider: DataProvider) => Promise<R>, merge: (results: Array<CompositeResponse<R>>) => R): Promise<R>;
    knownElementTypes(params: {
        signal?: AbortSignal;
    }): Promise<ElementTypeGraph>;
    knownLinkTypes(params: {
        signal?: AbortSignal;
    }): Promise<LinkTypeModel[]>;
    elementTypes(params: {
        classIds: ReadonlyArray<ElementTypeIri>;
        signal?: AbortSignal;
    }): Promise<Map<ElementTypeIri, ElementTypeModel>>;
    propertyTypes(params: {
        propertyIds: ReadonlyArray<PropertyTypeIri>;
        signal?: AbortSignal;
    }): Promise<Map<PropertyTypeIri, PropertyTypeModel>>;
    linkTypes(params: {
        linkTypeIds: ReadonlyArray<LinkTypeIri>;
        signal?: AbortSignal;
    }): Promise<Map<LinkTypeIri, LinkTypeModel>>;
    elements(params: {
        elementIds: ReadonlyArray<ElementIri>;
        signal?: AbortSignal;
    }): Promise<Map<ElementIri, ElementModel>>;
    links(params: {
        primary: ReadonlyArray<ElementIri>;
        secondary: ReadonlyArray<ElementIri>;
        linkTypeIds?: ReadonlyArray<LinkTypeIri>;
        signal?: AbortSignal;
    }): Promise<LinkModel[]>;
    connectedLinkStats(params: {
        elementId: ElementIri;
        inexactCount?: boolean;
        signal?: AbortSignal;
    }): Promise<DataProviderLinkCount[]>;
    lookup(params: DataProviderLookupParams): Promise<DataProviderLookupItem[]>;
}
//# sourceMappingURL=composite.d.ts.map