import { UtilsOs } from 'tnp-core';
import { ConfigDatabase } from '../config-database';
import { ProjectDatabase } from '../project-database';
import { PortsWorker } from '../tcp-udp-ports';
import type { BaseProject } from './base-project';
export declare class BaseProjectResolver<PROJECT extends Partial<BaseProject> = any> {
    protected readonly classFn: any;
    readonly cliToolNameFn: () => string;
    configDb: ConfigDatabase;
    projectsDb: ProjectDatabase;
    /**
     * Assign it to do a clean up before exit program
     */
    exitProgramCleaningFn: () => Promise<any>;
    editor(): Promise<UtilsOs.Editor>;
    readonly portsWorker: PortsWorker;
    protected readonly NPM_PROJECT_KEY = "npm";
    protected projects: PROJECT[];
    /**
     * To speed up checking folder I am keeping paths for already checked folder
     * This may break things that are creating new projects
     */
    protected emptyLocations: string[];
    constructor(classFn: any, cliToolNameFn: () => string);
    get allowedTypes(): string[];
    /**
     * project from process.cwd()
     */
    get Current(): PROJECT;
    /**
     * override this
     */
    typeFrom(location: string, recrusiveCall?: boolean): string;
    From(locationOfProject: string | string[], options?: any): PROJECT;
    nearestTo(absoluteLocation: string | string[], options?: {
        type?: string | string[];
        findGitRoot?: boolean;
        onlyOutSideNodeModules?: boolean;
    }): PROJECT;
    unload(projectOrLocationOfProject: PROJECT | string): void;
    remove(project: PROJECT): void;
    add(project: PROJECT): void;
    allProjectFrom(absoluteLocation: string, stopOnCwd?: string): PROJECT[];
    allProjectsFromFolder(folderLocation: string): PROJECT[];
    sortGroupOfProject<T extends {
        location?: string;
        name?: string;
    } = BaseProject>(projects: T[], resoveDepsArray: (proj: T) => string[], projNameToCompare: (proj: T) => string, projUniqueKeyToCompare?: (proj: T) => string, overridePackagesOrder?: string[]): T[];
}