import { Target } from './minivents.js'; declare type Arg = Record; export declare type CustomShortcut = (resName: string) => string; export declare type Encodings = { [mime: string]: { encode?: (data: any) => string; decode?: (xhrResponse: string) => any; }; }; export declare type Opts = { trailing: string; shortcut: boolean; shortcutRules: CustomShortcut[]; contentType: string; encodings: Encodings; }; declare type Ress = string | readonly string[] | { [resName: string]: Ress | 0 | null | undefined; }; declare type MakeRes = T extends string ? { [resName in T]: Res; } : T extends ReadonlyArray ? Res & ([S] extends [string] ? { [resName in S]: Res; } : never) : { [ResName in keyof T]: T[ResName] extends Ress ? Res & MakeRes : Res; }; declare type MR = T extends string ? Res : T extends string[] ? Res[] : { [ResName in keyof T]: T[ResName] extends Ress ? Res & MR : Res; }; declare class Res extends Function { private _c; private _parent; private _name; private _id?; private _shortcuts; private _resources; private get _client(); constructor(_c: () => RestClient, _parent: Res | undefined, _name: string, _id?: string | undefined); private __call; private _clone; withRes: (resources: T, shortcut?: boolean) => this & MakeRes; res: (resources: T, shortcut?: boolean) => MR; url: () => string; get: (...args: Arg[]) => Promise & Target; post: (data: any, contentType?: string) => Promise & Target; put: (data: any, contentType?: string) => Promise & Target; patch: (data: any, contentType?: string) => Promise & Target; delete: () => Promise & Target; } export declare class RestClient extends Res implements Target { host: string; _opts: Opts; emit: Target['emit']; on: Target['on']; off: Target['off']; constructor(host: string, options?: Partial & Encodings); conf(options?: Partial): Opts; _request(method: string, url: string, data?: any, contentType?: string | null): Promise & Target; } export default RestClient;