{"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}"]}