import { type IncomingMessage, type OutgoingMessage } from './HTTP'; import { type Remotes } from './Remotes'; import type * as RTD from './RTD'; export declare class Directives implements RTD.Directives { private readonly directives; constructor(directives: DirectiveSet[]); preflight(request: IncomingMessage, parameters: RTD.Parameter[]): Promise; settle(request: IncomingMessage, response: OutgoingMessage): Promise; merge(directives: Directives): void; } export declare class DirectivesFactory implements RTD.DirectivesFactory { private readonly remtoes; private readonly families; private readonly mandatory; constructor(families: Family[], remotes: Remotes); create(declarations: RTD.syntax.Directive[]): Directives; } export declare const shortcuts: RTD.syntax.Shortcuts; export interface Family { readonly name: string; readonly mandatory: boolean; create: (name: string, value: any, remotes: Remotes) => TDirective; preflight: (directives: TDirective[], request: IncomingMessage & TExtension, parameters: RTD.Parameter[]) => Output | Promise; settle?: (directives: TDirective[], request: IncomingMessage & TExtension, response: OutgoingMessage) => void | Promise; } interface DirectiveSet { family: Family; directives: any[]; } export type Input = IncomingMessage; export type Output = OutgoingMessage | null; export {};