import { Swagger, Tsoa } from '@namecheap/tsoa-runtime';
import { ExtendedSpecConfig } from '../cli';
import { SpecGenerator } from './specGenerator';
/**
 * TODO:
 * Handle formData parameters
 * Handle requestBodies of type other than json
 * Handle requestBodies as reusable objects
 * Handle headers, examples, responses, etc.
 * Cleaner interface between SpecGenerator2 and SpecGenerator3
 * Also accept OpenAPI 3.0.0 metadata, like components/securitySchemes instead of securityDefinitions
 */
export declare class SpecGenerator3 extends SpecGenerator {
    protected readonly metadata: Tsoa.Metadata;
    protected readonly config: ExtendedSpecConfig;
    constructor(metadata: Tsoa.Metadata, config: ExtendedSpecConfig);
    GetSpec(): Swagger.Spec3;
    private buildInfo;
    private buildComponents;
    private translateSecurityDefinitions;
    private hasOAuthFlow;
    private hasOAuthFlows;
    private buildServers;
    private buildSchema;
    private buildPaths;
    private buildMethod;
    protected buildOperation(controllerName: string, method: Tsoa.Method, defaultProduces?: string[]): Swagger.Operation3;
    private buildRequestBodyWithFormData;
    private buildRequestBody;
    private buildMediaType;
    private buildQueriesParameter;
    private buildParameter;
    protected buildProperties(source: Tsoa.Property[]): {
        [propertyName: string]: Swagger.Schema3;
    };
    protected getSwaggerTypeForReferenceType(referenceType: Tsoa.ReferenceType): Swagger.BaseSchema;
    protected getSwaggerTypeForPrimitiveType(dataType: Tsoa.PrimitiveTypeLiteral): Swagger.Schema;
    private isNull;
    private groupEnums;
    protected removeDuplicateSwaggerTypes(types: Array<Swagger.Schema | Swagger.BaseSchema>): Array<Swagger.Schema | Swagger.BaseSchema>;
    protected getSwaggerTypeForUnionType(type: Tsoa.UnionType, title?: string): {
        allOf: (Swagger.Schema | Swagger.BaseSchema)[];
        nullable: true;
    } | {
        nullable: true;
        type?: Swagger.DataType;
        format?: Swagger.DataFormat;
        additionalProperties?: boolean | Swagger.BaseSchema;
        properties?: {
            [propertyName: string]: Swagger.Schema3;
        };
        discriminator?: string;
        readOnly?: boolean;
        xml?: Swagger.XML;
        externalDocs?: Swagger.ExternalDocs;
        example?: unknown;
        required?: string[];
        $ref?: string;
        title?: string;
        description?: string;
        default?: string | boolean | number | unknown;
        multipleOf?: number;
        maximum?: number;
        exclusiveMaximum?: number;
        minimum?: number;
        exclusiveMinimum?: number;
        maxLength?: number;
        minLength?: number;
        pattern?: string;
        maxItems?: number;
        minItems?: number;
        uniqueItems?: boolean;
        maxProperties?: number;
        minProperties?: number;
        enum?: Array<boolean | string | number | null>;
        'x-enum-varnames'?: string[];
        items?: Swagger.BaseSchema;
        allOf?: undefined;
    } | {
        nullable: true;
        type?: string;
        format?: Swagger.DataFormat;
        $ref?: string;
        title?: string;
        description?: string;
        default?: string | boolean | number | unknown;
        multipleOf?: number;
        maximum?: number;
        exclusiveMaximum?: number;
        minimum?: number;
        exclusiveMinimum?: number;
        maxLength?: number;
        minLength?: number;
        pattern?: string;
        maxItems?: number;
        minItems?: number;
        uniqueItems?: boolean;
        maxProperties?: number;
        minProperties?: number;
        enum?: Array<boolean | string | number | null>;
        'x-enum-varnames'?: string[];
        items?: Swagger.BaseSchema;
        allOf?: undefined;
    } | {
        anyOf: (Swagger.Schema | Swagger.BaseSchema)[];
        nullable: true;
        title?: string | undefined;
        allOf?: undefined;
    } | {
        type?: Swagger.DataType;
        format?: Swagger.DataFormat;
        additionalProperties?: boolean | Swagger.BaseSchema;
        properties?: {
            [propertyName: string]: Swagger.Schema3;
        };
        discriminator?: string;
        readOnly?: boolean;
        xml?: Swagger.XML;
        externalDocs?: Swagger.ExternalDocs;
        example?: unknown;
        required?: string[];
        $ref?: string;
        title?: string;
        description?: string;
        default?: string | boolean | number | unknown;
        multipleOf?: number;
        maximum?: number;
        exclusiveMaximum?: number;
        minimum?: number;
        exclusiveMinimum?: number;
        maxLength?: number;
        minLength?: number;
        pattern?: string;
        maxItems?: number;
        minItems?: number;
        uniqueItems?: boolean;
        maxProperties?: number;
        minProperties?: number;
        enum?: Array<boolean | string | number | null>;
        'x-enum-varnames'?: string[];
        items?: Swagger.BaseSchema;
        allOf?: undefined;
        nullable?: undefined;
    } | {
        type?: string;
        format?: Swagger.DataFormat;
        $ref?: string;
        title?: string;
        description?: string;
        default?: string | boolean | number | unknown;
        multipleOf?: number;
        maximum?: number;
        exclusiveMaximum?: number;
        minimum?: number;
        exclusiveMinimum?: number;
        maxLength?: number;
        minLength?: number;
        pattern?: string;
        maxItems?: number;
        minItems?: number;
        uniqueItems?: boolean;
        maxProperties?: number;
        minProperties?: number;
        enum?: Array<boolean | string | number | null>;
        'x-enum-varnames'?: string[];
        items?: Swagger.BaseSchema;
        allOf?: undefined;
        nullable?: undefined;
    } | {
        anyOf: (Swagger.Schema | Swagger.BaseSchema)[];
        title?: string | undefined;
        allOf?: undefined;
        nullable?: undefined;
    };
    protected getSwaggerTypeForIntersectionType(type: Tsoa.IntersectionType, title?: string): {
        title?: string | undefined;
        allOf: (Swagger.Schema | Swagger.BaseSchema)[];
    };
    protected getSwaggerTypeForEnumType(enumType: Tsoa.EnumType, title?: string): Swagger.Schema3;
}
