Plugin Types
TypeScript type definitions for Frame-Master plugin development.
FrameMasterPlugin
Main plugin type definition.
type FrameMasterPlugin<
Options extends PluginOptions = Required<PluginOptions>,
> = Required<{
name: string; // Unique plugin name
version: string; // Semver version
}> &
Partial<{
router: RouterPlugin; // Request handling hooks
serverStart: ServerStart; // Server startup hooks
priority: number; // Execution order (0 = highest)
requirement: Requirement; // Dependencies & version requirements
runtimePlugins: Bun.BunPlugin[]; // Bun plugins for runtime
directives: Directive[]; // File directives
serverConfig: ServerConfig; // Server configuration overrides
fileSystemWatchDir: string[]; // Directories to watch (dev only)
onFileSystemChange: FileChangeCallback; // File change handler
websocket: WebSocketHandlers; // WebSocket event handlers
build: BuildOptionsPlugin; // Build hooks
cli: CLIExtension; // CLI commands
}>;Router Plugin
Request lifecycle hooks.
type RouterPlugin = Partial<{
// Before request processing
before_request: (master: masterRequest) => void | Promise<void>;
// Main request handler
request: (master: masterRequest) => void | Promise<void>;
// After request processing
after_request: (
master: masterRequest,
) => void | Response | Promise<void | Response>;
// HTML transformation
html_rewrite: {
initContext?: (req: masterRequest) => unknown;
rewrite?: (
reWriter: HTMLRewriter,
master: masterRequest,
context: unknown,
) => void | Promise<void>;
after?: (
HTML: string,
master: masterRequest,
context: unknown,
) => void | Promise<void>;
};
}>;ServerStart
Server startup hooks.
type ServerStart = Partial<{
/**
* Executed on the main thread when server starts
*/
main: () => Promise<unknown> | unknown;
/**
* Executed only in development mode on main thread
* ONLY DEV MODE
*/
dev_main: () => Promise<unknown> | unknown;
}>;BuildOptionsPlugin
Build lifecycle hooks.
type BuildOptionsPlugin = {
/**
* Build configuration - static object or dynamic function
*/
buildConfig?:
| Partial<Bun.BuildConfig>
| ((
builder: Builder,
) => Partial<Bun.BuildConfig> | Promise<Partial<Bun.BuildConfig>>);
/**
* Called before Bun.build() - setup, validation
*/
beforeBuild?: (
buildConfig: Bun.BuildConfig,
builder: Builder,
) => void | Promise<void>;
/**
* Called after Bun.build() - post-processing
*/
afterBuild?: (
buildConfig: Bun.BuildConfig,
result: Bun.BuildOutput,
builder: Builder,
) => void | Promise<void>;
/**
* Enable build logging
*/
enableLoging?: boolean;
};Requirement
Plugin dependency requirements.
type Requirement = Partial<{
/**
* Required Frame-Master plugins with versions
* @example { "frame-master-auth": "^1.0.0" }
*/
frameMasterPlugins: Record<string, string>;
/**
* Required Frame-Master version
* @example "^2.0.0"
*/
frameMasterVersion: string;
/**
* Required Bun runtime version
* @example ">=1.0.0 <2.0.0"
*/
bunVersion: string;
}>;WebSocket Handlers
WebSocket event handlers.
type WebSocketHandlers = Partial<{
onOpen: (ws: Bun.ServerWebSocket<undefined>) => Promise<void> | void;
onMessage: (
ws: Bun.ServerWebSocket<undefined>,
message: string | ArrayBufferView,
) => Promise<void> | void;
onClose: (ws: Bun.ServerWebSocket<undefined>) => Promise<void> | void;
}>;FileChangeCallback
File system change handler.
type WatchEventType = "change" | "rename";
type FileChangeCallback = (
eventType: WatchEventType,
filePath: string,
absolutePath: string,
) => void | Promise<void>;CLI Extension
Commander.js CLI extension.
import type { Command } from "commander";
type CLIExtension = (command: Command) => Command;CLI extensions are available under
frame-master extended-cli <command>.
Next Steps
- Request Manager — Request handling API
- Plugin Hooks — Hooks reference
- Creating Plugins — Plugin development
