import { UsableEnvironment } from '../environment';
import { CoordinatorEventKey, CoordinatorEventValues, CoordinatorTransformKey, CoordinatorTransformValues, FormatterPlugin, Plugin, PluginOperation } from './types';
export declare class PluginManager {
    private readonly environment;
    private readonly handlers;
    private readonly transformers;
    private cleanupFns;
    constructor(environment: UsableEnvironment);
    private registerHandler;
    private registerTransformer;
    initFormatter<OptionsType>(plugin: FormatterPlugin<OptionsType>, options: OptionsType, stream: NodeJS.WritableStream, write: (buffer: string | Uint8Array) => void, directory?: string, specifier?: string): Promise<void>;
    initCoordinatorExternal<OptionsType>(operation: PluginOperation, plugin: Plugin<OptionsType>, options: OptionsType, specifier?: string): Promise<void>;
    initCoordinatorInternal<OptionsType>(operation: PluginOperation, plugin: Plugin<OptionsType>, options: OptionsType): Promise<void>;
    private initCoordinator;
    private makeCoordinatorContext;
    emit<K extends CoordinatorEventKey>(event: K, value: CoordinatorEventValues[K]): void;
    transform<K extends CoordinatorTransformKey>(event: K, value: CoordinatorTransformValues[K]): Promise<CoordinatorTransformValues[K]>;
    cleanup(): Promise<void>;
}
