/// <reference path="../../typings/socket.io/socket.io.d.ts" />
/// <reference path="../../typings/lodash/lodash.d.ts" />
import { Cursor } from "./LiveStore";
import { CriteriaBuilder } from "node-mysql-wrapper";
export declare type AllowOptionsType = {
    subscribe?: (socket: SocketIO.Socket, subscriptionName: string) => boolean;
    insert?: (socket: SocketIO.Socket, object: any) => boolean;
    update?: (socket: SocketIO.Socket, object: any) => boolean;
    remove?: (socket: SocketIO.Socket, primaryKey: string | number) => boolean;
};
export declare class Collection {
    name: string;
    table: string;
    primaryKeyColumn: string;
    options: AllowOptionsType;
    disallowOptions: string[];
    private databaseTable;
    private __single_item_collection__;
    lastFindCriteria: any;
    constructor(collectionName: string, tableName: string, isJustOneObject?: boolean);
    isObject(): boolean;
    setDatabaseTable(table: NodeMysqlWrapper.Table<any>): void;
    allow(options: AllowOptionsType): void;
    deny(options: AllowOptionsType): void;
    disallow(options: AllowOptionsType): void;
    private processCriteria(criteria, single?);
    find(criteria?: any): Cursor;
    findSingle(criteria?: any): Cursor;
    noop(): Cursor;
    selector(): CriteriaBuilder<any>;
    fetch(criteriaRawJsObject?: any, callback?: (_results: any[]) => any): Promise<any[]>;
    fetchSingle(criteriaRawJsObject: any, callback?: (_result: any) => any): Promise<any>;
    save(criteriaRawJsObject: any, callback?: (_result: any) => any): Promise<any>;
    insert(criteriaRawJsObject: any, callback?: (_result: any) => any): Promise<any>;
    update(criteriaRawJsObject: any, callback?: (_result: any) => any): Promise<any>;
    remove(criteriaOrID: any | number | string, callback?: (_result: NodeMysqlWrapper.DeleteAnswer) => any): Promise<NodeMysqlWrapper.DeleteAnswer>;
}
export interface CollectionDictionary {
    [name: string]: Collection;
}
