import { Table } from './Table';
import { PageList, PageOptions } from '../types/PageList';
import { QueryProvider } from '../data/QueryProvider';
import { Gateway } from '../types/Gateway';
import { Json } from '../types/Json';
import { Id } from '../types/Id';
import { Optional } from '../types/Types';
export type TableOptions = PageOptions & {
    provider?: QueryProvider;
};
export declare class TableGateway<T extends Table> extends Gateway<PageOptions> {
    readonly table: T;
    readonly provider: QueryProvider;
    constructor(table: T, provider?: QueryProvider);
    protected provide: ({ provider }?: TableOptions) => QueryProvider;
    all(options?: TableOptions): Promise<PageList<Json>>;
    byId(id: Id, options?: TableOptions): Promise<Optional<Json>>;
    exists(id: Id, options?: TableOptions): Promise<boolean>;
    add(item: Json, options?: TableOptions): Promise<Json>;
    remove(id: Id, options?: TableOptions): Promise<boolean>;
    update(item: Json, options?: TableOptions): Promise<Json>;
}
