import { Observable } from 'rxjs';
import { Query, QueryRaw, QueryWhere } from 'blow-query';
import { CollectionOptions } from './interfaces';
export declare class Collection<T> {
    protected _data: T[];
    protected _idKey: string;
    protected _idGenerator: () => string | number;
    constructor(options?: CollectionOptions);
    readonly size: number;
    protected readonly _data$: Observable<T>;
    protected _getId(data: any): any;
    protected _setId(data: any, id?: any): any;
    protected _hasId(data: any): boolean;
    create(data: any): Observable<T>;
    update(where: QueryWhere, data: any): Observable<number>;
    updateOrCreate(data: any): Observable<T>;
    count(where?: QueryWhere): Observable<number>;
    destroy(where?: QueryWhere): Observable<number>;
    destroyById(id: any): Observable<boolean>;
    find(query?: QueryRaw | Query): Observable<T>;
    findOne(query?: QueryRaw | Query): Observable<T>;
    findById(id: any): Observable<T>;
    findOrCreate(where: QueryWhere, data: any): Observable<T>;
    exists(id: any): Observable<boolean>;
}
