import type { IPluginLoader, IPluginModule, PluginDefinition, PluginInstance } from "../types";
/**
 *   A base class to detect properly loaded plugins.
 */
export declare abstract class PluginLoader<TContext = any, TPluginModule extends IPluginModule<TContext> = IPluginModule<TContext>> implements IPluginLoader<TContext, TPluginModule> {
    readonly rootPath?: string | undefined;
    readonly tsconfig?: string | undefined;
    readonly autoInstall?: boolean | undefined;
    protected resolver: (request: string) => Promise<string>;
    constructor(rootPath?: string | undefined, tsconfig?: string | undefined, autoInstall?: boolean | undefined);
    abstract process: (context: TContext, instance: PluginInstance<TContext, TPluginModule>, options: Record<string, any>) => Promise<void>;
    load: (definition: PluginDefinition, options?: Record<string, any>) => Promise<PluginInstance<TContext, TPluginModule>>;
    isValid: (module: TPluginModule) => boolean;
    protected instantiate: (definition: PluginDefinition, module: TPluginModule, resolvedPath: string, options?: Record<string, any>) => PluginInstance<TContext, TPluginModule>;
    protected resolve: (definition: PluginDefinition, _?: Record<string, any>) => unknown;
}
