Class: PluginLoader
Defined in: src/plugins/core/plugin-loader.ts:153
Plugin loader implementation.
Remarks
Scans directories for plugin manifests, validates them with AJV, and loads plugin code from entry points.
Example
const loader = container.resolve(PluginLoader);
// Scan directory for plugins
const manifests = await loader.scanDirectory('/path/to/plugins');
// Validate a manifest
const result = loader.validateManifest(rawManifest);
if (result.ok) {
console.log('Valid manifest:', result.value.id);
}
// Load plugin code
const plugin = await loader.loadPluginCode(manifest);
Implements
Constructors
new PluginLoader()
new PluginLoader(
logger):PluginLoader
Defined in: src/plugins/core/plugin-loader.ts:174
Creates a new PluginLoader.
Parameters
logger
Logger instance
Returns
Methods
loadPluginCode()
loadPluginCode(
manifest):Promise<IChivePlugin>
Defined in: src/plugins/core/plugin-loader.ts:401
Loads plugin code from manifest entry point.
Parameters
manifest
Plugin manifest
Returns
Promise<IChivePlugin>
Plugin instance
Throws
If code loading fails
Remarks
For builtin plugins, use direct imports instead of this method. This method is intended for third-party plugins loaded from filesystem.
Example
const plugin = await loader.loadPluginCode(manifest);
console.log('Loaded:', plugin.id);
Implementation of
scanDirectory()
scanDirectory(
path):Promise<readonlyIPluginManifest[]>
Defined in: src/plugins/core/plugin-loader.ts:254
Scans a directory for plugin manifests.
Parameters
path
string
Directory path to scan
Returns
Promise<readonly IPluginManifest[]>
Array of valid plugin manifests found
Remarks
Scans each subdirectory for a plugin.json file, validates it, and returns all valid manifests.
Example
const manifests = await loader.scanDirectory('/opt/chive/plugins');
console.log(`Found ${manifests.length} plugins`);
Implementation of
validateManifest()
validateManifest(
manifest):Promise<ManifestValidationResult>
Defined in: src/plugins/core/plugin-loader.ts:355
Validates a plugin manifest against the schema.
Parameters
manifest
unknown
Raw manifest data to validate
Returns
Promise<ManifestValidationResult>
Result with validated manifest or validation error
Example
const result = await loader.validateManifest({
id: 'pub.chive.plugin.github',
name: 'GitHub Integration',
version: '0.1.0',
// ...
});
if (result.ok) {
console.log('Valid:', result.value.id);
} else {
console.error('Errors:', result.error.validationErrors);
}