/**
 * Represents a URI.
 */
export declare class Uri {
    private static readonly _keys;
    private static readonly _queryRegex;
    private static readonly _uriRegex;
    /**
     * The scheme of the URI (also known as protocol). E.g. "http", "ftp", etc.
     */
    scheme: string;
    /**
     * The authority, i.e. the combination of user info, host, and port.
     */
    get authority(): string;
    /**
     * The user name.
     */
    user: string;
    /**
     * The user password.
     */
    password: string;
    /**
     * The host name.
     */
    host: string;
    /**
     * The port.
     */
    port: string;
    /**
     * The path.
     */
    path: string;
    /**
     * The full query string.
     */
    get query(): string;
    set query(value: string);
    /**
     * Maps individual query parameters to query values. Values that don't have
     * a key can be accessed by numeric index. The nth such query parameter will
     * have key n (counting starts at 0). So for "?foo=1&bar&baz", queryValues
     * will be [["foo", 1], [0, "bar"], [1, "baz"]].
     */
    readonly queryValues: Map<string | number, string>;
    /**
     * The fragment, also known as the hash.
     */
    fragment: string;
    /**
     * Determines whether this URI is relative.
     */
    get isRelative(): boolean;
    /**
     * Determines whether this URI is absolute.
     */
    get isAbsolute(): boolean;
    /**
     * Creates a new Uri object.
     *
     * @param uri An optional string representation of a URI to build from.
     */
    constructor(uri?: string);
    /**
     * Creates a deep copy of this URI.
     */
    clone(): Uri;
    /**
     * Returns the string representation of this URI.
     */
    toString(): string;
    /**
     * Attempts to converts a URI into an absolute URI.
     *
     * @param baseUri The base URI that acts as the context for a relative URI.
     * @returns A new Uri object that represents the transformation of the the
     *   current URI in relation to baseUri. The algorithm follows the one
     *   outlined in RFC-3986 section 5.2.2. Note that the result might not
     *   actually be an absolute URI if baseUri is not itself absolute.
     */
    toAbsoluteUri(baseUri: Uri | string): Uri;
    private _parseUri;
}
/**
 * Determines whether a URI is relative.
 *
 * @param uri The URI to check.
 * @returns `true` if the URI is relative, empty, or undefined; otherwise,
 *   `false`.
 */
export declare function isRelativeUri(uri: string | undefined): boolean;
/**
 * Determines whether a URI is absolute.
 *
 * @param uri The URI to check.
 */
export declare function isAbsoluteUri(uri: string): boolean;
/**
 * Determines whether a URI is pointing at a package (starts with @).
 *
 * @param uri The URI to check.
 */
export declare function isPackageUri(uri: string): boolean;
/**
 * Attempts to converts a URI into an absolute URI.
 *
 * @param uri The URI to convert.
 * @param baseUri The base URI that acts as the context for a relative URI. Must
 *   be absolute. If not specified, then it will be the value of
 *   `window.location`.
 */
export declare function toAbsoluteUri(uri: string, baseUri?: string): string;
/**
 * Adds (or updates) a query parameter in a URI.
 *
 * @param uri The URI to add a parameter to.
 * @param parameter The name of the query parameter to add. If it already
 *   exists, the value will be updated.
 * @param value The value for the query parameter.
 */
export declare function addQueryParameter(uri: string | Uri, parameter: string, value: string): string;
/**
 * Removes a query parameter from a URI, if it exists.
 *
 * @param uri The URI to add a parameter to.
 * @param parameter The name of the query parameter to remove.
 */
export declare function removeQueryParameter(uri: string | Uri, parameter: string): string;
