/** * Module Registry * * Central registry for module discovery, validation, and management. * Implements singleton pattern for global access across the application. */ import type { ModuleMetadata, ModuleId, ValidationResult, ModuleCategory } from '../types/ModuleMetadata'; import { ModuleStatus } from '../types/ModuleMetadata'; export interface RegistryListener { onModuleRegistered?(module: ModuleMetadata): void; onModuleUnregistered?(module: ModuleMetadata): void; onModuleUpdated?(module: ModuleMetadata): void; onRegistryInitialized?(modules: ModuleMetadata[]): void; onRegistryError?(error: Error, moduleId?: string): void; } export interface RegistryOptions { enableCaching?: boolean; cacheTimeout?: number; validateOnRegister?: boolean; allowDuplicates?: boolean; autoInitialize?: boolean; } export declare class ModuleRegistry { private static instance; private modules; private registryListeners; private cache; private options; private initialized; private initializing; private eventEmitter; private constructor(); /** * Event emitter methods - delegate to internal event emitter */ on(event: string, listener: (...args: any[]) => void): this; once(event: string, listener: (...args: any[]) => void): this; off(event: string, listener: (...args: any[]) => void): this; emit(event: string, ...args: any[]): boolean; removeAllListeners(event?: string): this; listenerCount(event: string): number; listeners(event: string): ((...args: any[]) => void)[]; /** * Get singleton instance of ModuleRegistry */ static getInstance(options?: RegistryOptions): ModuleRegistry; /** * Reset singleton instance (mainly for testing) */ static resetInstance(): void; /** * Initialize the registry with module discovery */ initialize(): Promise; /** * Register a module in the registry (with duplicate check) */ registerModule(metadata: ModuleMetadata, source?: 'package' | 'config' | 'runtime' | 'discovery'): Promise; /** * Register a module safely (won't throw if already registered) */ registerModuleSafe(metadata: ModuleMetadata, source?: 'package' | 'config' | 'runtime' | 'discovery'): Promise; /** * Unregister a module from the registry */ unregisterModule(moduleId: ModuleId): boolean; /** * Update a module's metadata */ updateModule(moduleId: ModuleId, updates: Partial): boolean; /** * Get a specific module by ID */ getModule(moduleId: ModuleId): ModuleMetadata | undefined; /** * Get all registered modules */ getAllModules(): ModuleMetadata[]; /** * Get modules by category */ getModulesByCategory(category: ModuleCategory): ModuleMetadata[]; /** * Get modules by status */ getModulesByStatus(status: ModuleStatus): ModuleMetadata[]; /** * Get active modules only */ getActiveModules(): ModuleMetadata[]; /** * Get modules with specific permissions */ getModulesWithPermissions(permissions: string[]): ModuleMetadata[]; /** * Search modules by name, description, or tags */ searchModules(query: string): ModuleMetadata[]; /** * Check if a module is registered */ hasModule(moduleId: ModuleId): boolean; /** * Get module count */ getModuleCount(): number; /** * Validate module metadata */ validateModule(metadata: ModuleMetadata): ValidationResult; /** * Add registry listener */ addListener(listener: RegistryListener): void; /** * Remove registry listener */ removeListener(listener: RegistryListener): void; /** * Clear all modules (mainly for testing) */ clear(): void; /** * Get registry statistics */ getStats(): { totalModules: number; categories: { [k: string]: number; }; statuses: { [k: string]: number; }; initialized: boolean; cacheEnabled: boolean; }; /** * Notify all listeners of an event */ private notifyListeners; } //# sourceMappingURL=ModuleRegistry.d.ts.map