import { FieldsValidator, UnknownFields } from "./fields";
import { ActionPoint, ActionPointOptions } from "./action-point";
import { ValidationContext } from "./validator";
import { RestMethod, UnknownActionPayload } from "./endpoint";
import { AirtableRecord } from "./record";
import { SelectQuery, SelectQueryParams } from "./select-query";
import { RecordData } from "./raw-types";
import { DeletedRecord } from "./raw-types";
export declare type TableDataSource = ActionPoint;
export interface TableActionPoint {
    runTableAction<P extends UnknownActionPayload, R>(method: RestMethod, { path, ...options }: ActionPointOptions<P, R>): Promise<R>;
}
export declare class Table<Fields extends UnknownFields> implements TableActionPoint, FieldsValidator<Fields> {
    readonly base: TableDataSource;
    readonly name: string;
    validator?: FieldsValidator<Fields>;
    constructor(base: TableDataSource, tableName: string, validator?: FieldsValidator<Fields>);
    createValidation(reference?: string): ValidationContext<unknown, Fields>;
    private subPath;
    runTableAction<P extends UnknownActionPayload, R>(method: RestMethod, { path, ...options }: ActionPointOptions<P, R>): Promise<R>;
    find(recordId: string): Promise<AirtableRecord<Fields>>;
    findOrNull(recordId: string): Promise<AirtableRecord<Fields> | null>;
    select(query?: SelectQueryParams<Fields>): SelectQuery<Fields>;
    private createSingleRecord;
    private createMultipleRecords;
    create(data: Fields): Promise<AirtableRecord<Fields>>;
    create(data: Fields[]): Promise<AirtableRecord<Fields>[]>;
    private updateSingleRecord;
    private updateMultipleRecords;
    private replaceSingleRecord;
    private replaceMultipleRecords;
    update(data: RecordData<Partial<Fields>>): Promise<AirtableRecord<Fields>>;
    update(data: RecordData<Partial<Fields>>[]): Promise<AirtableRecord<Fields>[]>;
    replace(data: RecordData<Fields>): Promise<AirtableRecord<Fields>>;
    replace(data: RecordData<Fields>[]): Promise<AirtableRecord<Fields>[]>;
    private destroySingleRecord;
    private destroyMultipleRecords;
    destroy(id: string): Promise<DeletedRecord>;
    destroy(ids: string[]): Promise<DeletedRecord[]>;
}
