import Collection from "@arcgis/core/core/Collection";
import type FeatureLayer from "@arcgis/core/layers/FeatureLayer";
import type { Attachment, AttachmentProperties } from "../data/Attachment.js";
import type { ArcGISRequestHelper } from "../support/ArcGISRequestHelper.js";
import type { PropertyDefs } from "../support/Serializable.js";
import type { Feature } from "./Feature.js";
import type { FeatureSettings } from "./FeatureSettings.js";
import type { FeatureReadOptions, FeatureWriteOptions } from "./FeatureSource.js";
import type { QuerySourceCapabilities } from "./QuerySourceCapabilities.js";
import type { Schema } from "./Schema.js";
import type { Relationship } from "./_Relationship.js";
import type { TableExtensionProperties, TableProperties } from "./_TableExtension.js";
import { TableExtension } from "./_TableExtension.js";
/**
 * Properties that can be passed into the constructor for
 * {@link ArcGISServiceTableExtension}.
 */
export interface ArcGISServiceTableExtensionProperties extends TableExtensionProperties {
    /**
     * A list of the valid file MIME types that can be uploaded as attachments.
     * For list of supported attachment types, see:
     * https://developers.arcgis.com/rest/services-reference/enterprise/query-attachments-feature-service-layer-.htm.
     */
    attachmentTypes?: string[];
    /**
     * The Geocortex ArcGISServiceTable object being extended.
     */
    table?: FeatureLayer | TableProperties;
    /**
     * Request helper used to download table information.
     */
    requestHelper?: ArcGISRequestHelper;
}
/**
 * Extends the capabilities of a a table in an ArcGIS service (`FeatureLayer`
 * object).
 */
export declare class ArcGISServiceTableExtension extends TableExtension<ArcGISServiceTableExtensionProperties> {
    /**
     * A list of the valid file MIME types that can be uploaded as attachments.
     */
    attachmentTypes: string[];
    /**
     * The {@link support/ArcGISRequestHelper!ArcGISRequestHelper} to use when
     * making requests to external services. If not specified, a default
     * implementation will be used.
     */
    get requestHelper(): ArcGISRequestHelper;
    set requestHelper(requestHelper: ArcGISRequestHelper);
    /**
     * See {@link data/FeatureSource!FeatureSource.capabilities}.
     */
    get capabilities(): QuerySourceCapabilities;
    get canChangeDefinitionExpression(): boolean;
    private _requestHelper;
    protected _getAttachments(feature: Feature): Promise<Attachment[]>;
    protected _addAttachment(feature: Feature, attachment: Attachment | AttachmentProperties | File): Promise<Attachment>;
    protected _deleteAttachments(feature: Feature, attachments: (Attachment | string)[]): Promise<void>;
    private get _layerUrl();
    protected _getFeatures(ids: string[], options?: FeatureReadOptions): AsyncIterable<Feature>;
    protected _addFeatures(features: Iterable<Feature>, options?: FeatureWriteOptions): Promise<void>;
    protected _updateFeatures(features: Iterable<Feature>, options?: FeatureWriteOptions): Promise<void>;
    protected _deleteFeatures(ids: string[], options?: FeatureWriteOptions): Promise<void>;
    protected _onInitialize(): Promise<void>;
    /**
     * @inheritDoc
     */
    protected _isSupportedTable(table: FeatureLayer): boolean;
    protected _createFeatureSettings(): FeatureSettings;
    protected _createRelationships(): Collection<Relationship>;
    protected _createSchema(): Schema;
    protected _getSerializableProperties(): PropertyDefs<ArcGISServiceTableExtensionProperties>;
}
