/// <reference types="node" />
/**
 * Information about a loaded plugin.
 */
export interface Plugin {
    /**
     * The instance of the plugin class.
     */
    readonly instance: unknown;
    /**
     * The plugin class name.
     */
    readonly class: string;
    /**
     * The plugin package.
     */
    readonly package: Package;
}
/**
 * Information about a plugin package.
 */
export interface Package {
    /**
     * The plugin module.
     */
    readonly module: ReturnType<NodeRequire>;
    /**
      * The npm package of the plugin.
      */
    readonly pkg: string;
    /**
      * The version of the plugin.
      */
    readonly version: string;
    /**
      * The path of the plugin on the local system (after its installed).
      */
    readonly path: string;
}
/**
 * Options for loading a plugin.
 */
export interface PluginManagerLoadOptions {
    /**
     * The plugin package name.
     */
    readonly pkg: string;
    /**
     * The plugin package version.
     */
    readonly version: string;
    /**
     * The plugin package class.
     */
    readonly class: string;
    /**
     * Installation environment (passed on to npm install)
     */
    readonly installEnv?: {
        [key: string]: any;
    };
    /**
     * Plugin instantiation properties.
     */
    readonly properties?: {
        [key: string]: any;
    };
}
/**
 * A `PluginManager` is responsible for loading (and installing) plugins.
 */
export declare class PluginManager {
    private readonly dir;
    constructor(dir: string);
    load(options: PluginManagerLoadOptions): Plugin;
    private loadPackage;
    private installPackage;
    private require;
    private pluginDir;
}
