@skenora/plugins
v0.1.3
Published
Dependency-free lifecycle host for Skenora capability plugins.
Readme
@skenora/plugins
Dependency-free lifecycle host for Skenora capability plugins.
pnpm add @skenora/pluginsThe package owns only composition lifecycle. Domain-specific contributions use
their owning registries in @skenora/resources, @skenora/runtime, and
@skenora/flow.
import { PluginHost, type SkenoraPlugin } from "@skenora/plugins";
interface Host {
register(): () => void;
}
const plugin: SkenoraPlugin<Host> = {
id: "example.plugin",
setup(host, scope) {
scope.effect(host.register());
},
};
const runtime: Host = { register: () => () => undefined };
const host = new PluginHost<Host>(runtime);
const uninstall = host.install(plugin);
uninstall();
host.dispose();Plugins have normalized unique ids and may require plugins that are already installed in the same host. Setup effects are rolled back when setup fails; installed plugins are disposed in reverse installation order. A plugin with installed dependents cannot be removed first.
