///
///
///
///
///
import { Observable } from 'rxjs';
import { Bulk } from './bulk';
import { HydrateOptions, Hydrator } from './hydrator';
import { AdamantId, EqualChecker } from './injector-tokens';
import { AdamantDeletedMeta, AdamantEntityMeta, AdamantRevMeta } from './meta-interfaces';
import { EntityMetadataCollection } from './metadata';
import { QueryBuilder } from './query-builder';
import { ReadQueryBatcher } from './read-query-batcher';
import { Ctor } from './utils/metadata';
import { Validator } from './validator';
export declare class AdamantRepository {
protected readonly db: PouchDB.Database;
protected readonly entityClass: Ctor;
protected readonly metadata: EntityMetadataCollection;
protected readonly equal: EqualChecker;
protected readonly adamantId: AdamantId;
readonly bulk: Bulk;
readonly hydrator: Hydrator;
readonly validator: Validator;
readonly id: {
head: () => string;
tail: () => string;
build: (id: string | number) => string;
parse: (id: string) => {
name: string;
type: StringConstructor | NumberConstructor;
id: string | number;
};
};
protected readonly queryBatcher: ReadQueryBatcher;
constructor(db: PouchDB.Database, entityClass: Ctor, metadata: EntityMetadataCollection, equal: EqualChecker, adamantId: AdamantId, bulk: Bulk, hydrator: Hydrator, validator: Validator);
getConnection(): PouchDB.Database;
create(entity: T): Promise;
upsert(entity: T): Promise;
/** @internal */
_upsert(id: string, document: PouchDB.Core.Document & Partial): Promise;
update(entity: T): Promise;
delete(entity: T): Promise;
read(id: number | string, options?: HydrateOptions): Promise;
/** @internal */
_read(id: string, options?: HydrateOptions): Promise;
/** @internal */
_readRaw(id: string): Promise>;
readAll(ids?: (string | number)[], options?: HydrateOptions): Promise<(T & AdamantRevMeta)[]>;
/** @internal */
_readAll(opt: PouchDB.Core.AllDocsWithKeysOptions | PouchDB.Core.AllDocsWithinRangeOptions, options?: HydrateOptions): Promise<(T & AdamantRevMeta)[]>;
/** @internal */
_readAllRaw(opt: PouchDB.Core.AllDocsWithKeysOptions | PouchDB.Core.AllDocsWithinRangeOptions): Promise[]>;
query(): QueryBuilder;
executeQuery(query: QueryBuilder, options?: HydrateOptions): Promise<(T & AdamantRevMeta)[]>;
build(props?: Partial): T & AdamantEntityMeta;
persistDesignDoc(doc: T): Promise;
view(designDoc: Ctor, name: P, { depth, circularCache, ...options }?: HydrateOptions & PouchDB.Query.Options): Promise<(T & AdamantRevMeta)[]>;
rawView(name: string, options?: PouchDB.Query.Options): Promise>;
changes(options?: PouchDB.Core.ChangesOptions): Observable>;
}
export declare const ADAMANT_REPOSITORY_PROVIDER: {
provide: typeof AdamantRepository;
useFactory(db: PouchDB.Database, entityClass: Ctor, metadata: EntityMetadataCollection, equal: EqualChecker, id: AdamantId, bulk: Bulk, hydrator: Hydrator, validator: Validator): AdamantRepository;
deps: any[];
};