import { PolyEngine } from '../../../Poly';
import { PolyPluginData, PolyPluginInterface } from './Plugin';
import { BaseNodeConstructor, BaseOperationConstructor } from '../nodes/NodesRegister';
import { PolyDictionary } from '../../../../types/GlobalTypes';
export interface PluginsRegisterData {
    plugins: PolyDictionary<PolyPluginData>;
    nodes: PolyDictionary<PolyDictionary<string>>;
    operations: PolyDictionary<PolyDictionary<string>>;
}
export type WrapConfigurePolygonjsCallback = () => void | Promise<void>;
export declare class PluginsRegister {
    private poly;
    private _configurePolygonjsPlugin;
    private _currentPlugin;
    private _pluginsByName;
    private _pluginNameByNodeContextByType;
    private _pluginNameByOperationContextByType;
    constructor(poly: PolyEngine);
    wrapConfigurePolygonjs(callback: WrapConfigurePolygonjsCallback): Promise<void>;
    register(plugin: PolyPluginInterface): void;
    pluginByName(pluginName: string): PolyPluginInterface | undefined;
    registerNode(node: BaseNodeConstructor): void;
    registerOperation(operation: BaseOperationConstructor): void;
    toJson(): PluginsRegisterData;
}
