/// <reference types="node" />
import { ITableIndexItem, IPersistenceService, ITableGetRequest, ITableGetResponse, ITablePutRequest, ITablePutResponse, ITableSearchRequest, ITableSearchResponse, ITablesService } from '@darlean/base';
import { BufferOf, IDeSer } from '@darlean/utils';
interface IIndexReference {
    name: string;
    keys: string[];
    hash: string;
}
interface IBaseLine {
    indexes: IIndexReference[];
}
type Operator = 'none' | 'exact' | 'prefix' | 'lte' | 'gte' | 'between';
export declare class TableActor implements ITablesService {
    private id;
    private internalId;
    private persistence;
    private shard;
    private deser;
    constructor(persistence: IPersistenceService, deser: IDeSer, id: string[], shard: number);
    put(request: ITablePutRequest): Promise<ITablePutResponse>;
    get(request: ITableGetRequest): Promise<ITableGetResponse>;
    search(request: ITableSearchRequest): Promise<ITableSearchResponse>;
    searchBuffer(request: ITableSearchRequest): Promise<BufferOf<ITableSearchResponse>>;
    private searchImpl;
    protected extractDataFields(data?: {
        [key: string]: unknown;
    } | Buffer): {
        [key: string]: unknown;
    } | undefined;
    protected extractDataBuffer(data?: {
        [key: string]: unknown;
    } | Buffer): Buffer | undefined;
    protected deriveKeyInfo(operator: Operator, sortKey: string[] | undefined, sortKey2: string[] | undefined): [string[] | undefined, string[] | undefined, 'strict' | 'loose'];
    protected prefixSortKey(prefix: string[], key: string[] | undefined): string[];
    protected fetchBaseline(keys: string[], specifier: string | undefined): Promise<IBaseLine>;
    protected getImpl(request: ITableGetRequest): Promise<ITableGetResponse>;
    protected calculateHash(item: ITableIndexItem): string;
    protected encodeBaseline(baseline: IBaseLine | undefined): string;
    protected decodeBaseline(baseline: string | undefined): IBaseLine | undefined;
    protected enhanceProjection(filter: string[]): string[];
    protected isEmptyProjection(filter?: string[]): boolean;
}
export {};
