/// <reference types="node" />
import type { WriteStream } from 'tty';
import type { IComponentsManagerBuilderOptions } from 'componentsjs';
import { ComponentsManager } from 'componentsjs';
import type { App } from './App';
import type { CliArgv, Shorthand, VariableBindings } from './variables/Types';
/**
 * A class that can be used to instantiate and start a server based on a Component.js configuration.
 */
export declare class AppRunner {
    private readonly logger;
    /**
     * Starts the server with a given config.
     * This method can be used to start the server from within another JavaScript application.
     *
     * Keys of the `variableBindings` object should be Components.js variables.
     * E.g.: `{ 'urn:solid-server:default:variable:rootFilePath': '.data' }`.
     *
     * `shorthand` are CLI argument names and their corresponding values.
     * E.g.: `{ rootFilePath: '.data' }`.
     * Abbreviated parameter names can not be used, so `{ f: '.data' }` would not work.
     *
     * The values in `variableBindings` take priority over those in `shorthand`.
     *
     * @param loaderProperties - Components.js loader properties.
     * @param configFile - Path to the server config file(s).
     * @param variableBindings - Bindings of Components.js variables.
     * @param shorthand - Shorthand values that need to be resolved.
     */
    run(loaderProperties: IComponentsManagerBuilderOptions<App>, configFile: string | string[], variableBindings?: VariableBindings, shorthand?: Shorthand): Promise<void>;
    /**
     * Returns an App object, created with the given config, that can start and stop the Solid server.
     *
     * Keys of the `variableBindings` object should be Components.js variables.
     * E.g.: `{ 'urn:solid-server:default:variable:rootFilePath': '.data' }`.
     *
     * `shorthand` are CLI argument names and their corresponding values.
     * E.g.: `{ rootFilePath: '.data' }`.
     * Abbreviated parameter names can not be used, so `{ f: '.data' }` would not work.
     *
     * The values in `variableBindings` take priority over those in `shorthand`.
     *
     * @param loaderProperties - Components.js loader properties.
     * @param configFile - Path to the server config file(s).
     * @param variableBindings - Bindings of Components.js variables.
     * @param shorthand - Shorthand values that need to be resolved.
     */
    create(loaderProperties: IComponentsManagerBuilderOptions<App>, configFile: string | string[], variableBindings?: VariableBindings, shorthand?: Shorthand): Promise<App>;
    /**
     * Starts the server as a command-line application.
     * Will exit the process on failure.
     *
     * Made non-async to lower the risk of unhandled promise rejections.
     * This is only relevant when this is used to start as a Node.js application on its own,
     * if you use this as part of your code you probably want to use the async version.
     *
     * @param argv - Command line arguments.
     * @param stderr - Stream that should be used to output errors before the logger is enabled.
     */
    runCliSync({ argv, stderr }: {
        argv?: CliArgv;
        stderr?: WriteStream;
    }): void;
    /**
     * Starts the server as a command-line application.
     * @param argv - Command line arguments.
     */
    runCli(argv?: CliArgv): Promise<void>;
    /**
     * Returns an App object, created by parsing the Command line arguments, that can start and stop the Solid server.
     * Will exit the process on failure.
     *
     * @param argv - Command line arguments.
     */
    createCli(argv?: CliArgv): Promise<App>;
    /**
     * Retrieves settings from package.json or configuration file when
     * part of an npm project.
     * @returns The settings defined in the configuration file
     */
    getPackageSettings(): Promise<undefined | Record<string, unknown>>;
    /**
     * Creates the Components Manager that will be used for instantiating.
     */
    createComponentsManager<T>(loaderProperties: IComponentsManagerBuilderOptions<T>, configFile: string | string[]): Promise<ComponentsManager<T>>;
    /**
     * Handles the first Components.js instantiation.
     * Uses it to extract the CLI shorthand values and use those to create variable bindings.
     */
    private cliToVariables;
    /**
     * Instantiates the {@link CliResolver}.
     */
    private createCliResolver;
    /**
     * Uses the {@link CliExtractor} to convert the CLI args to a {@link Shorthand} object.
     */
    private extractShorthand;
    /**
     * Uses the {@link ShorthandResolver} to convert {@link Shorthand} to {@link VariableBindings} .
     */
    private resolveShorthand;
    /**
     * The second Components.js instantiation,
     * where the App is created and started using the variable mappings.
     */
    private createApp;
    /**
     * Throws a new error that provides additional information through the extra message.
     * Also appends the stack trace to the message.
     * This is needed for errors that are thrown before the logger is created as we can't log those the standard way.
     */
    private resolveError;
}
