import { LibrariesBuildOptions, TestBuildOptions } from '../index';
import type { BaseProject } from './classes/base-project';
export type CoreProjectEnvironment = {
    shortName?: string;
    name?: string;
    description?: string;
    onlineLink?: string;
};
export type CoreCommandArgOptions<PROJECT extends BaseProject<any, any>> = {
    project?: PROJECT;
    /**
     * watch mode
     */
    watch?: boolean;
    prod?: boolean;
    debug?: boolean;
    isInReleaseProcess?: boolean;
    libraryBuildOptions?: LibrariesBuildOptions;
    testBuildOptions?: TestBuildOptions;
    /**
     * first arg from command line
     */
    firstArg?: string;
    /**
     * Not question for user ex.
     * - automatic process of patch release
     * - automatic deployment for default server
     */
    automaticProcess?: boolean;
    /**
     * orignal args with params
     */
    argsWithParams?: string;
    copyto?: string[];
    copytoall?: boolean;
    /**
     * args from command line (clearn from params)
     */
    args?: string[];
    exitCallback?: () => void;
};
export declare class CoreProject<PROJECT extends BaseProject = BaseProject> {
    static coreProjects: CoreProject<any>[];
    static from<Proj extends BaseProject = BaseProject<any, any>>(options: Omit<CoreProject<Proj>, 'name' | 'url' | 'branch'>): CoreProject<Proj>;
    private constructor();
    extends?: CoreProject<any>;
    color?: string;
    /**
     * second color for project (optional)
     */
    secondColor?: string;
    /**
     * second color for project (optional)
     */
    thirdColor?: string;
    npmRegistry?: string;
    description?: string;
    /**
     * ssh url for git repo
     */
    urlSSH?: string;
    /**
     * https url for git repo
     */
    urlHttp?: string;
    /**
     * main branches - first is default
     */
    branches: string[];
    /**
     * project environments
     */
    environments?: CoreProjectEnvironment[];
    cleanCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
    initCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
    /**
     * Build whatever is needed to run project
     * buildCommand includes initCommand
     */
    buildCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
    /**
     * startCommand includes initCommand, buildCommand and launchCommand
     */
    startCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
    /**
     * launch already built project
     */
    launchCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
    releaseCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
    publishCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
    deployCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
    testCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
    docsCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
    /**
     * function to recognize project
     */
    recognizedFn: (project: PROJECT) => boolean;
    /**
     * core porject name from repo basename
     */
    get name(): string;
    /**
     * main (default for reset) branch
     */
    get branch(): string;
    /**
     * url for git repo
     */
    get url(): string;
}
export declare const CoreTypescriptProject: CoreProject<BaseProject<BaseProject<any, any>, import("tnp-core/source").CoreModels.BaseProjectType>>;
export declare const CoreAngularProject: CoreProject<BaseProject<BaseProject<any, any>, import("tnp-core/source").CoreModels.BaseProjectType>>;