@synet/signal
Version:
Experimental Fractal Architecture pattern for Synet development
43 lines (42 loc) • 1.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SignalPluginRegistry = void 0;
/**
* Type-safe plugin registry for Signal system
*/
class SignalPluginRegistry {
constructor() {
this.plugins = new Map();
// Private constructor for singleton pattern
}
static getInstance() {
if (!SignalPluginRegistry.instance) {
SignalPluginRegistry.instance = new SignalPluginRegistry();
}
return SignalPluginRegistry.instance;
}
register(plugin) {
if (this.plugins.has(plugin.id)) {
console.warn(`Plugin '${plugin.id}' is already registered. Skipping registration.`);
return;
}
if (plugin.init) {
plugin.init();
}
this.plugins.set(plugin.id, plugin);
}
unregister(pluginId) {
const plugin = this.plugins.get(pluginId);
if (plugin?.cleanup) {
plugin.cleanup();
}
this.plugins.delete(pluginId);
}
getPlugin(pluginId) {
return this.plugins.get(pluginId);
}
hasPlugin(pluginId) {
return this.plugins.has(pluginId);
}
}
exports.SignalPluginRegistry = SignalPluginRegistry;