import { Formatter, RequestHandler, RequestHandlerType, Response, RouteOptions, Server as RestServer } from 'restify';
import { StringFormat } from '../lib/index.js';
import { Consumable } from 'rx-flowable';
import 'reflect-metadata';
export declare const formatter: (format: StringFormat) => Formatter;
export declare const JSON_LD_FORMAT: StringFormat;
export declare const HTML_FORMAT: StringFormat;
export declare function sendChunked(res: Response, results: Consumable<any>, status?: number): Promise<void>;
type Verb = 'del' | 'get' | 'head' | 'put' | 'post' | 'patch';
type RouteDef = string | RegExp | RouteOptions;
type Routable = Pick<RestServer, Verb>;
export interface HasContext<K extends string, V> {
    get(key: K): V;
    set(key: K, value: V): void;
}
interface EndPointSetup {
    use(...handlers: RequestHandlerType[]): void;
    useFor(verb: Verb, ...handlers: RequestHandlerType[]): void;
}
export declare class EndPoint<Outer extends Routable> implements Routable {
    readonly outer: Outer;
    del: RestServer['del'];
    get: RestServer['get'];
    head: RestServer['head'];
    put: RestServer['put'];
    post: RestServer['post'];
    patch: RestServer['patch'];
    private useHandlers;
    private useForHandlers;
    constructor(outer: Outer, stem: string, beforeHandlers?: (setup: EndPointSetup) => void);
    static checkRoute(route: string): void;
    private use;
    private useFor;
    private nextify;
}
export declare const use: {
    (target: EndPoint<Routable>, _handlerName: string, descriptor: TypedPropertyDescriptor<RequestHandler>): void;
    (opts: RouteDef): MethodDecorator;
};
export declare const del: {
    (target: EndPoint<Routable>, _handlerName: string, descriptor: TypedPropertyDescriptor<RequestHandler>): void;
    (opts: RouteDef): MethodDecorator;
};
export declare const get: {
    (target: EndPoint<Routable>, _handlerName: string, descriptor: TypedPropertyDescriptor<RequestHandler>): void;
    (opts: RouteDef): MethodDecorator;
};
export declare const head: {
    (target: EndPoint<Routable>, _handlerName: string, descriptor: TypedPropertyDescriptor<RequestHandler>): void;
    (opts: RouteDef): MethodDecorator;
};
export declare const put: {
    (target: EndPoint<Routable>, _handlerName: string, descriptor: TypedPropertyDescriptor<RequestHandler>): void;
    (opts: RouteDef): MethodDecorator;
};
export declare const post: {
    (target: EndPoint<Routable>, _handlerName: string, descriptor: TypedPropertyDescriptor<RequestHandler>): void;
    (opts: RouteDef): MethodDecorator;
};
export declare const patch: {
    (target: EndPoint<Routable>, _handlerName: string, descriptor: TypedPropertyDescriptor<RequestHandler>): void;
    (opts: RouteDef): MethodDecorator;
};
export {};
