import { FirebaseApp, FirebaseError } from '@nativescript/firebase-core';
import { IDatabase, IReference, IDataSnapshot, EventType, IQuery, IOnDisconnect, IThenableReference } from './common';
export declare function serialize(data: any): any;
export declare class OnDisconnect implements IOnDisconnect {
    _native: FIRDatabaseReference;
    static fromNative(disconnect: FIRDatabaseReference): OnDisconnect;
    get native(): FIRDatabaseReference;
    get ios(): FIRDatabaseReference;
    cancel(onComplete?: (error: FirebaseError) => void): Promise<void>;
    remove(onComplete?: (error: FirebaseError) => void): Promise<void>;
    set(value: any, onComplete?: (error: FirebaseError) => void): Promise<void>;
    setWithPriority(value: any, priority: string | number, onComplete?: (error: FirebaseError) => void): Promise<void>;
    update(values: {
        [key: string]: any;
    }, onComplete?: (error: FirebaseError) => void): Promise<void>;
}
export declare class Query implements IQuery {
    _native: FIRDatabaseQuery;
    static fromNative(query: FIRDatabaseQuery): Query;
    get native(): FIRDatabaseQuery;
    get ios(): FIRDatabaseQuery;
    get ref(): Reference;
    endAt(value: string | number | boolean, key?: string): Query;
    equalTo(value: string | number | boolean, key?: string): Query;
    keepSynced(bool: boolean): void;
    limitToFirst(limit: number): Query;
    limitToLast(limit: number): Query;
    _handles: Map<(a: DataSnapshot, b: string) => void, number>;
    off(eventType?: EventType, callback?: (a: DataSnapshot, b: string) => void, context?: Record<string, any>): void;
    on(eventType: EventType, callback: (data: DataSnapshot, previousChildKey: string) => void, cancelCallbackOrContext?: (a: any) => void | Record<string, any>, context?: Record<string, any>): (a: DataSnapshot, b: string) => void;
    once(eventType: EventType, successCallback?: (a: DataSnapshot, b: string) => any, failureCallbackContext?: (a: any) => void | Record<string, any>): Promise<DataSnapshot>;
    orderByChild(path: string): Query;
    orderByKey(): Query;
    orderByPriority(): Query;
    orderByValue(): Query;
    startAt(value: string | number | boolean, key?: string): Query;
}
export declare class ServerValue {
    _native: any;
    static timeStamp(): ServerValue;
    static increment(count: number): ServerValue;
    get native(): any;
    get ios(): any;
}
export declare class Reference extends Query implements IReference {
    _native: any;
    static fromNative(ref: any): Reference;
    get key(): string;
    get parent(): Reference;
    get ref(): Reference;
    get root(): Reference;
    get native(): any;
    get ios(): any;
    child(path: string): Reference;
    onDisconnect(): OnDisconnect;
    push(value?: any, onComplete?: () => void): ThenableReference;
    remove(onComplete?: (error: FirebaseError) => void): Promise<void>;
    set(value: any, onComplete?: (error: FirebaseError) => void): Promise<void>;
    setPriority(priority: string | number, onComplete?: (error: FirebaseError) => void): Promise<void>;
    setWithPriority(newVal: any, newPriority: string | number, onComplete?: (error: FirebaseError) => void): Promise<void>;
    transaction(transactionUpdate: (currentData: object) => object, onComplete?: (error: FirebaseError, committed: boolean, finalResult: any) => void, applyLocally?: boolean): Promise<any>;
    update(values: {
        [key: string]: any;
    }, onComplete?: (error: FirebaseError) => void): Promise<void>;
}
export declare class ThenableReference extends Reference implements IThenableReference {
    toString(): string;
    then<TResult1 = any, TResult2 = never>(onfulfilled?: (value: any) => TResult1 | PromiseLike<TResult1>, onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>): PromiseLike<TResult1 | TResult2>;
}
export declare class DataSnapshot implements IDataSnapshot {
    _native: FIRDataSnapshot;
    static fromNative(snapshot: FIRDataSnapshot): DataSnapshot;
    get native(): FIRDataSnapshot;
    get ios(): FIRDataSnapshot;
    get key(): string;
    get ref(): Reference;
    child(path: string): DataSnapshot;
    exists(): boolean;
    exportVal(): {
        '.priority': any;
        '.value': any;
    };
    forEach(action: (child: DataSnapshot) => true | undefined): boolean;
    getPriority(): string | number;
    hasChild(path: string): boolean;
    hasChildren(): boolean;
    numChildren(): number;
    val(): any;
}
export declare class Database implements IDatabase {
    _native: FIRDatabase;
    _app: FirebaseApp;
    constructor(app?: FirebaseApp);
    useEmulator(host: string, port: number): void;
    get persistenceCacheSizeBytes(): number;
    set persistenceCacheSizeBytes(bytes: number);
    get persistenceEnabled(): boolean;
    set persistenceEnabled(value: boolean);
    refFromURL(url: string): Reference;
    setLoggingEnabled(enabled: boolean): void;
    ref(path?: string): Reference;
    goOffline(): void;
    goOnline(): void;
    get native(): FIRDatabase;
    get ios(): FIRDatabase;
    get app(): FirebaseApp;
}
