import { CoreModels } from 'tnp-core';
import type { ChangelogData } from '../../models';
import { BaseFeatureForProject } from './base-feature-for-project';
import type { BaseProject } from './base-project';
export declare class BaseReleaseProcess<PROJECT extends BaseProject<any, any> = any> extends BaseFeatureForProject<PROJECT> {
    /**
     * Automatic release process of patch plus one version
     */
    automaticRelease: boolean;
    versionType: CoreModels.ReleaseVersionType;
    preReleaseVersionTag: CoreModels.PreReleaseVersionTag;
    lastChangesSummary: string;
    newVersion: string;
    commitsForChangelog: {
        commitMessages: string;
        index: number;
    }[];
    startRelease(options?: Partial<BaseReleaseProcess<PROJECT>>): Promise<void>;
    getReleaseWords(): string[];
    selectChangelogCommits(): Promise<{
        commitMessages: string;
        index: number;
    }[]>;
    private getCommitsUpToReleaseCommit;
    checkBundleQuestion(cwdForCode: string, checkMessage?: string): Promise<boolean>;
    /**
     * @returns true if publish , faslse if just version bump
     */
    publishToNpm(options?: CoreModels.NpmPublishOptions): Promise<boolean>;
    protected testAfterPublish(): Promise<boolean>;
    protected testBeforePublish(): Promise<boolean>;
    protected commitAndPush(): Promise<void>;
    protected releaseCommitTemplate(): string;
    private testLibraries;
    buildAllLibraries(): Promise<void>;
    resetReleaseFiles(): Promise<void>;
    get toBumpProjects(): PROJECT[];
    bumpNewVersionEverywhere(): Promise<void>;
    confirmNewVersion(): Promise<void>;
    protected selectReleaseType(versionToUseResolveFn?: (releaseVersionBumpType: CoreModels.ReleaseVersionType) => string, options?: {
        quesitonPrefixMessage?: string;
    }): Promise<CoreModels.ReleaseVersionType>;
    protected commitMessageInChangelogTransformFn(message: string): Promise<string>;
    getChangelogContentToAppend(askForEveryItem: boolean): Promise<string>;
    /**
     * TODO extend this to all commits from last release
     */
    updateChangeLogFromCommits(): Promise<void>;
    extractChangedLibrariesInCommit(hashOrIndex: string | number): Promise<string>;
    changelogItemTemplate(hashOrIndex: string | number, confirmEveryItem?: boolean): Promise<string>;
    generateLastChangesSummary(): Promise<string>;
    getLastChangesFromCommits({ maxMessagesToCheck, stopOnCommitMessage, }?: {
        /**
         * default 3
         */
        maxMessagesToCheck?: number;
        /**
         * stop serching on commit message
         */
        stopOnCommitMessage?: string;
    }): Promise<string>;
    getLastReleaseCommitData(): Promise<{
        lastReleaseCommitMsg: string;
        /**
         * -1 if not found
         */
        index: number;
    }>;
    getLastPackageVersionChangesFromChnagelog(): Promise<string>;
    private get changeLogPath();
    get changelogContent(): string;
    changeLogKeyWord(): string;
    getChnagelogData(): ChangelogData[];
}