import { Type } from "@angular/core";
import { ValueAccessor } from "@mmuscat/angular-composition-api";
import { Observable, OperatorFunction } from "rxjs";
export interface QueryOptions<T> {
    initialValue: T;
    refetch?: Observable<any>[];
}
export interface Query<T, U> {
    (config: QueryOptions<T>): ValueAccessor<Resource<T>, U>;
    (params: Observable<U> | Observable<U>[], config: QueryOptions<T>): ValueAccessor<Resource<T>, U>;
}
interface QueryStatic {
    new <T, U>(factory: () => (params: U) => Observable<T>): Type<Query<T, U>>;
}
export declare class Resource<T> {
    value: T;
    error: unknown;
    pending: boolean;
    done: boolean;
    static createPending(value: any): Resource<any>;
    static createNext(value: any): Resource<any>;
    static createError(value: any, error: any): Resource<any>;
    static createComplete(value: any): Resource<any>;
    constructor(value: T, error: unknown, pending: boolean, done: boolean);
}
export interface QueryConfig {
    operator?: () => OperatorFunction<any, any>;
}
export declare const Query: QueryStatic;
export interface MutationConfig {
    operator?: () => OperatorFunction<Observable<any>, any>;
}
export interface MutationStatic {
    new <T, U>(factory: () => (params: U) => Observable<T>, config?: MutationConfig): Type<ValueAccessor<Resource<T>, U>>;
}
export declare const Mutation: MutationStatic;
export declare function cancel(resource: any): void;
export declare function invalidate(query: any, params?: any): void;
export {};
