export interface ResourceLike<T> {
    /** Is new data currently loading */
    loading?: boolean;
    /** Resolved resource data for sync access */
    data: Awaited<T> | undefined;
    /** Rejected resource error */
    error: unknown;
}
export type ResourceState = "unresolved" | "pending" | "ready" | "refreshing" | "errored";
export declare class Resource<T> implements ResourceLike<T> {
    loading: boolean;
    data: Awaited<T> | undefined;
    error: unknown;
    /** State name
     *
     * | state      | data  | loading | error |
     * |:-----------|:-----:|:-------:|:-----:|
     * | unresolved | No    | No      | No    |
     * | pending    | No    | Yes     | No    |
     * | ready      | Yes   | No      | No    |
     * | refreshing | Yes   | Yes     | No    |
     * | errored    | No    | No      | Yes   |
     */
    state: ResourceState;
    /** last resolved value
    *
    * This can be useful if you want to show the out-of-date data while the new
    * data is loading.
    */
    latest: Awaited<T> | undefined;
    constructor(init?: Partial<ResourceLike<T>>, previous?: {
        latest?: Awaited<T>;
    });
    static from<T>(data: Promise<T> | Awaited<T> | undefined, pend?: boolean): Resource<T>;
    /**
     * Determine resource-like state, based on its fields values.
     *
     * | state      | data  | loading | error |
     * |:-----------|:-----:|:-------:|:-----:|
     * | unresolved | No    | No      | No    |
     * | pending    | No    | Yes     | No*   |
     * | ready      | Yes   | No      | No    |
     * | refreshing | Yes   | Yes     | No*   |
     * | errored    | No*   | No      | Yes   |
     *
     * Values marked with * are expected to equal the specified value,
     * but actually ignored, when determining the status.
     */
    static getState(r: ResourceLike<unknown>): ResourceState;
}
