Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

weedz/plugin-loader

Repository files navigation

plugin-loader

npm

Usage

Define a base class and api for plugins:

// Plugin.ts
import { PluginBase } from "@weedzcokie/plugin-loader";
// this could be anything.
export type PluginApi = {
 x: number
 y: number
}
export default abstract class Plugin extends PluginBase<PluginApi> {
 x: number;
 y: number;
 
 init?(): void;
 constructor(api: PluginApi) {
 super(api);
 // `api` is also available from `this.api`.
 this.x = api.x;
 this.y = api.y;
 }
}

Plugin manifest (plugin.json)

{
 "name": "test-plugin",
 "version": "1.0.0"
}

version must be a semver compatible version string.

And with dependencies, similar to how package.json defines dependencies:

{
 "name": "plugin-2",
 "version": "1.0.0",
 "dependencies": {
 "test-plugin": "^1.0.0"
 }
}

Load plugins:

Assuming the following directory tree:

├─ plugins
│ ├─ test-plugin
│ │ ├── index.ts
│ │ └── plugin.json
│ └─ plugin-2
│ ├── index.ts
│ └── plugin.json
├─ index.ts
└─ Plugin.ts
// index.ts
import Loader, { NodeHandler } from "@weedzcokie/plugin-loader";
import Plugin, { PluginApi } from "./Plugin.ts":
const plugins = await Loader<Plugin, PluginApi>(["test-plugin"], {
 api: {
 x: 1,
 y: 2,
 },
 // Path to where plugins are located
 path: path.resolve('./plugins'),
 log: (msg: string) => console.log('[PluginLoader]', msg),
 handlers: {
 default: NodeHandler
 }
});

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

AltStyle によって変換されたページ (->オリジナル) /