meld
Version:
Meld: A template language for LLM prompts
54 lines (46 loc) • 1.62 kB
text/typescript
import { MeldError, ErrorSeverity } from './MeldError.js';
export interface ImportErrorDetails {
importChain?: string[];
filePath?: string;
cause?: Error;
variableName?: string;
}
export interface MeldImportErrorOptions {
code?: string;
details?: ImportErrorDetails;
cause?: Error;
severity?: ErrorSeverity;
context?: any;
}
/**
* Error thrown when import operations fail
*/
export class MeldImportError extends MeldError {
public readonly details?: ImportErrorDetails;
constructor(
message: string,
options: MeldImportErrorOptions = {}
) {
const importChainStr = options.details?.importChain
? ` (chain: ${options.details.importChain.join(' → ')})`
: '';
// Circular imports are fatal, other import errors are typically recoverable
const isCyclic = options.code === 'CIRCULAR_IMPORT' || message.includes('circular');
const severity = options.severity || (isCyclic ? ErrorSeverity.Fatal : ErrorSeverity.Recoverable);
super(`Import error${options.code ? ` (${options.code})` : ''}: ${message}${importChainStr}`, {
code: options.code || 'IMPORT_FAILED',
filePath: options.details?.filePath,
cause: options.cause || options.details?.cause,
severity,
context: {
...options.context,
importChain: options.details?.importChain,
variableName: options.details?.variableName
}
});
this.name = 'MeldImportError';
this.details = options.details;
// Ensure proper prototype chain for instanceof checks
Object.setPrototypeOf(this, MeldImportError.prototype);
}
}