Skip to content

Plugins

A plugin is a function that can accept a Clerc instance and extend it.

INFO

The plugin system allows you to add rich functionality according to your needs.

Usage

ts
import { 
definePlugin
} from "clerc";
const
plugin
=
definePlugin
({
setup
: (
cli
) =>
cli
.command("foo", "A foo command").on("foo", (
ctx
) => {
console
.
log
("It works!");
}), }); const
cli
=
Cli
()
.scriptName("foo-cli") .description("A simple CLI") .version("1.0.0") .use(
plugin
)
.parse();

Development

In the setup function, you can directly get the Clerc instance and perform various configurations and extensions on it, such as adding commands, event listeners, etc.

ts
import { 
definePlugin
} from "clerc";
export const
myPlugin
=
definePlugin
({
setup
: (
cli
) => {
// Extend the cli here return
cli
.command("bar", "A bar command").on("bar", (
ctx
) => {
console
.
log
("Bar command executed!");
}); }, });

Extending Custom Option Types

If your plugin needs to add custom types for commands or options, you can use the following method:

ts
declare module "@clerc/core" {
  // For adding custom types to commands
  export interface CommandCustomOptions {
    
foo
: string;
} // For adding custom types to options export interface FlagCustomOptions {
foo
: string;
} }

Publishing Plugins

While not mandatory, it is recommended that you follow the following conventions when publishing plugins to make it easier for users to identify and use your plugins:

  • Use clerc-plugin-<name> as the package name.
  • Add the keyword clerc-plugin in package.json.

Released under the MIT license