import { OpenApi, Operation, Media } from './openapi';
import { PlyEndpointMeta } from './apidocs';
import { Log } from '../log';
export interface EndpointMethod {
    file: string;
    class: string;
    name: string;
    path: string;
    method: 'get' | 'post' | 'put' | 'patch' | 'delete';
    lastSegmentOptional?: boolean;
}
export interface PlyexOptions {
    tsConfig?: string;
    sourcePatterns?: string[];
    addMissingOperations?: boolean;
    /**
     * Overwrite existing summaries, operationIds, descriptions, examples and code samples.
     */
    overwrite?: boolean;
    /**
     * Add operations summaries/descripts for endpoint methods not tagged with @ply.
     */
    includeUntagged?: boolean;
    /**
     * Request/response samples from actual results instead of expected.
     */
    samplesFromActual?: boolean;
}
export declare const defaultOptions: PlyexOptions;
export declare class Plyex {
    readonly plugin: string;
    readonly logger: Log;
    readonly options: PlyexOptions;
    private ts;
    private jsDocReaders;
    constructor(plugin: string, logger: Log, options?: PlyexOptions);
    getPluginEndpointMethods(): EndpointMethod[];
    augment(openApi: OpenApi, endpointMethods?: EndpointMethod[]): Promise<OpenApi>;
    doAugment(openApi: OpenApi, endpointMethods: EndpointMethod[]): Promise<OpenApi>;
    operation(endpointMethod: EndpointMethod): Operation;
    examples(endpointMethod: EndpointMethod, operation: Operation, plyEndpointMeta: PlyEndpointMeta): void;
    schemaType(jsonPayload: Media): string;
    codeSamples(operation: Operation, endpointMethod: EndpointMethod, schemaType: string, example: any): void;
    typeName(schemaType: string): string;
    /**
     * Crude pluralization -- override with jsdoc
     */
    private pluralize;
    private capitalize;
    private uncapitalize;
    private epm;
    private example;
    private cleanupJson;
}
export interface PlyexPlugin {
    getEndpointMethods(): EndpointMethod[];
}
