import { View } from '../utils/View';
import { FetchOptions, Gateway } from '../types/Gateway';
import { Repository } from '../types/Repository';
import { Json, JsonValue } from '../types/Json';
import { PageList } from '../types/PageList';
import { Id, Key } from '../types/Id';
import { List } from '../types/List';
import { RouteGateway } from '../services/RouteGateway';
import { RouteOptions } from '../services/Api';
export declare class Typo<T, Options extends RouteOptions = RouteOptions> extends Repository<T, Options> {
    protected view: View<T>;
    private readonly gateway;
    constructor(view: View<T>, gateway: Gateway<Options>);
    create: (j: Json) => T;
    all(options?: Options): Promise<PageList<T>>;
    byId(id: Id): Promise<T>;
    byIds(...ids: Id[]): Promise<List<T>>;
    byKey(key: Key, options?: Options): Promise<PageList<T>>;
    by(key: keyof T, value: JsonValue, options?: Options): Promise<PageList<T>>;
    search(q: JsonValue, options?: Options): Promise<PageList<T>>;
    filter(options?: Options): Promise<PageList<T>>;
    exists(id: Id): Promise<boolean>;
}
export declare class Agent<T, Options extends FetchOptions = FetchOptions> extends Repository<T, Options> {
    private gateway;
    constructor(gateway: RouteGateway);
    all(options?: Options): Promise<PageList<T>>;
    byId(id: Id): Promise<T>;
    byIds(...ids: Id[]): Promise<List<T>>;
    byKey(key: Key, options?: Options): Promise<PageList<T>>;
    by(key: keyof T, value: JsonValue, options?: Options): Promise<PageList<T>>;
    search(q: JsonValue, options?: Options): Promise<PageList<T>>;
    filter(options?: Options): Promise<PageList<T>>;
    exists(id: Id): Promise<boolean>;
    add(t: Partial<T>): Promise<T>;
    update(id: Id, t: Partial<T>): Promise<T>;
    upsert(id: Id, t: Partial<T>): Promise<T>;
    remove(id: Id): Promise<boolean>;
}
