import { type ITerminal } from '@rushstack/terminal';
import type { CommandLineParameterProvider } from '@rushstack/ts-command-line';
import type { RushConfiguration } from '../../api/RushConfiguration';
import type { RushConfigurationProject } from '../../api/RushConfigurationProject';
import { type IGitSelectorParserOptions } from '../../logic/selectors/GitChangedProjectSelectorParser';
export declare const SUBSPACE_LONG_ARG_NAME: '--subspace';
interface ISelectionParameterSetOptions {
    gitOptions: IGitSelectorParserOptions;
    includeSubspaceSelector: boolean;
    /**
     * The working directory used to resolve relative paths.
     * This should be the same directory that was used to find the Rush configuration.
     */
    cwd: string;
}
/**
 * This class is provides the set of command line parameters used to select projects
 * based on dependencies.
 *
 * It is a separate component such that unrelated actions can share the same parameters.
 */
export declare class SelectionParameterSet {
    private readonly _rushConfiguration;
    private readonly _fromProject;
    private readonly _impactedByProject;
    private readonly _impactedByExceptProject;
    private readonly _onlyProject;
    private readonly _toProject;
    private readonly _toExceptProject;
    private readonly _subspaceParameter;
    private readonly _fromVersionPolicy;
    private readonly _toVersionPolicy;
    private readonly _selectorParserByScope;
    constructor(rushConfiguration: RushConfiguration, action: CommandLineParameterProvider, options: ISelectionParameterSetOptions);
    /**
     * Used to implement the `preventSelectingAllSubspaces` policy which checks for commands that accidentally
     * select everything.   Return `true` if the CLI was invoked with selection parameters.
     *
     * @remarks
     * It is still possible for a user to select everything, but they must do so using an explicit selection
     * such as `rush install --from thing-that-everything-depends-on`.
     */
    didUserSelectAnything(): boolean;
    /**
     * Computes the set of selected projects based on all parameter values.
     *
     * If no parameters are specified, returns all projects in the Rush config file.
     */
    getSelectedProjectsAsync(terminal: ITerminal): Promise<Set<RushConfigurationProject>>;
    /**
     * Represents the selection as `--filter` parameters to pnpm.
     *
     * @remarks
     *
     * IMPORTANT: This function produces PNPM CLI operators that select projects from PNPM's temp workspace.
     * If Rush subspaces are enabled, PNPM cannot see the complete Rush workspace, and therefore these operators
     * would malfunction. In the current implementation, we calculate them anyway, then `BaseInstallAction.runAsync()`
     * will overwrite `pnpmFilterArgumentValues` with a flat list of project names.  In the future, these
     * two code paths will be combined into a single general solution.
     *
     * @see https://pnpm.io/filtering
     */
    getPnpmFilterArgumentValuesAsync(terminal: ITerminal): Promise<string[]>;
    /**
     * Usage telemetry for selection parameters. Only saved locally, and if requested in the config.
     */
    getTelemetry(): {
        [key: string]: string;
    };
    /**
     * Computes the referents of parameters that accept a project identifier.
     * Handles '.', unscoped names, and scoped names.
     */
    private _evaluateProjectParameterAsync;
}
export {};
//# sourceMappingURL=SelectionParameterSet.d.ts.map