import { Request } from "express";
import { IMetaParametro, ListaMetadataParametro, MetadataParametro } from "../metadata/parametro.metadata";
import { ListaMetadataProprieta } from "../metadata/proprieta.metadata";
import { IParametriEstratti, IRitornoValidatore, TypeDovePossoTrovarlo, TypePosizione } from "./utility/utility";
export interface IExpressParametro extends IMetaParametro {
    valore?: any;
    dovePossoTrovarlo?: TypeDovePossoTrovarlo;
    posizione?: TypePosizione;
    autenticatore?: boolean;
    Validatore?: (parametro: any) => IRitornoValidatore;
}
export declare class ExpressParametro extends MetadataParametro implements IExpressParametro {
    valore: any;
    dovePossoTrovarlo: TypeDovePossoTrovarlo;
    posizione: TypePosizione;
    autenticatore: boolean;
    constructor(item: IExpressParametro);
    Validatore?: (parametro: any) => IRitornoValidatore;
    Verifica(): boolean;
    Init(item: ExpressParametro): void;
    PrintStruttura(): string;
}
export declare class ListaExpressParametro extends ListaMetadataParametro {
    constructor(item?: ListaMetadataProprieta);
    GetThis(): this;
    Mergia(item: ListaExpressParametro): void;
    CercaSeNoAggiungi(item: ExpressParametro): ExpressParametro;
    Cerca(item: ExpressParametro): ExpressParametro | undefined;
    AggiungiElemento(item: ExpressParametro): ExpressParametro;
    /**
     * Estrae i parametri dalla request, per estrarli legge i valori di se stesso e ne verifica le seguenti cose:
     * - che sia obbligatorio
     * - che sia Validato se prevede un validatore
     * - che sia Verificato
     * @param richiesta
     * @returns
     */
    EstraiParametriDaRequest(richiesta: Request): IParametriEstratti;
    GetAutenticatore(): ExpressParametro | Array<ExpressParametro> | undefined;
}
