burgee
API reference

burgee/plugin

Every export of burgee/plugin, with its signature and doc comment: validate, definePlugin, CONTRACT, PluginError, plus 2 types.

import { validate, definePlugin, CONTRACT, … } from 'burgee/plugin';

Functions

definePlugin

Declare a plugin: typed, validated, and stamped with the contract it was compiled against.

The stamp is the half that makes the refusal in checkContract fair. An author who builds against this burgee gets contract: 1 without typing it, so the only objects that reach use() without one are objects built against a burgee that checked nothing — which is exactly the population the version message is addressed to.

function definePlugin(plugin: Plugin): Plugin;
ParameterType
pluginPlugin

Returns Plugin

validate

Refuse a plugin that cannot contribute, at the door.

taken is the command paths the manifest already serves. A contributed path that is already declared is refused rather than merged, because the two projections disagree about which node wins: find() answers the first on a path and resolve() the last, so the same command reads one way to help and the other way to dispatch. Which of the two is right for a first-party duplicate is a decision about every program rather than about plugins, and is left alone here.

function validate(plugin: unknown, taken?: readonly string[]): asserts plugin is Plugin;
ParameterType
pluginunknown
taken (optional)readonly string[]

Returns asserts plugin is Plugin

Classes

PluginError

A refused plugin says what is wrong and what to do about it — the family's one vocabulary.

class PluginError extends Error {
    readonly code: PluginErrorCode;
    readonly fix: string;
    constructor(code: PluginErrorCode, message: string, fix: string);
}

Constants

CONTRACT

The plugin contract version. One number for the family — the same 1 flagstaff, caique and closeout declare, written out rather than imported because a layer never imports a layer.

const CONTRACT = 1;

Interfaces

Plugin

The keys burgee reads. Declared structurally: any object with these fields is a plugin here, whatever else it carries.

interface Plugin {
    name: string;
    contract?: number;
    commands?: CommandNode[];
    hooks?: Partial<Record<HookStage, Hook>>;
    enforce?: 'pre' | 'post';
}

Types

PluginErrorCode

type PluginErrorCode = 'E_PLUGIN_SCHEMA' | 'E_PLUGIN_CONTRACT' | 'E_NO_CONTRIBUTION';

On this page