import { Example, ImplementationLocation, Link } from '#common/code-model/components';
import { Callback, Encoding, Header, HttpMethod, HttpOperation, HttpOperationParameter, MediaType, RequestBody } from '#common/code-model/http-operation';
import { Schema } from '#common/code-model/schema';
import { Dictionary } from '#common/dictionary';
import { ModelState } from '#common/model-state';
import { Model as CodeModel } from '../common/code-model/code-model';
import { Dereferenced, Refable } from './common';
import * as OpenAPI from './oai3';
export declare class Remodeler {
    private modelState;
    private model;
    private readonly oai;
    constructor(modelState: ModelState<OpenAPI.Model>);
    private dereference;
    copySchemaIntegerOrNumber(original: OpenAPI.Schema, newSchema: Schema): void;
    copySchemaObject(name: string, original: OpenAPI.Schema, newSchema: Schema): void;
    copySchemaArray(name: string, original: OpenAPI.Schema, newSchema: Schema): void;
    copySchemaString(original: OpenAPI.Schema, newSchema: Schema): void;
    copySchema: (name: string, original: OpenAPI.Schema, targetDictionary: Dictionary<Schema>) => Schema;
    add<TSource, TDestination>(name: string, original: Dereferenced<TSource>, target: Dictionary<TDestination>, copyFunc: (name: string, source: TSource, destinationDictionary: Dictionary<TDestination>) => TDestination): TDestination;
    private addOrThrow;
    private safeAdd;
    private refOrAdd;
    copyParameter(name: string, original: OpenAPI.Parameter, implementationLocation: ImplementationLocation | undefined, targetDictionary: Dictionary<HttpOperationParameter>): HttpOperationParameter;
    remodelParameters(source: Dictionary<Refable<OpenAPI.Parameter>>): void;
    copyOperation: (name: string, original: {
        method: HttpMethod;
        path: string;
        operation: OpenAPI.HttpOperation;
        pathItem: OpenAPI.PathItem;
    }, targetDictionary: Dictionary<HttpOperation>) => HttpOperation;
    copyHeader: (headerName: string, original: OpenAPI.Header, targetDictionary: Dictionary<Header>) => Header;
    createHeaderSchema: (containerName: string, responseCode: string, original?: import("#remodeler/common").Optional<Dictionary<Refable<OpenAPI.Header>>>) => Schema | undefined;
    copyHeaders: (containerName: string, original?: import("#remodeler/common").Optional<Dictionary<Refable<OpenAPI.Header>>>) => Dictionary<Header>;
    copyLinks: (containerName: string, original?: import("#remodeler/common").Optional<Dictionary<Refable<OpenAPI.Link>>>) => Dictionary<Link>;
    copyEncoding: (encodingName: string, original: OpenAPI.Encoding) => Encoding;
    copyEncodings(original?: Dictionary<OpenAPI.Encoding>): Dictionary<Encoding>;
    copyMediaType: (mimeType: string, key: string, original: OpenAPI.MediaType) => MediaType;
    remodelPaths(source: Dictionary<Refable<OpenAPI.PathItem>>): void;
    copyRequestBody: (name: string, original: OpenAPI.RequestBody, targetDictionary: Dictionary<RequestBody>) => RequestBody;
    copyCallback: (name: string, original: OpenAPI.Callback, targetDictionary: Dictionary<Callback>) => Callback;
    copyExample: (name: string, original: OpenAPI.Example, targetDictionary: Dictionary<Example>) => Example;
    copyLink: (name: string, original: OpenAPI.Link, targetDictionary: Dictionary<Link>) => Link;
    remodelT<TSource, TDestination>(source: Dictionary<Refable<TSource>>, target: Dictionary<TDestination>, copyFunc: (name: string, source: TSource, targetDictionary: Dictionary<TDestination>) => TDestination): Dictionary<TDestination>;
    remodelTags(source: Array<OpenAPI.Tag>): void;
    remodelServers(source: Array<OpenAPI.Server>): void;
    remodelSecurity(source: Array<Dictionary<string>>): void;
    remodel(): CodeModel;
}
//# sourceMappingURL=remodeler.d.ts.map