@dbs-portal/core-module-registry
Version:
Core module registry system for automatic module discovery and registration
142 lines • 4.33 kB
TypeScript
/**
* 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<void>;
/**
* Register a module in the registry (with duplicate check)
*/
registerModule(metadata: ModuleMetadata, source?: 'package' | 'config' | 'runtime' | 'discovery'): Promise<void>;
/**
* Register a module safely (won't throw if already registered)
*/
registerModuleSafe(metadata: ModuleMetadata, source?: 'package' | 'config' | 'runtime' | 'discovery'): Promise<boolean>;
/**
* Unregister a module from the registry
*/
unregisterModule(moduleId: ModuleId): boolean;
/**
* Update a module's metadata
*/
updateModule(moduleId: ModuleId, updates: Partial<ModuleMetadata>): 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