import { ArrayStore } from "../store/ArrayStore.js";
import { BooleanStore } from "../store/BooleanStore.js";
import type { DataKey, Database } from "../util/data.js";
import type { Item, ItemQuery } from "../util/item.js";
import type { Stop } from "../util/start.js";
import type { MemoryProvider } from "./MemoryProvider.js";
import type { AbstractProvider } from "./Provider.js";
/** Store a set of multiple items. */
export declare class QueryStore<T extends Database, K extends DataKey<T>> extends ArrayStore<Item<T[K]>> {
    readonly provider: AbstractProvider<T>;
    readonly collection: K;
    readonly query: ItemQuery<T[K]>;
    readonly busy: BooleanStore;
    readonly limit: number;
    /** Can more items be loaded after the current result. */
    get hasMore(): boolean;
    private _hasMore;
    /** Get the first item in this store. */
    get first(): Item<T[K]>;
    /** Get the last item in this store. */
    get last(): Item<T[K]>;
    constructor(collection: K, query: ItemQuery<T[K]>, provider: AbstractProvider<T>, memory?: MemoryProvider<T>);
    /** Refresh this store from the source provider. */
    refresh(provider?: AbstractProvider<T>): void;
    private _refresh;
    /** Refresh this store if data in the cache is older than `maxAge` (in milliseconds). */
    refreshStale(maxAge: number): void;
    /** Subscribe this store to a provider. */
    connect(provider?: AbstractProvider<T>): Stop;
    /**
     * Load more items after the last once.
     * - Promise that needs to be handled.
     */
    loadMore(): void;
    private _loadMore;
    [Symbol.iterator](): Iterator<Item<T[K]>>;
}
