import { DeferredSequence } from "../sequence/DeferredSequence.js";
import type { Data, DataKey, Database } from "../util/data.js";
import type { Item, ItemQuery, Items, OptionalItem } from "../util/item.js";
import type { Updates } from "../util/update.js";
import { Provider } from "./Provider.js";
/**
 * Fast in-memory store for data.
 * - Extremely fast (ideal for caching!), but does not persist data after the browser window is closed.
 * - `get()` etc return the exact same instance of an object that's passed into `set()`
 */
export declare class MemoryProvider<T extends Database> extends Provider<T> {
    /** List of tables in `{ collection: Table }` format. */
    private _tables;
    /** Get a table for a collection. */
    getTable<K extends DataKey<T>>(collection: K): MemoryTable<T[K]>;
    getItemTime<K extends DataKey<T>>(collection: K, id: string): number | undefined;
    getItem<K extends DataKey<T>>(collection: K, id: string): OptionalItem<T[K]>;
    getItemSequence<K extends DataKey<T>>(collection: K, id: string): AsyncIterable<OptionalItem<T[K]>>;
    getCachedItemSequence<K extends DataKey<T>>(collection: K, id: string): AsyncIterable<OptionalItem<T[K]>>;
    addItem<K extends DataKey<T>>(collection: K, data: T[K]): string;
    setItem<K extends DataKey<T>>(collection: K, id: string, data: T[K]): void;
    setItemSequence<K extends DataKey<T>>(collection: K, id: string, sequence: AsyncIterable<OptionalItem<T[K]>>): AsyncIterable<OptionalItem<T[K]>>;
    updateItem<K extends DataKey<T>>(collection: K, id: string, updates: Updates<T[K]>): void;
    deleteItem<K extends DataKey<T>>(collection: K, id: string): void;
    getQueryTime<K extends DataKey<T>>(collection: K, query?: ItemQuery<T[K]>): number | undefined;
    countQuery<K extends DataKey<T>>(collection: K, query?: ItemQuery<T[K]>): number;
    getQuery<K extends DataKey<T>>(collection: K, query?: ItemQuery<T[K]>): Items<T[K]>;
    getQuerySequence<K extends DataKey<T>>(collection: K, query?: ItemQuery<T[K]>): AsyncIterable<Items<T[K]>>;
    getCachedQuerySequence<K extends DataKey<T>>(collection: K, query?: ItemQuery<T[K]>): AsyncIterable<Items<T[K]>>;
    setQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>, data: T[K]): void;
    updateQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>, updates: Updates<T[K]>): void;
    deleteQuery<K extends DataKey<T>>(collection: K, query: ItemQuery<T[K]>): void;
    setItems<K extends DataKey<T>>(collection: K, items: Items<T[K]>, query?: ItemQuery<T[K]>): void;
    setItemsSequence<K extends DataKey<T>>(collection: K, sequence: AsyncIterable<Items<T[K]>>, query?: ItemQuery<T[K]>): AsyncIterable<Items<T[K]>>;
}
/** An individual table of data. */
export declare class MemoryTable<T extends Data> {
    /** Actual data in this table. */
    protected readonly _data: Map<string, Item<T>>;
    /** Times data was last updated. */
    protected readonly _times: Map<string, number>;
    /** Deferred sequence of next values. */
    readonly next: DeferredSequence<void>;
    getItemTime(id: string): number | undefined;
    getItem(id: string): OptionalItem<T>;
    getItemSequence(id: string): AsyncIterable<OptionalItem<T>>;
    getCachedItemSequence(id: string): AsyncIterable<OptionalItem<T>>;
    addItem(data: T): string;
    setItem(id: string, data: Item<T> | T): void;
    setItemSequence(id: string, sequence: AsyncIterable<OptionalItem<T>>): AsyncIterable<OptionalItem<T>>;
    updateItem(id: string, updates: Updates<T>): void;
    deleteItem(id: string): void;
    getQueryTime(query?: ItemQuery<T>): number | undefined;
    countQuery(query?: ItemQuery<T>): number;
    getQuery(query?: ItemQuery<T>): Items<T>;
    getQuerySequence(query?: ItemQuery<T>): AsyncIterable<Items<T>>;
    getCachedQuerySequence(query?: ItemQuery<T>): AsyncIterable<Items<T>>;
    setQuery(query: ItemQuery<T>, data: T): void;
    updateQuery(query: ItemQuery<T>, updates: Updates<T>): void;
    deleteQuery(query: ItemQuery<T>): void;
    setItems(items: Items<T>, query?: ItemQuery<T>): void;
    setItemsSequence(sequence: AsyncIterable<Items<T>>, query?: ItemQuery<T>): AsyncIterable<Items<T>>;
}
