UNPKG

meld

Version:

Meld: A template language for LLM prompts

123 lines (109 loc) 3.92 kB
import { DirectiveNode } from 'meld-spec'; import { IStateService } from '@services/state/StateService/IStateService.js'; import type { IValidationService } from '@services/resolution/ValidationService/IValidationService.js'; import type { IPathService } from '@services/fs/PathService/IPathService.js'; import type { IFileSystemService } from '@services/fs/FileSystemService/IFileSystemService.js'; import type { IParserService } from '@services/pipeline/ParserService/IParserService.js'; import type { IInterpreterService } from '@services/pipeline/InterpreterService/IInterpreterService.js'; import type { ICircularityService } from '@services/resolution/CircularityService/ICircularityService.js'; import type { IResolutionService } from '@services/resolution/ResolutionService/IResolutionService.js'; import type { DirectiveResult } from './types.js'; /** * Context for directive execution */ export interface DirectiveContext { /** Current file being processed */ currentFilePath?: string; /** Parent state for nested contexts */ parentState?: IStateService; /** Current state for this directive */ state: IStateService; /** Working directory for command execution */ workingDirectory?: string; } /** * Interface for directive handlers */ export interface IDirectiveHandler { /** The directive kind this handler processes */ readonly kind: string; /** * Execute the directive * @returns The updated state after directive execution, or a DirectiveResult containing both state and optional replacement node */ execute( node: DirectiveNode, context: DirectiveContext ): Promise<DirectiveResult | IStateService>; } /** * Service responsible for handling directives */ export interface IDirectiveService { /** * Initialize the DirectiveService with required dependencies */ initialize( validationService: IValidationService, stateService: IStateService, pathService: IPathService, fileSystemService: IFileSystemService, parserService: IParserService, interpreterService: IInterpreterService, circularityService: ICircularityService, resolutionService: IResolutionService ): void; /** * Update the interpreter service reference * This is needed to handle circular dependencies in initialization */ updateInterpreterService(interpreterService: IInterpreterService): void; /** * Handle a directive node * @returns The updated state after directive execution */ handleDirective( node: DirectiveNode, context: DirectiveContext ): Promise<IStateService>; /** * Register a new directive handler */ registerHandler(handler: IDirectiveHandler): void; /** * Check if a handler exists for a directive kind */ hasHandler(kind: string): boolean; /** * Validate a directive node */ validateDirective(node: DirectiveNode): Promise<void>; /** * Create a child context for nested directives */ createChildContext( parentContext: DirectiveContext, filePath: string ): DirectiveContext; /** * Process a directive node, validating and executing it * Values in the directive will already be interpolated by meld-ast * @returns The updated state after directive execution * @throws {MeldDirectiveError} If directive processing fails */ processDirective(node: DirectiveNode, parentContext?: DirectiveContext): Promise<IStateService>; /** * Process multiple directive nodes in sequence * @returns The final state after processing all directives * @throws {MeldDirectiveError} If any directive processing fails */ processDirectives(nodes: DirectiveNode[], parentContext?: DirectiveContext): Promise<IStateService>; /** * Check if a directive kind is supported */ supportsDirective(kind: string): boolean; /** * Get a list of all supported directive kinds */ getSupportedDirectives(): string[]; }