Skip to content

Plugins

Plugin system for extending BlaC

← Back to @blac/core

Quick Reference

Class: PluginManager

Interfaces: BlacPlugin, BlacPluginWithInit, PluginConfig, PluginContext

Functions: createPluginManager, getPluginManager, hasInitHook

Classes

PluginManager

Manages plugin lifecycle for the BlaC state management system. Plugins receive notifications about state container lifecycle events.

typescript
export declare class PluginManager

Constructor:

typescript
constructor(registry: StateContainerRegistry);
ParameterTypeDescription
registryStateContainerRegistryThe StateContainerRegistry to monitor for lifecycle events

Methods:

clear

Uninstall all plugins

typescript
clear(): void;

getAllPlugins

Get all installed plugins

typescript
getAllPlugins(): BlacPlugin[];

Returns: Array of all installed plugins

getPlugin

Get an installed plugin by name

typescript
getPlugin(pluginName: string): BlacPlugin | undefined;
ParameterTypeDescription
pluginNamestringThe name of the plugin to retrieve

Returns: The plugin instance or undefined if not found

hasPlugin

Check if a plugin is installed

typescript
hasPlugin(pluginName: string): boolean;
ParameterTypeDescription
pluginNamestringThe name of the plugin to check

Returns: true if the plugin is installed

install

Install a plugin with optional configuration

typescript
install(plugin: BlacPlugin, config?: PluginConfig): void;
ParameterTypeDescription
pluginBlacPluginThe plugin to install
configPluginConfigOptional plugin configuration

uninstall

Uninstall a plugin by name

typescript
uninstall(pluginName: string): void;
ParameterTypeDescription
pluginNamestringThe name of the plugin to uninstall

Examples:

ts
const manager = createPluginManager(registry);
manager.install(myPlugin, { environment: 'development' });

Interfaces

BlacPlugin

Interface for plugins that extend BlaC functionality

typescript
export interface BlacPlugin
PropertyTypeDescription
namestringUnique plugin identifier
versionstringPlugin version identifier

Methods:

onEventAdded

Called when an event is added to a Vertex instance

typescript
onEventAdded?<E extends DiscriminatedEvent>(vertex: Vertex<any, E>, event: EventWithMetadata<E>, context: PluginContext): void;

onInstall

Called when the plugin is installed (optional)

typescript
onInstall?(context: PluginContext): void;

onInstanceCreated

Called when a state container instance is created

typescript
onInstanceCreated?(instance: StateContainer<any>, context: PluginContext): void;

onInstanceDisposed

Called when a state container instance is disposed

typescript
onInstanceDisposed?(instance: StateContainer<any>, context: PluginContext): void;

onStateChanged

Called when state changes in a container instance

typescript
onStateChanged?<S extends object = any>(instance: StateContainer<S>, previousState: S, currentState: S, callstack: string | undefined, context: PluginContext): void;

onUninstall

Called when the plugin is uninstalled

typescript
onUninstall?(): void;

BlacPluginWithInit

Plugin interface variant that requires mandatory onInstall hook

typescript
export interface BlacPluginWithInit extends BlacPlugin

Methods:

onInstall

Required initialization hook called when plugin is installed

typescript
onInstall(context: PluginContext): void;

PluginConfig

Configuration options for plugin installation

typescript
export interface PluginConfig
PropertyTypeDescription
enabled (optional)booleanEnable or disable the plugin
environment (optional)'development' | 'production' | 'test' | 'all'Environments where plugin runs

PluginContext

Safe context API provided to plugins for accessing registry data

typescript
export interface PluginContext

Methods:

getAllTypes

Get all registered state container types

typescript
getAllTypes(): Array<new (...args: any[]) => StateContainer<any>>;

getInstanceMetadata

Get metadata for a specific instance

typescript
getInstanceMetadata(instance: StateContainer<any>): InstanceMetadata;

getState

Get current state from a container

typescript
getState<S extends object = any>(instance: StateContainer<S>): S;

getStats

Get registry statistics

typescript
getStats(): {
        registeredTypes: number;
        totalInstances: number;
        typeBreakdown: Record<string, number>;
    };

queryInstances

Get all instances of a specific type

typescript
queryInstances<T extends StateContainer<any>>(typeClass: new (...args: any[]) => T): T[];

Functions

createPluginManager

Create a plugin manager instance

typescript
export declare function createPluginManager(registry: StateContainerRegistry): PluginManager;
ParameterTypeDescription
registryStateContainerRegistryThe StateContainerRegistry to monitor for lifecycle events

Returns: A new PluginManager instance


getPluginManager

Get the global plugin manager

typescript
export declare function getPluginManager(): any;

hasInitHook

Type guard to check if a plugin has a required onInstall hook

typescript
export declare function hasInitHook(plugin: BlacPlugin): plugin is BlacPluginWithInit;
ParameterTypeDescription
pluginBlacPluginThe plugin to check

Returns: true if the plugin implements BlacPluginWithInit


Released under the MIT License.