import type { Data } from "../../util/data.js";
import type { Identifier, Item } from "../../util/item.js";
import type { Query } from "../../util/query.js";
import type { Collection } from "../collection/Collection.js";
import type { DBProvider } from "../provider/DBProvider.js";
import type { MemoryDBProvider } from "../provider/MemoryDBProvider.js";
import { ItemStore } from "../store/ItemStore.js";
import { QueryStore } from "../store/QueryStore.js";
/**
 * Cache of `ItemStore` and `QueryStore` objects for a single collection.
 * - Use `getItem(id)` to retrieve or create the `ItemStore` for a given id.
 * - Use `getQuery(query)` to retrieve or create the `QueryStore` for a given query.
 */
export declare class CollectionCache<I extends Identifier, T extends Data> implements AsyncDisposable {
    private readonly _items;
    private readonly _queries;
    readonly collection: Collection<string, I, T>;
    readonly provider: DBProvider<I>;
    readonly memory: MemoryDBProvider<I> | undefined;
    constructor(collection: Collection<string, I, T>, provider: DBProvider<I>, memory?: MemoryDBProvider<I>);
    /** Get (or create) the `ItemStore` for the given id. */
    getItem(id: I): ItemStore<I, T>;
    /** Get (or create) the `QueryStore` for the given query. */
    getQuery(query: Query<Item<I, T>>): QueryStore<I, T>;
    /** Refresh a specific item store. */
    refreshItem(id: I, maxAge?: number): Promise<void>;
    /** Refresh every cached item store. */
    refreshItems(maxAge?: number): Promise<void>;
    /** Refresh a specific query store. */
    refreshQuery(query: Query<Item<I, T>>, maxAge?: number): Promise<void>;
    /** Refresh every cached query store. */
    refreshQueries(maxAge?: number): Promise<void>;
    /** Refresh every cached store (items and queries). */
    refreshAll(maxAge?: number): Promise<void>;
    private _queryKey;
    [Symbol.asyncDispose](): Promise<void>;
}
