UNPKG

meld

Version:

Meld: A template language for LLM prompts

96 lines (84 loc) 2.46 kB
import type { MeldNode } from 'meld-spec'; import type { IStateService } from '@services/state/StateService/IStateService.js'; import type { IDirectiveService } from '@services/pipeline/DirectiveService/IDirectiveService.js'; import type { MeldError } from '@core/errors/MeldError.js'; export interface ErrorHandler { (error: MeldError): void; } export interface InterpreterOptions { /** * Initial state to use for interpretation * If not provided, a new state will be created */ initialState?: IStateService; /** * Current file path for error reporting */ filePath?: string; /** * Whether to merge the final state back to the parent * @default true */ mergeState?: boolean; /** * List of variables to import * If undefined, all variables are imported * If empty array, no variables are imported */ importFilter?: string[]; /** * Whether to run in strict mode * In strict mode, all errors throw * In permissive mode, recoverable errors become warnings * @default true */ strict?: boolean; /** * Custom error handler * If provided, will be called for all errors * In permissive mode, recoverable errors will be passed to this handler instead of throwing */ errorHandler?: ErrorHandler; } export interface IInterpreterService { /** * Check if this service can handle transformations * @returns true if transformations are supported */ canHandleTransformations(): boolean; /** * Initialize the InterpreterService with required dependencies */ initialize( directiveService: IDirectiveService, stateService: IStateService ): void; /** * Interpret a sequence of Meld nodes * @returns The final state after interpretation * @throws {MeldInterpreterError} If interpretation fails */ interpret( nodes: MeldNode[], options?: InterpreterOptions ): Promise<IStateService>; /** * Interpret a single Meld node * @returns The state after interpretation * @throws {MeldInterpreterError} If interpretation fails */ interpretNode( node: MeldNode, state: IStateService, options?: InterpreterOptions ): Promise<IStateService>; /** * Create a new interpreter context with a child state * Useful for nested interpretation (import/embed) */ createChildContext( parentState: IStateService, filePath?: string, options?: InterpreterOptions ): Promise<IStateService>; }