///
import EventEmitter from "events";
import { PluginMetadata } from "src/Types";
interface Plugin {
metadata: PluginMetadata;
initialize?(): Promise;
destroy?(): Promise;
}
export declare class PluginSystem extends EventEmitter {
private plugins;
private hooks;
private logger;
private errorHandler;
constructor();
registerPlugin(plugin: Plugin): Promise;
unregisterPlugin(pluginName: string): Promise;
getPlugin(pluginName: string): Plugin | undefined;
getAllPlugins(): Plugin[];
registerHook(hookName: string, callback: Function): void;
unregisterHook(hookName: string, callback: Function): void;
broadcastToPlugins(event: string, ...args: any[]): void;
executeHook(hookName: string, ...args: any[]): Promise;
initializeAllPlugins(): Promise;
destroyAllPlugins(): Promise;
isPluginRegistered(pluginName: string): boolean;
getPluginMetadata(pluginName: string): PluginMetadata | undefined;
getAllPluginMetadata(): PluginMetadata[];
reloadPlugin(pluginName: string): Promise;
getHooks(): string[];
clearHooks(): void;
}
export declare const pluginSystem: PluginSystem;
export declare function Plugin(metadata: PluginMetadata): {
metadata: PluginMetadata;
initialize?(): Promise;
destroy?(): Promise;
}>(constructor: T) => {
new (...args: any[]): {
metadata: PluginMetadata;
initialize(): Promise;
destroy(): Promise;
};
} & T;
export declare function createAndRegisterPlugin(PluginClass: new () => T): Promise;
export {};