import { EntryClass, ApplicationRepresentation, ApplicationStructureRepresentation, ProcessRepresentation } from '../domain';
import { ProcfileReconcilerAccessor } from './ProcfileReconcilerAccessor';
/**
 * Class ProcfileReconciler
 */
export declare class ProcfileReconciler {
    appRepresentation: ApplicationRepresentation;
    procfileBasePath: string;
    protected discovered: boolean;
    protected procfileReconcilerAccessor: ProcfileReconcilerAccessor;
    protected processes: Array<ProcessRepresentation>;
    protected get appDir(): string;
    constructor(appRepresentation: ApplicationRepresentation);
    /**
     * Find out all possibly profile.js paths
     * @return {Array}
     */
    resovle(): any[];
    /**
     * Discover procfile.js in appDir, and apply them.
     */
    discover(): void;
    /**
     * callProcfile required a argument as typed function, then call that function, pass ProcfileReconcilerAccessor as the first argument of that function.
     * @param entryFn
     * @param path
     */
    callProcfile(entryFn: any, path?: any): void;
    /**
     * Normalize entry class, entry class such as service class
     * Those classes have a lazy way to represent, it can get a relative path
     * this method will wrap that relative path to a real class
     * @param entry
     * @return {EntryClass}
     */
    normalizeEntry(entry: any): EntryClass;
    /**
     * Define process representation
     * @param processRepresentation
     * @return {ProcessRepresentation}
     */
    defineProcess(processRepresentation: any): ProcessRepresentation;
    /**
     * Get a process representation by name
     * @param lookingFor
     * @return {ProcessRepresentation}
     */
    getProcessByName(lookingFor: any): ProcessRepresentation;
    /**
     * Drop a process representation by name
     */
    dropProcessByName(lookingFor: any): void;
    /**
     * Get all available processes
     * @return {any}
     */
    protected getAvailableProcessMap(): {};
    /**
     * Get the Static Structure of the Application
     * @return {ApplicationStructureRepresentation}
     */
    getApplicationStructure(): ApplicationStructureRepresentation;
    /**
     * Echo the appRepresentation to a file
     * For static getStructureViaNewProcess() read
     * @param {ApplicationRepresentation} appRepresentation
     * @param {string} writeTo
     */
    static echoStructure(appRepresentation: ApplicationRepresentation, writeTo: string): void;
    /**
     * Get the appRepresentation via a tmp process
     * Make sure daemon will not got any we don\'t want to be included
     * @param {ApplicationRepresentation} appRepresentation
     * @return {Promise<ApplicationStructureRepresentation>}
     */
    static getStructureViaNewProcess(appRepresentation: ApplicationRepresentation): Promise<ApplicationStructureRepresentation>;
    /**
     *
     * @param process
     * @return {ProcessRepresentation}
     */
    private makeupProcess;
}
