import { IProperty, Property } from './Property.js';
export declare const Kind = "Core#Server";
export interface IServer {
    kind: typeof Kind;
    /**
     * The base URI of the server.
     *
     * Note, the URL can contain URI templates (e.g. `http://{host}.api.com/v1`)
     * In this case the variable is replaced with the system or project variables.
     *
     * For simplicity, the `uri` can be the full base URI with protocol, host, and the `basePath`
     */
    uri: string;
    /**
     * Usually included in the `uri`. When the `uri` is missing a protocol this is then used.
     */
    protocol?: string;
    /**
     * The base path for the server. It starts with the `/`.
     * When set, it is appended to the `uri` value.
     */
    basePath?: string;
    /**
     * Optional description of the server.
     */
    description?: string;
}
export declare class Server {
    kind: string;
    /**
     * The base URI of the server.
     *
     * Note, the URL can contain URI templates (e.g. `http://{host}.api.com/v1`)
     * In this case the variable is replaced with the system or project variables.
     *
     * For simplicity, the `uri` can be the full base URI with protocol, host, and the `basePath`
     */
    uri: string;
    /**
     * Usually included in the `uri`. When the `uri` is missing a protocol
     * this is then used.
     */
    protocol?: string;
    /**
     * The base path for the server. It starts with the `/`.
     * When set, it is appended to the `uri` value.
     */
    basePath?: string;
    /**
     * Optional description of the server.
     */
    description?: string;
    /**
     * Creates a server definition from a base URI.
     */
    static fromUri(uri: string): Server;
    /**
     * @param input The server definition used to restore the state.
     */
    constructor(input?: string | IServer);
    /**
     * Creates a new server clearing anything that is so far defined.
     *
     * Note, this throws an error when the server is not a server.
     */
    new(init: IServer): void;
    /**
     * Checks whether the input is a definition of a server.
     */
    static isServer(input: unknown): boolean;
    toJSON(): IServer;
    /**
     * Constructs the final URI from the server configuration.
     *
     * @param variables When set it evaluates the generated URI against these variables
     */
    readUri(variables?: (IProperty | Property)[]): string;
    /**
     * Evaluates the URI against the variables.
     *
     * Note, this doesn't throw errors. When error occurs it returns the input string.
     *
     * @param uri The URI to process
     * @param variables The list of variables to use
     * @returns Expanded URI.
     */
    protected evaluateUri(uri: string, variables: (IProperty | Property)[]): string;
}
//# sourceMappingURL=Server.d.ts.map