/// 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 {};