import { DurationLikeObject } from "luxon";
import { RemoveTimeout } from "../lib/ConsolidatedTimeout.js";
import { EventualValue } from "../lib/EventualValue.js";
import { ObservableValue } from "../observable-value/ObservableValue.js";
import { AsyncLoader, AsyncResourceState, OnRefreshHandler, UseWatchResourceOptions, UseWatchResourceResult } from "./types.js";
export declare class AsyncResource<T = unknown> {
    readonly loader: AsyncLoader<T>;
    private loaderPromise;
    suspensePromise: Promise<void> | undefined;
    private resolveSuspensePromise;
    private loaderPromiseVersion;
    private autoRefreshTimeout;
    readonly value: ObservableValue<EventualValue<T>>;
    readonly valueWithCache: ObservableValue<EventualValue<T>>;
    readonly error: ObservableValue<EventualValue<unknown>>;
    readonly state: ObservableValue<AsyncResourceState>;
    private readonly onRefreshListeners;
    static voidInstance: AsyncResource<undefined>;
    constructor(loader: AsyncLoader<T>);
    refresh(): void;
    onRefresh(handler: OnRefreshHandler): () => void;
    addTTL(ttl: DurationLikeObject): RemoveTimeout;
    load(): Promise<void>;
    private resetPromises;
    isMatchingError(error: true | unknown): boolean;
    private handleLoading;
    use<TOptions extends UseWatchResourceOptions>(options?: TOptions): UseWatchResourceResult<T, TOptions>;
    watchState(): AsyncResourceState;
}
