import type { BaseType, EnumType, Extension, IntersectionType, Metadata, NestedObjectLiteralType, Parameter, ParameterSource, RefAliasType, RefEnumType, RefObjectType, ReferenceType, ResolverProperty, UnionType, Validators, VariableType } from '@trapi/metadata';
import type { Options, OptionsInput } from '../config';
import type { DocumentFormat } from '../constants';
import type { DocumentFormatData } from '../type';
import type { BaseSchema, Info, SchemaV2, SchemaV3, SpecV2, SpecV3 } from '../schema';
export declare abstract class AbstractSpecGenerator<Spec extends SpecV2 | SpecV3, Schema extends SchemaV3 | SchemaV2> {
    protected spec: Spec | undefined;
    protected readonly metadata: Metadata;
    protected readonly config: Options;
    constructor(metadata: Metadata, config: OptionsInput);
    save(): Promise<Record<`${DocumentFormat}`, DocumentFormatData>>;
    abstract build(): Promise<Spec>;
    protected buildInfo(): Info;
    protected getSchemaForType(type: BaseType): Schema | BaseSchema<Schema>;
    protected abstract getSchemaForIntersectionType(type: IntersectionType): Schema;
    protected abstract getSchemaForEnumType(enumType: EnumType): Schema;
    private getSchemaForPrimitiveType;
    private getSchemaForArrayType;
    getSchemaForObjectLiteralType(objectLiteral: NestedObjectLiteralType): BaseSchema<Schema>;
    protected abstract getSchemaForReferenceType(referenceType: ReferenceType): Schema;
    protected abstract getSchemaForUnionType(type: UnionType): Schema;
    protected abstract buildSchemaForRefAlias(referenceType: RefAliasType): Schema;
    protected abstract buildSchemaForRefEnum(referenceType: RefEnumType): Schema;
    protected abstract buildSchemaForRefObject(referenceType: RefObjectType): Schema;
    protected buildSchemasForReferenceTypes(extendFn?: (output: Schema, input: ReferenceType) => void): Record<string, Schema>;
    protected isUndefinedProperty(input: ResolverProperty): boolean;
    protected abstract buildProperties(properties: ResolverProperty[]): Record<string, Schema>;
    protected determineTypesUsedInEnum(anEnum: Array<string | number | boolean | null>): VariableType[];
    protected decideEnumType(input: Array<string | number | boolean>): 'string' | 'number' | 'boolean';
    protected getOperationId(name: string): string;
    protected groupParameters(items: Parameter[]): Partial<Record<ParameterSource, Parameter[]>>;
    protected transformExtensions(input?: Extension[]): Record<string, any>;
    protected transformValidators(input?: Validators): Record<string, any>;
}
//# sourceMappingURL=abstract.d.ts.map