convokit
Version:
A flexible TypeScript framework for ingesting, processing, and exporting chat/conversation data for LLM training and analysis.
96 lines • 3.23 kB
JavaScript
import { ConvoKitLogging as ckl } from '../index.js';
/**
* Registry for all available plugins (formatters, converters, filters).
*/
export class PluginRegistry {
static formatters = new Map();
static converters = new Map();
static filters = new Map();
// Store info separately for quick lookup
static pluginInfos = new Map();
/**
* Registers a formatter plugin class. Uses PluginInfo.id as key.
*/
static registerFormatter(pluginCtor) {
// Instantiate plugin to read its PluginInfo instance field
const instance = new pluginCtor();
const info = instance.PluginInfo;
if (this.formatters.has(info.id)) {
throw new Error(`Formatter plugin with id "${info.id}" already registered.`);
}
this.formatters.set(info.id, pluginCtor);
this.pluginInfos.set(info.id, info); // Store info
ckl.info('PluginRegistry', `Registered formatter plugin: ${info.id}`);
}
/**
* Retrieves a registered formatter plugin constructor by ID.
*/
static getFormatter(id) {
return this.formatters.get(id);
}
/**
* Lists all registered formatter plugin IDs.
*/
static listFormatters() {
return Array.from(this.formatters.keys());
}
/**
* Registers a converter plugin class.
*/
static registerConverter(pluginCtor) {
const instance = new pluginCtor();
const info = instance.PluginInfo;
if (this.converters.has(info.id)) {
throw new Error(`Converter plugin with id "${info.id}" already registered.`);
}
this.converters.set(info.id, pluginCtor);
this.pluginInfos.set(info.id, info); // Store info
ckl.info('PluginRegistry', `Registered converter plugin: ${info.id}`);
}
/**
* Retrieves a registered converter plugin constructor by ID.
*/
static getConverter(id) {
return this.converters.get(id);
}
/**
* Lists all registered converter plugin IDs.
*/
static listConverters() {
return Array.from(this.converters.keys());
}
/**
* Registers a filter plugin class.
*/
static registerFilter(pluginCtor) {
const instance = new pluginCtor();
const info = instance.PluginInfo;
if (this.filters.has(info.id)) {
throw new Error(`Filter plugin with id "${info.id}" already registered.`);
}
this.filters.set(info.id, pluginCtor);
this.pluginInfos.set(info.id, info); // Store info
ckl.info('PluginRegistry', `Registered filter plugin: ${info.id}`);
}
/**
* Retrieves a registered filter plugin constructor by ID.
*/
static getFilter(id) {
return this.filters.get(id);
}
/**
* Lists all registered filter plugin IDs.
*/
static listFilters() {
return Array.from(this.filters.keys());
}
/**
* Retrieves the PluginInfo for a registered plugin by ID.
* @param id The ID of the plugin.
* @returns The PluginInfo object if found, otherwise undefined.
*/
static getPluginInfo(id) {
return this.pluginInfos.get(id);
}
}
//# sourceMappingURL=PluginRegistry.js.map