import type { IPackageJson } from '@rushstack/node-core-library';
import type { ITerminal } from '@rushstack/terminal';
import type { IChangeInfo } from '../api/ChangeManagement';
import type { RushConfiguration } from '../api/RushConfiguration';
import type { RushConfigurationProject } from '../api/RushConfigurationProject';
import type { VersionPolicyConfiguration } from '../api/VersionPolicyConfiguration';
import { PrereleaseToken } from './PrereleaseToken';
/**
 * The class manages change files and controls how changes logged by change files
 * can be applied to package.json and change logs.
 */
export declare class ChangeManager {
    private _prereleaseToken;
    private _orderedChanges;
    private _allPackages;
    private _allChanges;
    private _changeFiles;
    private _rushConfiguration;
    private _projectsToExclude;
    constructor(rushConfiguration: RushConfiguration, projectsToExclude?: Set<string> | undefined);
    /**
     * Load changes from change files
     * @param prereleaseToken - prerelease token
     * @param includeCommitDetails - whether commit details need to be included in changes
     */
    loadAsync(prereleaseToken?: PrereleaseToken, includeCommitDetails?: boolean): Promise<void>;
    hasChanges(): boolean;
    get packageChanges(): IChangeInfo[];
    get allPackages(): ReadonlyMap<string, RushConfigurationProject>;
    validateChanges(versionConfig: VersionPolicyConfiguration): void;
    /**
     * Apply changes to package.json
     * @param shouldCommit - If the value is true, package.json will be updated.
     * If the value is false, package.json and change logs will not be updated. It will only do a dry-run.
     */
    apply(shouldCommit: boolean): Map<string, IPackageJson> | undefined;
    updateChangelogAsync(terminal: ITerminal, shouldCommit: boolean): Promise<void>;
}
//# sourceMappingURL=ChangeManager.d.ts.map