mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-25 22:34:56 +00:00
- Python: class extending NodeExecutor + factory.py (80+ plugins) - TypeScript: class implements NodeExecutor + factory.ts (7 groups, 116 classes) - Go: struct with methods + factory.go (36 plugins) - Rust: struct impl NodeExecutor trait + factory.rs (54 plugins) - Mojo: struct + factory.mojo (11 plugins) All package.json files now include: - files array listing source files - metadata.class/struct field - metadata.entrypoint field This enables a unified plugin loading system across all languages with no import side effects (Spring-style DI pattern). Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
80 lines
2.0 KiB
TypeScript
80 lines
2.0 KiB
TypeScript
/**
|
|
* Base types and interfaces for TypeScript workflow plugins.
|
|
* @packageDocumentation
|
|
*/
|
|
|
|
/**
|
|
* Input data passed to plugin execute methods.
|
|
*/
|
|
export interface ExecuteInputs {
|
|
/** The workflow node being executed */
|
|
node: {
|
|
id: string;
|
|
name: string;
|
|
type: string;
|
|
nodeType: string;
|
|
parameters: Record<string, any>;
|
|
};
|
|
/** Workflow execution context */
|
|
context: {
|
|
executionId: string;
|
|
tenantId: string;
|
|
userId: string;
|
|
triggerData: Record<string, any>;
|
|
variables: Record<string, any>;
|
|
};
|
|
/** Current execution state with results from previous nodes */
|
|
state: Record<string, any>;
|
|
}
|
|
|
|
/**
|
|
* Result returned from plugin execute methods.
|
|
*/
|
|
export interface ExecuteResult {
|
|
/** Primary result value */
|
|
result?: any;
|
|
/** Additional output data */
|
|
[key: string]: any;
|
|
}
|
|
|
|
/**
|
|
* Interface that all node executor plugins must implement.
|
|
*/
|
|
export interface NodeExecutor {
|
|
/** Unique node type identifier (e.g., 'string.concat', 'math.add') */
|
|
readonly nodeType: string;
|
|
/** Category for grouping (e.g., 'string', 'math', 'logic') */
|
|
readonly category: string;
|
|
/** Human-readable description of what this node does */
|
|
readonly description: string;
|
|
|
|
/**
|
|
* Execute the plugin logic.
|
|
* @param inputs - Input data including node, context, and state
|
|
* @param runtime - Optional runtime services (logging, etc.)
|
|
* @returns The execution result
|
|
*/
|
|
execute(inputs: ExecuteInputs, runtime?: any): ExecuteResult;
|
|
}
|
|
|
|
/**
|
|
* Helper to create a context object for template interpolation.
|
|
*/
|
|
export function createTemplateContext(inputs: ExecuteInputs): Record<string, any> {
|
|
return {
|
|
context: inputs.context,
|
|
state: inputs.state,
|
|
json: inputs.context.triggerData,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Helper to resolve template values.
|
|
*/
|
|
export function resolveValue(value: any, ctx: Record<string, any>, interpolate: (template: string, ctx: any) => any): any {
|
|
if (typeof value === 'string' && value.startsWith('{{') && value.endsWith('}}')) {
|
|
return interpolate(value, ctx);
|
|
}
|
|
return value;
|
|
}
|