Files
Toju/toju-app/src/app/domains/plugins/domain/models/plugin-runtime.models.ts
2026-04-29 01:14:14 +02:00

82 lines
1.8 KiB
TypeScript

import type { TojuPluginManifest } from '../../../../shared-kernel';
export type PluginRuntimeState =
| 'discovered'
| 'validated'
| 'blocked'
| 'loading'
| 'ready'
| 'loaded'
| 'failed'
| 'unloading'
| 'unloaded'
| 'disabled';
export type PluginValidationSeverity = 'error' | 'warning';
export interface PluginValidationIssue {
message: string;
path: string;
severity: PluginValidationSeverity;
}
export interface PluginManifestValidationResult {
issues: PluginValidationIssue[];
manifest?: TojuPluginManifest;
valid: boolean;
}
export interface RegisteredPlugin {
enabled: boolean;
error?: string;
loadIndex?: number;
manifest: TojuPluginManifest;
sourcePath?: string;
state: PluginRuntimeState;
validationIssues: PluginValidationIssue[];
}
export interface PluginLoadCandidate {
enabled?: boolean;
manifest: TojuPluginManifest;
}
export interface PluginLoadBlocker {
message: string;
pluginId: string;
reason: 'conflict' | 'cycle' | 'disabled' | 'duplicate' | 'missingDependency' | 'validation';
}
export interface PluginLoadOrderResult {
blocked: PluginLoadBlocker[];
ordered: TojuPluginManifest[];
}
export interface LocalPluginManifestDescriptor {
discoveredAt: number;
entrypointPath?: string;
pluginRootUrl?: string;
manifest: unknown;
manifestPath: string;
pluginRoot: string;
readmePath?: string;
}
export interface LocalPluginDiscoveryError {
manifestPath?: string;
message: string;
pluginRoot?: string;
}
export interface LocalPluginDiscoveryResult {
errors: LocalPluginDiscoveryError[];
plugins: LocalPluginManifestDescriptor[];
pluginsPath: string;
}
export interface LocalPluginRegistrationResult {
discovery: LocalPluginDiscoveryResult;
errors: LocalPluginDiscoveryError[];
registered: RegisteredPlugin[];
}