glost-registry
v0.5.0
Published
Plugin registry with discovery, metadata, and validation for GLOST
Maintainers
Readme
glost-registry
Enhanced plugin registry with discovery, metadata, validation, and conflict detection for GLOST.
Overview
glost-registry provides a comprehensive plugin registry system for managing GLOST plugins with:
- Plugin discovery and search
- Metadata management
- Conflict detection
- Dependency resolution
- Validation
- Statistics
Installation
npm install glost-registry
# or
pnpm add glost-registryUsage
Registering Plugins
import { pluginRegistry } from "glost-registry";
import { myExtension } from "./my-plugin";
pluginRegistry.register(myExtension, {
version: "1.0.0",
description: "Adds transcription support for Thai",
category: "enhancer",
tags: ["transcription", "thai", "ipa"],
author: "Your Name",
repository: "https://github.com/yourusername/my-plugin",
supports: {
languages: ["th"],
async: true,
parallel: false
},
requires: {
plugins: ["frequency"],
glostVersion: ">=0.4.0"
}
});Searching for Plugins
// Search by keyword
const results = pluginRegistry.search({ keyword: "transcription" });
// Filter by category
const enhancers = pluginRegistry.search({ category: "enhancer" });
// Filter by language
const thaiPlugins = pluginRegistry.search({ language: "th" });
// Multiple filters
const results = pluginRegistry.search({
category: "enhancer",
language: "th",
tags: ["transcription"]
});Get Plugin Metadata
const metadata = pluginRegistry.getMetadata("my-plugin");
console.log(metadata.version);
console.log(metadata.category);
console.log(metadata.supports.languages);Check for Conflicts
const report = pluginRegistry.checkConflicts([
"plugin1",
"plugin2",
"plugin3"
]);
if (report.hasConflicts) {
for (const conflict of report.conflicts) {
console.error(`Conflict: ${conflict.plugin1} <-> ${conflict.plugin2}`);
console.error(`Reason: ${conflict.reason}`);
console.error(`Severity: ${conflict.severity}`);
}
}Resolve Dependencies
const orderedPlugins = pluginRegistry.resolveDependencies([
"plugin-c", // depends on plugin-a
"plugin-a",
"plugin-b" // depends on plugin-a
]);
// Returns: ["plugin-a", "plugin-c", "plugin-b"]Validate Plugins
const result = pluginRegistry.validate("my-plugin", {
scheme: "ipa",
target: "en"
});
if (!result.valid) {
console.error("Validation errors:", result.errors);
}
if (result.warnings.length > 0) {
console.warn("Validation warnings:", result.warnings);
}Get Registry Statistics
const stats = pluginRegistry.getStatistics();
console.log(`Total plugins: ${stats.total}`);
console.log(`By category:`, stats.byCategory);
console.log(`By language:`, stats.byLanguage);
console.log(`Top tags:`, stats.topTags);Advanced Usage
Plugin Discovery
import { PluginDiscovery, pluginRegistry } from "glost-registry";
// Find related plugins
const related = PluginDiscovery.findRelated(
pluginRegistry.list(),
"my-plugin"
);
// Suggest plugins based on current selection
const suggestions = PluginDiscovery.suggestPlugins(
currentPlugins,
pluginRegistry.list()
);Filtering and Sorting
import { PluginFilter, PluginSorter } from "glost-registry";
let plugins = pluginRegistry.list();
// Filter
plugins = PluginFilter.byLanguage(plugins, "th");
plugins = PluginFilter.asyncOnly(plugins);
// Sort
plugins = PluginSorter.byName(plugins);
plugins = PluginSorter.byCategory(plugins);
plugins = PluginSorter.byDate(plugins, false); // newest firstCustom Validation
import { PluginValidator } from "glost-registry";
const metadata = pluginRegistry.getMetadata("my-plugin");
// Validate metadata
const metaResult = PluginValidator.validateMetadata(metadata);
// Validate compatibility
const compResult = PluginValidator.validateCompatibility(
metadata,
"0.4.0", // GLOST version
"20.0.0" // Node.js version
);
// Validate dependencies
const depResult = PluginValidator.validateDependencies(
metadata,
new Set(["plugin-a", "plugin-b"])
);Plugin Metadata Schema
interface PluginMetadata {
// Required
id: string;
name: string;
version: string;
description: string;
category: "transformer" | "enhancer" | "generator" | "analyzer" | "utility";
tags: string[];
supports: {
languages?: string[];
nodeTypes?: string[];
async: boolean;
parallel?: boolean;
};
// Optional
author?: string;
repository?: string;
homepage?: string;
requires?: {
plugins?: string[];
glostVersion?: string;
nodeVersion?: string;
};
conflicts?: string[];
options?: PluginOptionsSchema;
examples?: PluginExample[];
}API
PluginRegistry
register(extension, metadata)- Register a plugingetMetadata(id)- Get plugin metadatagetExtension(id)- Get plugin extensionlist()- List all pluginssearch(query)- Search for pluginsgetByCategory(category)- Get plugins by categorygetLanguageSupport(language)- Get plugins supporting a languageisLanguageSupported(id, language)- Check language supportisCompatible(id, version)- Check version compatibilitycheckConflicts(ids)- Check for conflictsresolveDependencies(ids)- Resolve dependenciesvalidate(id, options)- Validate plugin configurationgetStatistics()- Get registry statisticshas(id)- Check if plugin existsunregister(id)- Unregister a pluginclear()- Clear all plugins
PluginFilter
byKeyword(plugins, keyword)- Filter by keywordbyCategory(plugins, category)- Filter by categorybyLanguage(plugins, language)- Filter by languagebyTags(plugins, tags)- Filter by tagsbyAuthor(plugins, author)- Filter by authorasyncOnly(plugins)- Filter async pluginsparallelOnly(plugins)- Filter parallel pluginsapply(plugins, query)- Apply multiple filters
PluginSorter
byName(plugins, ascending)- Sort by namebyDate(plugins, ascending)- Sort by datebyCategory(plugins)- Sort by category
PluginDiscovery
findRelated(plugins, id)- Find related pluginsfindDependents(plugins, extensions, id)- Find dependent pluginsfindMissingDependencies(plugins, extensions)- Find missing depssuggestPlugins(current, all)- Suggest plugins
PluginValidator
validateMetadata(metadata)- Validate metadatavalidateCompatibility(metadata, glost, node)- Validate compatibilityvalidateDependencies(metadata, available)- Validate dependencies
License
MIT
