src / providers / ProviderInstanceRegistry.ts
import { ISyncableProviderInstance } from "./ISyncableProviderInstance";
/**
* Single authoritative registry tracking all active provider instances across all search capabilities.
* Completely decoupled from SearchEngines, LM Studio SDK, and concrete provider implementations.
*/
export class ProviderInstanceRegistry {
private static instance: ProviderInstanceRegistry;
private providers: Map<string, ISyncableProviderInstance> = new Map();
/**
* Access global singleton instance.
*/
public static getInstance(): ProviderInstanceRegistry {
if (!ProviderInstanceRegistry.instance) {
ProviderInstanceRegistry.instance = new ProviderInstanceRegistry();
}
return ProviderInstanceRegistry.instance;
}
/**
* Register a syncable provider instance.
* Uses provider.configIdentity (e.g. 'web.exa', 'image.serpapi') as the unique key.
*/
public register(provider: ISyncableProviderInstance): void {
if (!provider || !provider.configIdentity) {
return;
}
const key = provider.configIdentity.toLowerCase().trim();
this.providers.set(key, provider);
}
/**
* Unregister a provider instance by its config identity string.
*/
public unregister(configIdentity: string): boolean {
const key = configIdentity.toLowerCase().trim();
return this.providers.delete(key);
}
/**
* Retrieve a registered provider instance by config identity string.
*/
public get(configIdentity: string): ISyncableProviderInstance | undefined {
const key = configIdentity.toLowerCase().trim();
return this.providers.get(key);
}
/**
* Return all currently registered provider instances.
*/
public getAll(): ISyncableProviderInstance[] {
return Array.from(this.providers.values());
}
/**
* Clear all registered provider instances.
*/
public clear(): void {
this.providers.clear();
}
}
export const defaultProviderInstanceRegistry = ProviderInstanceRegistry.getInstance();
src / providers / ProviderInstanceRegistry.ts
import { ISyncableProviderInstance } from "./ISyncableProviderInstance";
/**
* Single authoritative registry tracking all active provider instances across all search capabilities.
* Completely decoupled from SearchEngines, LM Studio SDK, and concrete provider implementations.
*/
export class ProviderInstanceRegistry {
private static instance: ProviderInstanceRegistry;
private providers: Map<string, ISyncableProviderInstance> = new Map();
/**
* Access global singleton instance.
*/
public static getInstance(): ProviderInstanceRegistry {
if (!ProviderInstanceRegistry.instance) {
ProviderInstanceRegistry.instance = new ProviderInstanceRegistry();
}
return ProviderInstanceRegistry.instance;
}
/**
* Register a syncable provider instance.
* Uses provider.configIdentity (e.g. 'web.exa', 'image.serpapi') as the unique key.
*/
public register(provider: ISyncableProviderInstance): void {
if (!provider || !provider.configIdentity) {
return;
}
const key = provider.configIdentity.toLowerCase().trim();
this.providers.set(key, provider);
}
/**
* Unregister a provider instance by its config identity string.
*/
public unregister(configIdentity: string): boolean {
const key = configIdentity.toLowerCase().trim();
return this.providers.delete(key);
}
/**
* Retrieve a registered provider instance by config identity string.
*/
public get(configIdentity: string): ISyncableProviderInstance | undefined {
const key = configIdentity.toLowerCase().trim();
return this.providers.get(key);
}
/**
* Return all currently registered provider instances.
*/
public getAll(): ISyncableProviderInstance[] {
return Array.from(this.providers.values());
}
/**
* Clear all registered provider instances.
*/
public clear(): void {
this.providers.clear();
}
}
export const defaultProviderInstanceRegistry = ProviderInstanceRegistry.getInstance();