meld
Version:
Meld: A template language for LLM prompts
96 lines (84 loc) • 2.46 kB
text/typescript
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>;
}