UNPKG

mlld

Version:

mlld: a modular prompt scripting language

1 lines 8.72 kB
{"version":3,"sources":["../interpreter/core/ast-evaluator.ts"],"names":["ASTEvaluator","normalizeArray","value","type","Array","isArray","items","map","item","normalizeValue","location","synthetic","Error","normalizeObject","constructor","Object","properties","key","val","entries","undefined","content","length","evaluateToRuntime","env","normalized","evaluatedItems","push","evaluatedObject","interpolate"],"mappings":"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","file":"ast-evaluator-WZNEUUA2.mjs","sourcesContent":["import { Environment } from '@interpreter/env/Environment';\nimport { SourceLocation } from '@core/types/astTypes';\n\nexport interface ArrayNode {\n type: 'array';\n items: any[];\n location: SourceLocation | { synthetic: boolean };\n}\n\nexport interface ObjectNode {\n type: 'object';\n properties: Record<string, any>;\n location: SourceLocation | { synthetic: boolean };\n}\n\nexport class ASTEvaluator {\n /**\n * Normalize an array value to have consistent type information\n */\n static normalizeArray(value: any): ArrayNode {\n // Already normalized\n if (value && typeof value === 'object' && value.type === 'array') {\n return value;\n }\n \n // Plain JavaScript array - synthesize type information\n if (Array.isArray(value)) {\n return {\n type: 'array',\n items: value.map(item => this.normalizeValue(item)),\n location: { synthetic: true }\n };\n }\n \n throw new Error(`Expected array, got ${typeof value}`);\n }\n \n /**\n * Normalize an object value to have consistent type information\n */\n static normalizeObject(value: any): ObjectNode {\n // Already normalized\n if (value && typeof value === 'object' && value.type === 'object') {\n return value;\n }\n \n // Plain JavaScript object - synthesize type information\n if (typeof value === 'object' && value !== null && value.constructor === Object) {\n const properties: Record<string, any> = {};\n \n for (const [key, val] of Object.entries(value)) {\n // Skip internal properties\n if (key === 'wrapperType' || key === 'nodeId' || key === 'location') {\n continue;\n }\n properties[key] = this.normalizeValue(val);\n }\n \n return {\n type: 'object',\n properties,\n location: { synthetic: true }\n };\n }\n \n throw new Error(`Expected object, got ${typeof value}`);\n }\n \n /**\n * Normalize any value - Phase 2: Extended for objects\n */\n static normalizeValue(value: any): any {\n if (value === null || value === undefined) {\n return value;\n }\n \n // Handle wrapped content first (e.g., quoted strings)\n if (value && typeof value === 'object' && 'wrapperType' in value && 'content' in value && Array.isArray(value.content)) {\n // Extract the string content from wrapped strings\n if (value.content.length > 0 && value.content[0].type === 'Text') {\n return value.content[0].content;\n }\n // Handle empty content\n if (value.content.length === 0) {\n return '';\n }\n // For complex content, might need interpolation - return as is for now\n return value;\n }\n \n // Handle raw Text nodes\n if (value && typeof value === 'object' && value.type === 'Text' && 'content' in value) {\n return value.content;\n }\n \n // Handle arrays\n if (Array.isArray(value)) {\n return this.normalizeArray(value);\n }\n \n // Handle objects (but not already-typed nodes)\n if (typeof value === 'object' && value !== null && value.constructor === Object && !value.type) {\n return this.normalizeObject(value);\n }\n \n // Already-typed nodes and primitives pass through\n return value;\n }\n \n /**\n * Evaluate a value to runtime representation\n * Phase 2: Extended for objects and arrays\n */\n static async evaluateToRuntime(value: any, env: Environment): Promise<any> {\n if (value === null || value === undefined) {\n return value;\n }\n \n // Normalize the value first\n const normalized = this.normalizeValue(value);\n \n // Handle normalized arrays\n if (normalized && normalized.type === 'array') {\n const evaluatedItems = [];\n \n for (const item of normalized.items) {\n // Recursively evaluate each item\n evaluatedItems.push(await this.evaluateToRuntime(item, env));\n }\n \n return evaluatedItems;\n }\n \n // Handle normalized objects\n if (normalized && normalized.type === 'object') {\n const evaluatedObject: Record<string, any> = {};\n \n for (const [key, val] of Object.entries(normalized.properties)) {\n // Recursively evaluate each property\n evaluatedObject[key] = await this.evaluateToRuntime(val, env);\n }\n \n return evaluatedObject;\n }\n \n // Handle wrapped content that wasn't normalized (complex interpolation needed)\n if (normalized && typeof normalized === 'object' && 'wrapperType' in normalized && 'content' in normalized) {\n const { interpolate } = await import('@interpreter/core/interpreter');\n return await interpolate(normalized.content, env);\n }\n \n // Primitives and other values\n return normalized;\n }\n}"]}