import { AsyncOptionalCreatable } from '@salesforce/kit';
import { Nullable } from '@salesforce/ts-types';
import { AuthFields } from '../../org/authInfo';
import { ConfigContents } from '../../config/configStackTypes';
export type Aliasable = string | Partial<AuthFields>;
export declare const DEFAULT_GROUP = "orgs";
export declare const FILENAME = "alias.json";
export declare class AliasAccessor extends AsyncOptionalCreatable {
    private fileLocation;
    /** orgs is the default group */
    private aliasStore;
    /**
     * Returns all the aliases for all the values
     */
    getAll(): ConfigContents<string>;
    /**
     * Returns all the aliases for a given entity
     *
     * @param entity the aliasable entity that you want to get the aliases of
     */
    getAll(entity: Aliasable): string[];
    /**
     * Returns the first alias found for a given entity
     *
     * @param entity the aliasable entity that you want to get the alias of
     */
    get(entity: Aliasable): Nullable<string>;
    /**
     * Returns the value that corresponds to the given alias if it exists
     *
     * @param alias the alias that corresponds to a value
     */
    getValue(alias: string): Nullable<string>;
    /**
     * Returns the username that corresponds to the given alias if it exists
     *
     * @param alias the alias that corresponds to a username
     */
    getUsername(alias: string): Nullable<string>;
    /**
     * If the provided string is an alias, it returns the corresponding username.
     * If the provided string is not an alias, we assume that the provided string
     * is the username and return it.
     *
     * This method is helpful when you don't know if the string you have is a username
     * or an alias.
     *
     * @param usernameOrAlias a string that might be a username or might be an alias
     */
    resolveUsername(usernameOrAlias: string): string;
    /**
     * If the provided string is an alias, return it.
     * If the provided string is not an alias, return the username of the provided alias
     *
     * This method is helpful when you don't know if the string you have is a username
     * or an alias.
     *
     * @param usernameOrAlias a string that might be a username or might be an alias
     */
    resolveAlias(usernameOrAlias: string): string | undefined;
    /**
     * Set an alias for the given aliasable entity.  Writes to the file
     *
     * @param alias the alias you want to set
     * @param entity the aliasable entity that's being aliased
     */
    setAndSave(alias: string, entity: Aliasable): Promise<void>;
    /**
     * Unset the given alias(es).  Writes to the file
     *
     */
    unsetAndSave(alias: string): Promise<void>;
    /**
     * Unset all the aliases for the given array of entity.
     *
     * @param entity the aliasable entity for which you want to unset all aliases
     */
    unsetValuesAndSave(aliasees: Aliasable[]): Promise<void>;
    /**
     * Returns true if the provided alias exists
     *
     * @param alias the alias you want to check
     */
    has(alias: string): boolean;
    protected init(): Promise<void>;
    /**
     * go to the fileSystem and read the file, storing a copy in the class's store
     * if the file doesn't exist, create it empty
     */
    private readFileToAliasStore;
}
export declare const getFileLocation: () => string;
