import { UserError } from './error_utils'; export type SelectMessage = T extends { type: Name; } ? T : never; export type MessageCalls = { [key in MessageInfo['type']]: (this: Messages, info: SelectMessage) => string; }; export type Messages = { util: MessageUtil; renderMessage(message: MessageInfo): string; renderError(err: UserError): string; supportsMessage(message: unknown): message is Info; supportsError(err: Error): err is UserError; } & MessageCalls; export interface MessageConstructor { new (util: MessageUtil): Messages; } export declare class RenderMessage { util: MessageUtil; constructor(util: MessageUtil); renderMessage(message: MessageInfo): string; renderError(err: UserError): string; supportsMessage(message: unknown): message is MessageInfo; supportsError(err: Error & { __userInfo?: unknown; }): err is UserError; static extend(methods: MessageCalls): MessageConstructor; }