import { Declaracao, Decorador, Construto } from '@designliquido/delegua';
import { RotaOpenApi } from './rota-open-api';
import { MetodoHttpOpenApi } from './metodo-http-open-api';
import { DocumentoOpenApi } from './documento-open-api';
import { AutoDocumentadorInterface } from '../../interfaces/auto-documentador-interface';
/**
 * O auto documentador lê o projeto e gera uma especificação OpenAPI
 * baseada no que foi implementado a nível de rotas.
 */
export declare class AutoDocumentador implements AutoDocumentadorInterface {
    diretorioRotas: string;
    decoradoresValidos: {
        [key: string]: {
            [key: string]: string;
        };
    };
    erros: Error[];
    nomeAplicacao: string;
    versao: string;
    descricao: string;
    nomeLicenca: string;
    urlLicensa: string;
    constructor();
    protected obterEstruturasDeAltoNivelDeControlador(caminhoControlador: string): Declaracao[];
    protected encontrarControladores(): Promise<any[]>;
    protected resolverConstrutoValorDecorador(construtoValor: Construto): any;
    protected resolverAtributosDecorador(decorador: Decorador): Record<string, any>;
    protected resolverDecoradorDocumentacao(atributos: Record<string, any>): RotaOpenApi;
    protected resolverDecoradorResposta(atributos: Record<string, any>): any;
    protected resolverDecorador(decorador: Decorador): any;
    /**
     * Para cada declaração vinda de um controlador, o que se espera são um
     * vetor de expressões, sendo cada expressão contendo pelo menos uma chamada
     * a um dos métodos de Liquido. Normalmente, esses métodos são `rotaGet`, `rotaPost`,
     * etc.
     * @param caminhoControlador O caminho original do arquivo controlador.
     * @param declaracoes As declarações implementadas no arquivo controlador.
     * @returns O descritivo do controlador, ou seja, as rotas e seus respectivos métodos.
     */
    protected lerControlador(caminhoControlador: string, declaracoes: Declaracao[]): [string, {
        [key in MetodoHttpOpenApi]?: RotaOpenApi;
    }];
    documentar(): Promise<DocumentoOpenApi>;
}
