@tensorify.io/sdk
Version:
TypeScript SDK for developing Tensorify plugins with comprehensive validation, frontend enforcement, and publishing tools
306 lines (277 loc) • 7.69 kB
text/typescript
/**
* Plugin definition and manifest types for the Tensorify SDK
* Combines all type definitions into the complete plugin structure
*/
import {
NodeType,
PluginCapability,
PluginRequirements,
PluginSettings,
PluginCodeGenerationContext,
} from "./core";
import { NodeVisualConfig, InputHandle, OutputHandle } from "./visual";
import { SettingsField, SettingsGroup } from "./settings";
// ========================================
// PLUGIN DEFINITION
// ========================================
/**
* Complete plugin definition interface
* This is what developers use to define their plugins
*/
export interface IPluginDefinition {
// Core Metadata (optional - will be derived from package.json if not provided)
/** Unique plugin identifier (derived from package name if not provided) */
id?: string;
/** Human-readable plugin name (derived from package name if not provided) */
name?: string;
/** Plugin description (derived from package.json if not provided) */
description?: string;
/** Plugin version (derived from package.json if not provided) */
version?: string;
/** Plugin category/type (derived from package.json tensorify.pluginType if not provided) */
nodeType?: NodeType;
// Visual Configuration
/** Visual appearance and behavior */
visual: NodeVisualConfig;
// Handle Definitions
/** Input handles configuration */
inputHandles: InputHandle[];
/** Output handles configuration */
outputHandles: OutputHandle[];
// Settings Configuration
/** Settings fields for the plugin */
settingsFields: SettingsField[];
/** Optional settings grouping */
settingsGroups?: SettingsGroup[];
// Capabilities & Requirements
/** Plugin capabilities */
capabilities: PluginCapability[];
/** Plugin requirements */
requirements: PluginRequirements;
// Optional Metadata
/** Plugin author information */
author?: string;
/** Plugin keywords for search */
keywords?: string[];
/** Plugin documentation URL */
documentationUrl?: string;
/** Plugin repository URL */
repositoryUrl?: string;
}
// ========================================
// FRONTEND MANIFEST
// ========================================
/**
* Package.json information required for manifest generation
*/
export interface PackageJsonInfo {
name: string;
version: string;
description?: string;
author?: string;
main?: string;
keywords?: string[];
dependencies?: Record<string, string>;
peerDependencies?: Record<string, string>;
repository?: {
type: string;
url: string;
};
tensorify?: {
pluginType?: string;
};
}
/**
* Frontend plugin manifest generated by the CLI
* This is what gets sent to the backend and used by the frontend
*/
export interface FrontendPluginManifest {
// Package Information (from package.json)
/** Package name from package.json */
name: string;
/** Version from package.json */
version: string;
/** Description from package.json */
description: string;
/** Author from package.json */
author: string;
/** Main entry file from package.json */
main: string;
/** Exact class name for instantiation */
entrypointClassName: string;
/** Keywords from package.json */
keywords: string[];
/** Repository information */
repository?: {
type: string;
url: string;
};
/** Plugin type from package.json tensorify section */
pluginType?: string;
/** Tensorify configuration from package.json */
tensorify?: {
pluginType?: string;
};
// Frontend Configuration (from plugin definition)
frontendConfigs: {
/** Plugin identifier */
id: string;
/** Plugin name */
name: string;
/** Plugin category */
category: string;
/** Node type */
nodeType: NodeType;
// Visual Configuration
/** Visual configuration */
visual: NodeVisualConfig;
// Handle Configuration
/** Input handles */
inputHandles: InputHandle[];
/** Output handles */
outputHandles: OutputHandle[];
// Settings Configuration
/** Settings fields */
settingsFields: SettingsField[];
/** Settings groups */
settingsGroups?: SettingsGroup[];
};
// Plugin Metadata
/** Plugin capabilities */
capabilities: PluginCapability[];
/** Plugin requirements */
requirements: PluginRequirements;
// Generation Metadata
/** SDK version used to generate this manifest */
sdkVersion: string;
/** Timestamp when manifest was generated */
generatedAt: string;
/** Manifest format version */
manifestVersion: string;
}
// ========================================
// VALIDATION RESULT TYPES
// ========================================
/**
* Plugin validation result
*/
export interface PluginValidationResult {
/** Whether the plugin is valid */
isValid: boolean;
/** Array of validation errors */
errors: PluginValidationError[];
/** Array of validation warnings */
warnings: PluginValidationWarning[];
}
/**
* Plugin validation error
*/
export interface PluginValidationError {
/** Error type */
type:
| "missing_property"
| "invalid_type"
| "invalid_value"
| "duplicate_id"
| "invalid_reference";
/** Error message */
message: string;
/** Property path where error occurred */
path?: string;
/** Expected value or type */
expected?: any;
/** Actual value */
actual?: any;
}
/**
* Plugin validation warning
*/
export interface PluginValidationWarning {
/** Warning type */
type: "deprecated" | "performance" | "best_practice" | "compatibility";
/** Warning message */
message: string;
/** Property path where warning occurred */
path?: string;
/** Suggested fix */
suggestion?: string;
}
// ========================================
// PLUGIN INSTANCE TYPES
// ========================================
/**
* Plugin validation and creation result
*/
export interface PluginCreationResult {
/** Whether creation was successful */
success: boolean;
/** Plugin instance if successful */
plugin?: any;
/** Validation result */
validation: PluginValidationResult;
/** Generated manifest if successful */
manifest?: FrontendPluginManifest;
}
/**
* Plugin build options
*/
export interface PluginBuildOptions {
/** Source directory */
sourceDir?: string;
/** Output directory */
outputDir?: string;
/** Package.json path */
packageJsonPath?: string;
/** Entrypoint class name */
entrypointClassName?: string;
/** Whether to minify output */
minify?: boolean;
/** Target environment */
target?: "node" | "browser";
}
// ========================================
// RUNTIME TYPES
// ========================================
/**
* Plugin execution context during runtime
*/
export interface PluginExecutionContext extends PluginCodeGenerationContext {
/** Plugin instance ID */
pluginInstanceId: string;
/** Plugin version */
pluginVersion: string;
/** Execution environment */
environment: "development" | "staging" | "production";
/** Debug mode flag */
debug: boolean;
}
/**
* Plugin execution result
*/
export interface PluginExecutionResult {
/** Whether execution was successful */
success: boolean;
/** Generated code */
code?: string;
/** Execution error if any */
error?: PluginExecutionError;
/** Execution metadata */
metadata: {
executionTime: number;
memoryUsage?: number;
warnings?: string[];
};
}
/**
* Plugin execution error
*/
export interface PluginExecutionError {
/** Error type */
type: "validation" | "generation" | "runtime" | "dependency";
/** Error message */
message: string;
/** Error stack trace */
stack?: string;
/** Error context */
context?: any;
}