import type { Firestore } from "firebase/firestore";
import { AsyncProvider } from "../../db/Provider.js";
import type { Data, DataKey, Database } from "../../util/data.js";
import type { ItemQuery, Items, OptionalItem } from "../../util/item.js";
import type { Updates } from "../../util/update.js";
/**
 * Firestore client database provider.
 * - Works with the Firebase JS SDK.
 * - Supports offline mode.
 * - Supports realtime subscriptions.
 */
export declare class FirestoreClientProvider<T extends Database> extends AsyncProvider<T> {
    private readonly _firestore;
    constructor(firestore: Firestore);
    getItem<K extends DataKey<T>>(c: K, id: string): Promise<OptionalItem<T[K]>>;
    getItemSequence<K extends DataKey<T>>(c: K, id: string): AsyncIterable<OptionalItem<T[K]>>;
    addItem<K extends DataKey<T>>(c: K, data: Data): Promise<string>;
    setItem<K extends DataKey<T>>(c: K, id: string, data: Data): Promise<void>;
    updateItem<K extends DataKey<T>>(c: K, id: string, updates: Updates<T[K]>): Promise<void>;
    deleteItem<K extends DataKey<T>>(c: K, id: string): Promise<void>;
    countQuery<K extends DataKey<T>>(c: K, q?: ItemQuery<T[K]>): Promise<number>;
    getQuery<K extends DataKey<T>>(c: K, q?: ItemQuery<T[K]>): Promise<Items<T[K]>>;
    getQuerySequence<K extends DataKey<T>>(c: K, q?: ItemQuery<T[K]>): AsyncIterable<Items<T[K]>>;
    setQuery<K extends DataKey<T>>(c: K, q: ItemQuery<T[K]>, data: Data): Promise<void>;
    updateQuery<K extends DataKey<T>>(c: K, q: ItemQuery<T[K]>, updates: Updates<T[K]>): Promise<void>;
    deleteQuery<K extends DataKey<T>>(c: K, q: ItemQuery<T[K]>): Promise<void>;
}
