@juspay/neurolink
Version:
Universal AI Development Platform with working MCP integration, multi-provider support, voice (TTS/STT/realtime), and professional CLI. 58+ external MCP servers discoverable, multimodal file processing, RAG pipelines. Build, test, and deploy AI applicatio
55 lines (54 loc) • 1.65 kB
JavaScript
import { logger } from "../../utils/logger.js";
export class BaseFactory {
items = new Map();
aliasMap = new Map();
initialized = false;
initPromise = null;
async ensureInitialized() {
if (this.initialized) {
return;
}
if (this.initPromise) {
return this.initPromise;
}
this.initPromise = this.registerAll();
await this.initPromise;
this.initialized = true;
}
register(name, factory, aliases = [], metadata) {
this.items.set(name, { factory, aliases, metadata });
for (const alias of aliases) {
this.aliasMap.set(alias.toLowerCase(), name);
}
logger.debug(`Registered ${name} with aliases: ${aliases.join(", ")}`);
}
async create(nameOrAlias, config) {
await this.ensureInitialized();
const name = this.resolveName(nameOrAlias);
const registration = this.items.get(name);
if (!registration) {
throw new Error(`Unknown item: ${nameOrAlias}`);
}
return registration.factory(config);
}
resolveName(nameOrAlias) {
const lower = nameOrAlias.toLowerCase();
return this.aliasMap.get(lower) || nameOrAlias;
}
has(nameOrAlias) {
const name = this.resolveName(nameOrAlias);
return this.items.has(name);
}
getAvailable() {
return Array.from(this.items.keys());
}
getAliases() {
return new Map(this.aliasMap);
}
clear() {
this.items.clear();
this.aliasMap.clear();
this.initialized = false;
this.initPromise = null;
}
}