import type { GeometryUnion } from "@arcgis/core/geometry/types.js";
import type { Feature } from "../../data/Feature.js";
import type { FeatureSource } from "../../data/FeatureSource.js";
import type { CountResult } from "../CountResult.js";
import { IdentifyOptions } from "./IdentifyOptions.js";
import type { IdentifyProvider } from "./IdentifyProvider.js";
/**
 * A base implementation of
 * {@link tasks/identify/IdentifyProvider!IdentifyProvider}.
 */
export declare abstract class IdentifyProviderBase implements IdentifyProvider {
    /**
     * @inheritDoc
     */
    abstract isSupported(source: FeatureSource, geometry: GeometryUnion, options?: IdentifyOptions): boolean;
    /**
     * @inheritDoc
     */
    identify(source: FeatureSource | FeatureSource[], geometry: GeometryUnion, options?: IdentifyOptions): AsyncIterable<Feature>;
    /**
     * @inheritDoc
     */
    count(source: FeatureSource, geometry: GeometryUnion, options?: IdentifyOptions): Promise<CountResult>;
    /**
     * Invoked to perform the work for {@link identify}. Default implementation
     * calls {@link _identify} for each source. Derived classes can override this
     * method to implement special handling for multiple sources.
     *
     * @param sources The sources to identify.
     * @param geometry The geometry to match against.
     * @param options Options that affect the identify operation.
     * @param geometryType The geometry type before a tolerance buffer is
     *   applied.
     */
    protected _identifyMany(sources: FeatureSource[], geometry: GeometryUnion, options: IdentifyOptions, geometryType?: string): AsyncIterable<Feature>;
    /**
     * Adds a tolerance to input geometries if configured in the options.
     *
     * @param geometry The geometry to apply a tolerance to.
     * @param options The identify options object.
     */
    protected _applyTolerance(geometry: GeometryUnion, options?: IdentifyOptions): Promise<GeometryUnion>;
    /**
     * Invoked to perform the actual work for {@link identify} on a single
     * source. Derived classes should override this method rather than
     * identify().
     *
     * @param source The source to identify.
     * @param geometry The geometry to match against.
     * @param options Options that affect the identify operation.
     * @param geometryType The geometry type before a tolerance buffer is
     *   applied.
     */
    protected abstract _identify(source: FeatureSource, geometry: GeometryUnion, options: IdentifyOptions, geometryType?: string): AsyncIterable<Feature>;
    /**
     * Invoked to perform the actual work for {@link count}. Derived classes
     * should override this method rather than count().
     *
     * @param source The source to identify.
     * @param geometry The geometry to match against.
     * @param options Options that affect the identify operation.
     * @param geometryType The geometry type before a tolerance buffer is
     *   applied.
     */
    protected abstract _count(source: FeatureSource, geometry: GeometryUnion, options: IdentifyOptions, geometryType?: string): Promise<CountResult>;
}
