import { Swagger, Tsoa } from '@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;
    protected buildInfo(): Swagger.Info;
    protected buildComponents(): {
        examples: {};
        headers: {};
        parameters: {};
        requestBodies: {};
        responses: {};
        schemas: {
            [name: string]: Swagger.Schema3;
        };
        securitySchemes: {};
    };
    protected translateSecurityDefinitions(definitions: {
        [name: string]: Swagger.SecuritySchemes;
    }): {
        [name: string]: Swagger.SecuritySchemes;
    };
    protected hasOAuthFlow(definition: any): definition is {
        flow: string;
    };
    protected hasOAuthFlows(definition: any): definition is {
        flows: Swagger.OAuthFlow;
    };
    protected buildServers(): Swagger.Server[];
    protected buildSchema(): {
        [name: string]: Swagger.Schema3;
    };
    protected buildPaths(): {
        [pathName: string]: Swagger.Path3;
    };
    protected buildMethod(controllerName: string, method: Tsoa.Method, pathObject: any, defaultProduces?: string[]): void;
    protected buildOperation(controllerName: string, method: Tsoa.Method, defaultProduces?: string[]): Swagger.Operation3;
    protected buildRequestBodyWithFormData(controllerName: string, method: Tsoa.Method, parameters: Tsoa.Parameter[]): Swagger.RequestBody;
    protected buildRequestBody(controllerName: string, method: Tsoa.Method, parameter: Tsoa.Parameter): Swagger.RequestBody;
    protected buildMediaType(controllerName: string, method: Tsoa.Method, parameter: Tsoa.Parameter): Swagger.MediaType;
    protected buildQueriesParameter(source: Tsoa.Parameter): Swagger.Parameter3[];
    protected buildParameter(source: Tsoa.Parameter): Swagger.Parameter3;
    protected buildExamples(source: Pick<Tsoa.Parameter, 'example' | 'exampleLabels'>): {
        example?: unknown;
        examples?: {
            [name: string]: Swagger.Example3;
        };
    };
    protected buildProperties(source: Tsoa.Property[]): {
        [propertyName: string]: Swagger.Schema3;
    };
    protected getSwaggerTypeForReferenceType(referenceType: Tsoa.ReferenceType): Swagger.BaseSchema;
    protected getSwaggerTypeForPrimitiveType(dataType: Tsoa.PrimitiveTypeLiteral): Swagger.BaseSchema;
    protected isNull(type: Tsoa.Type): boolean;
    protected groupEnums(types: Swagger.BaseSchema[]): Swagger.BaseSchema<unknown>[];
    protected removeDuplicateSwaggerTypes(types: Swagger.BaseSchema[]): Swagger.BaseSchema[];
    protected getSwaggerTypeForUnionType(type: Tsoa.UnionType, title?: string): {
        allOf: Swagger.BaseSchema<unknown>[];
        nullable: true;
    } | {
        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[];
        additionalProperties?: boolean | Swagger.BaseSchema;
        properties?: {
            [propertyName: string]: unknown;
        } | undefined;
        discriminator?: string;
        readOnly?: boolean;
        xml?: Swagger.XML;
        externalDocs?: Swagger.ExternalDocs;
        example?: unknown;
        required?: string[];
        items?: Swagger.BaseSchema;
        allOf?: undefined;
    } | {
        anyOf: Swagger.BaseSchema<unknown>[];
        nullable: true;
        title?: string | undefined;
        allOf?: 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[];
        additionalProperties?: boolean | Swagger.BaseSchema;
        properties?: {
            [propertyName: string]: unknown;
        } | undefined;
        discriminator?: string;
        readOnly?: boolean;
        xml?: Swagger.XML;
        externalDocs?: Swagger.ExternalDocs;
        example?: unknown;
        required?: string[];
        items?: Swagger.BaseSchema;
        allOf?: undefined;
        nullable?: undefined;
    } | {
        anyOf: Swagger.BaseSchema<unknown>[];
        title?: string | undefined;
        allOf?: undefined;
        nullable?: undefined;
    };
    protected getSwaggerTypeForIntersectionType(type: Tsoa.IntersectionType, title?: string): {
        title?: string | undefined;
        allOf: Swagger.BaseSchema<unknown>[];
    };
    protected getSwaggerTypeForEnumType(enumType: Tsoa.EnumType, title?: string): Swagger.Schema3;
}
