{"version":3,"sources":["../interpreter/eval/foreach.ts"],"names":["hasArrayData","value","data","Array","isArray","evaluateForeachCommand","foreachExpr","env","process","MLLD_DEBUG","logger","debug","node","execInvocation","arrays","commandName","commandArgs","type","commandRef","name","args","identifier","Error","cmdVariable","getVariable","isExecutable","evaluateDataValue","evaluatedArrays","arraySecurityDescriptors","arrayNodes","i","length","arrayVar","MLLD_DEBUG_FOREACH","console","error","arrayValue","sourceDescriptor","extractSecurityDescriptor","referencedName","variable","referencedVar","undefined","mx","varMxToSecurityDescriptor","isStructuredValue","structuredData","asData","parsed","JSON","parse","text","normalizedStructured","normalizeIterableValue","attachDescriptorRecursively","push","normalizedArray","validateArrayInputs","isWithinPerformanceLimit","totalCombinations","reduce","total","arr","definition","paramCount","paramNames","paramType","sourceDirective","tuples","cartesianProduct","evaluateExecInvocation","results","mergeTupleDescriptor","descriptor","candidate","mergeDescriptors","tuple","execInvocationNode","withClause","result","tupleDescriptor","structuredResult","ensureStructuredValue","existingDescriptor","merged","security","params","iterationContext","map","param","index","stringify","join","message","String","finalResults","with","batchPipelineConfig","batchPipeline","batchStages","pipeline","processPipeline","createArrayVariable","batchInput","directive","syntax","hasInterpolation","isMultiLine","internal","isBatchInput","pipelineResult","location","isRetryable","isVariable","extractVariableValue","warn","evaluateForeachSection","validateForeachExpression","errors","valid","MAX_COMBINATIONS","item","head","tail","tailProduct","headItem","tailItem","setExpressionProvenance","entry","child","Object","values"],"mappings":"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","file":"chunk-2NIKWPWP.mjs","sourcesContent":["import type { Environment } from '../env/Environment';\nimport { isExecutable } from '@core/types/variable';\nimport { logger } from '@core/utils/logger';\nimport type { SecurityDescriptor } from '@core/types/security';\nimport { mergeDescriptors } from '@core/types/security';\nimport {\n  asData,\n  ensureStructuredValue,\n  extractSecurityDescriptor,\n  isStructuredValue\n} from '@interpreter/utils/structured-value';\nimport { varMxToSecurityDescriptor } from '@core/types/variable/VarMxHelpers';\nimport { normalizeIterableValue } from './for-utils';\nimport { setExpressionProvenance } from '@core/types/provenance/ExpressionProvenance';\n\nfunction hasArrayData(value: unknown): value is { data: unknown[] } {\n  if (!value || typeof value !== 'object') {\n    return false;\n  }\n  if (!('data' in value)) {\n    return false;\n  }\n  const { data } = value as { data?: unknown };\n  return Array.isArray(data);\n}\n\n/**\n * Evaluate a foreach command expression by applying an executable to arrays of values.\n * Uses the standard evaluateExecInvocation() for consistent parameter handling.\n * \n * @param foreachExpr - The foreach command expression to evaluate\n * @param env - The evaluation environment\n * @returns Array of results from command execution\n */\nexport async function evaluateForeachCommand(\n  foreachExpr: any,\n  env: Environment\n): Promise<any> {\n  // Debug logging\n  if (process.env.MLLD_DEBUG === 'true') {\n    logger.debug('evaluateForeachCommand called with:', { foreachExpr });\n  }\n  \n  const node = (foreachExpr && typeof foreachExpr === 'object' && 'value' in foreachExpr)\n    ? (foreachExpr as any).value\n    : foreachExpr;\n  const { execInvocation, arrays } = node;\n  \n  // Extract command name and arguments from execInvocation\n  let commandName: string;\n  let commandArgs: any[] = [];\n  \n  if (execInvocation.type === 'ExecInvocation') {\n    // Handle @func(args) exec invocation\n    commandName = execInvocation.commandRef.name;\n    commandArgs = execInvocation.commandRef.args || [];\n  } else if (execInvocation.identifier) {\n    // Handle @var variable reference (legacy support)\n    commandName = execInvocation.identifier;\n  } else {\n    throw new Error('Invalid foreach command structure');\n  }\n  \n  // 1. Resolve the command variable\n  const cmdVariable = env.getVariable(commandName);\n  if (!cmdVariable) {\n    throw new Error(`Command not found: ${commandName}`);\n  }\n  \n  if (!isExecutable(cmdVariable)) {\n    throw new Error(`Variable '${commandName}' cannot be used with foreach. Expected an @exec command or @text template with parameters, but got type: ${cmdVariable.type}`);\n  }\n  \n  // 2. Evaluate all array arguments (use arrays property from AST)\n  const { evaluateDataValue } = await import('./data-value-evaluator');\n  const evaluatedArrays: any[][] = [];\n  const arraySecurityDescriptors: Array<SecurityDescriptor | undefined> = [];\n  \n  // Use the arrays property from the foreach AST node\n  const arrayNodes = arrays || commandArgs;\n  \n  for (let i = 0; i < arrayNodes.length; i++) {\n    const arrayVar = arrayNodes[i];\n    if (process.env.MLLD_DEBUG_FOREACH === 'true') {\n      console.error('[foreach] array node type:', arrayVar?.type);\n    }\n    const arrayValue = await evaluateDataValue(arrayVar, env);\n    let sourceDescriptor = extractSecurityDescriptor(arrayValue);\n    if (!sourceDescriptor && arrayVar && typeof arrayVar === 'object') {\n      let referencedName: string | undefined;\n      if ('identifier' in arrayVar && typeof arrayVar.identifier === 'string') {\n        referencedName = arrayVar.identifier;\n      } else if ('variable' in arrayVar && arrayVar.variable?.identifier) {\n        referencedName = arrayVar.variable.identifier;\n      }\n      const referencedVar = referencedName ? env.getVariable(referencedName) : undefined;\n      sourceDescriptor =\n        (referencedVar?.mx ? varMxToSecurityDescriptor(referencedVar.mx) : undefined);\n    }\n    if (isStructuredValue(arrayValue)) {\n      let structuredData = asData(arrayValue) as unknown;\n\n      if (!Array.isArray(structuredData)) {\n        if (hasArrayData(structuredData)) {\n          structuredData = structuredData.data;\n        } else if (typeof structuredData === 'string') {\n          try {\n            const parsed = JSON.parse(structuredData);\n            if (Array.isArray(parsed)) {\n              structuredData = parsed;\n            }\n          } catch {\n            // Ignore parse failure; we'll try text fallback next\n          }\n        }\n      }\n\n      if (!Array.isArray(structuredData) && typeof arrayValue.text === 'string') {\n        try {\n          const parsed = JSON.parse(arrayValue.text);\n          if (Array.isArray(parsed)) {\n            structuredData = parsed;\n          }\n        } catch {\n          // Ignore parse failure and fall through to error\n        }\n      }\n\n      if (!Array.isArray(structuredData)) {\n        throw new Error(`Argument ${i + 1} to foreach must be an array, got structured ${arrayValue.type}`);\n      }\n\n      const normalizedStructured = normalizeIterableValue(structuredData);\n      attachDescriptorRecursively(normalizedStructured, sourceDescriptor);\n      evaluatedArrays.push(normalizedStructured);\n      arraySecurityDescriptors.push(sourceDescriptor);\n      continue;\n    }\n    \n    if (!Array.isArray(arrayValue)) {\n      throw new Error(`Argument ${i + 1} to foreach must be an array, got ${typeof arrayValue}`);\n    }\n    \n    const normalizedArray = normalizeIterableValue(arrayValue);\n    attachDescriptorRecursively(normalizedArray, sourceDescriptor);\n    evaluatedArrays.push(normalizedArray);\n    arraySecurityDescriptors.push(sourceDescriptor);\n  }\n  \n  // 3. Validate array inputs and performance limits\n  validateArrayInputs(evaluatedArrays);\n  \n  if (!isWithinPerformanceLimit(evaluatedArrays)) {\n    const totalCombinations = evaluatedArrays.reduce((total, arr) => total * arr.length, 1);\n    throw new Error(`Foreach operation would generate ${totalCombinations} combinations, which exceeds the performance limit. Consider reducing array sizes or using more specific filtering.`);\n  }\n  \n  // 4. Check parameter count matches array count\n  const definition = cmdVariable.value;\n  const paramCount = cmdVariable.paramNames?.length || definition.paramNames?.length || 0;\n  if (evaluatedArrays.length !== paramCount) {\n    const paramType = definition.sourceDirective === 'text' ? 'Text template' : 'Command';\n    throw new Error(`${paramType} '${commandName}' expects ${paramCount} parameter${paramCount !== 1 ? 's' : ''}, but foreach is passing ${evaluatedArrays.length} array${evaluatedArrays.length !== 1 ? 's' : ''}`);\n  }\n  \n  // 5. Generate cartesian product\n  const tuples = cartesianProduct(evaluatedArrays);\n  \n  // 6. Execute command for each tuple using standard exec invocation\n  const { evaluateExecInvocation } = await import('./exec-invocation');\n  const results: any[] = [];\n  \n  const mergeTupleDescriptor = (): SecurityDescriptor | undefined => {\n    let descriptor: SecurityDescriptor | undefined;\n    for (const candidate of arraySecurityDescriptors) {\n      if (!candidate) continue;\n      descriptor = descriptor ? mergeDescriptors(descriptor, candidate) : candidate;\n    }\n    return descriptor;\n  };\n\n  for (let i = 0; i < tuples.length; i++) {\n    const tuple = tuples[i];\n\n    try {\n      // Create an ExecInvocation node with the current tuple values as arguments\n      const execInvocationNode = {\n        type: 'ExecInvocation',\n        commandRef: {\n          identifier: commandName,\n          args: tuple\n        },\n        withClause: null\n      };\n      \n      // Use the standard exec invocation evaluator\n      const result = await evaluateExecInvocation(execInvocationNode as any, env);\n      const tupleDescriptor = mergeTupleDescriptor();\n      let structuredResult = isStructuredValue(result.value)\n        ? result.value\n        : ensureStructuredValue(result.value);\n      if (tupleDescriptor) {\n        const existingDescriptor = extractSecurityDescriptor(structuredResult);\n        const merged = existingDescriptor\n          ? mergeDescriptors(existingDescriptor, tupleDescriptor)\n          : tupleDescriptor;\n        structuredResult = ensureStructuredValue(structuredResult, structuredResult.type, structuredResult.text, {\n          security: merged\n        });\n      }\n      results.push(structuredResult);\n    } catch (error) {\n      // Include iteration context in error message\n      const params = cmdVariable.paramNames || definition.paramNames || [];\n      const iterationContext = params.map((param: string, index: number) => \n        `${param}: ${JSON.stringify(tuple[index])}`\n      ).join(', ');\n      \n      throw new Error(\n        `Error in foreach iteration ${i + 1} (${iterationContext}): ${error instanceof Error ? error.message : String(error)}`\n      );\n    }\n  }\n  \n  let finalResults: unknown = results;\n\n  const withClause = node.with || foreachExpr.with;\n  const batchPipelineConfig =\n    node.batchPipeline ||\n    withClause?.batchPipeline ||\n    foreachExpr.batchPipeline;\n\n  const batchStages = Array.isArray(batchPipelineConfig)\n    ? batchPipelineConfig\n    : batchPipelineConfig?.pipeline;\n\n  if (batchStages && batchStages.length > 0) {\n    const { processPipeline } = await import('./pipeline/unified-processor');\n    const { createArrayVariable } = await import('@core/types/variable');\n\n    const batchInput = createArrayVariable(\n      'foreach-batch-input',\n      results,\n      false,\n      {\n        directive: 'foreach',\n        syntax: 'expression',\n        hasInterpolation: false,\n        isMultiLine: false\n      },\n      {\n        internal: { isBatchInput: true }\n      }\n    );\n\n    try {\n      const pipelineResult = await processPipeline({\n        value: batchInput,\n        env,\n        pipeline: batchStages,\n        identifier: `foreach-batch-${commandName}`,\n        location: foreachExpr.location,\n        isRetryable: false\n      });\n\n      const { isVariable, extractVariableValue } = await import('../utils/variable-resolution');\n\n      if (isStructuredValue(pipelineResult)) {\n        finalResults = pipelineResult;\n      } else if (isVariable(pipelineResult)) {\n        finalResults = await extractVariableValue(pipelineResult, env);\n      } else {\n        finalResults = pipelineResult;\n      }\n    } catch (error) {\n      logger.warn(\n        `Batch pipeline failed for foreach: ${error instanceof Error ? error.message : String(error)}`\n      );\n      finalResults = results;\n    }\n  }\n\n  return finalResults;\n}\n\n/**\n * Evaluate a foreach section expression.\n */\nexport async function evaluateForeachSection(\n  foreachExpr: any,\n  env: Environment\n): Promise<any> {\n  // Implementation for section-based foreach\n  // This would handle cases like: foreach \"section\" from [path](@array)\n  // For now, delegate to command-based foreach\n  return evaluateForeachCommand(foreachExpr, env);\n}\n\n/**\n * Validate foreach expression structure and arguments.\n */\nexport async function validateForeachExpression(\n  foreachExpr: any,\n  env: Environment\n): Promise<{ valid: boolean; errors: string[] }> {\n  const errors: string[] = [];\n  \n  try {\n    // Basic structure validation\n    if (!foreachExpr || typeof foreachExpr !== 'object') {\n      errors.push('Foreach expression must be an object');\n      return { valid: false, errors };\n    }\n    \n    const { execInvocation } = foreachExpr.value || foreachExpr;\n    if (!execInvocation) {\n      errors.push('Foreach expression missing exec invocation');\n      return { valid: false, errors };\n    }\n    \n    // Command validation\n    let commandName: string;\n    if (execInvocation.type === 'ExecInvocation') {\n      commandName = execInvocation.commandRef.name;\n    } else if (execInvocation.identifier) {\n      commandName = execInvocation.identifier;\n    } else {\n      errors.push('Invalid foreach command structure');\n      return { valid: false, errors };\n    }\n    \n    const cmdVariable = env.getVariable(commandName);\n    if (!cmdVariable) {\n      errors.push(`Command not found: ${commandName}`);\n    } else if (!isExecutable(cmdVariable)) {\n      errors.push(`Variable '${commandName}' is not executable`);\n    }\n    \n    return { valid: errors.length === 0, errors };\n  } catch (error) {\n    errors.push(`Validation error: ${error instanceof Error ? error.message : String(error)}`);\n    return { valid: false, errors };\n  }\n}\n\n// Helper functions\n\nfunction validateArrayInputs(arrays: any[][]): void {\n  if (arrays.length === 0) {\n    throw new Error('Foreach requires at least one array argument');\n  }\n  \n  for (let i = 0; i < arrays.length; i++) {\n    const arr = arrays[i];\n    if (!Array.isArray(arr)) {\n      throw new Error(`Argument ${i + 1} must be an array`);\n    }\n    if (arr.length === 0) {\n      throw new Error(`Array ${i + 1} cannot be empty`);\n    }\n  }\n}\n\nfunction isWithinPerformanceLimit(arrays: any[][]): boolean {\n  const MAX_COMBINATIONS = 10000; // Configurable limit\n  const totalCombinations = arrays.reduce((total, arr) => total * arr.length, 1);\n  return totalCombinations <= MAX_COMBINATIONS;\n}\n\nfunction cartesianProduct(arrays: any[][]): any[][] {\n  if (arrays.length === 0) return [];\n  if (arrays.length === 1) return arrays[0].map(item => [item]);\n  \n  const result: any[][] = [];\n  const [head, ...tail] = arrays;\n  const tailProduct = cartesianProduct(tail);\n  \n  for (const headItem of head) {\n    for (const tailItem of tailProduct) {\n      result.push([headItem, ...tailItem]);\n    }\n  }\n  \n  return result;\n}\n\nfunction attachDescriptorRecursively(\n  value: unknown,\n  descriptor?: SecurityDescriptor\n): void {\n  if (!descriptor || !value || typeof value !== 'object') {\n    return;\n  }\n  setExpressionProvenance(value, descriptor);\n  if (Array.isArray(value)) {\n    for (const entry of value) {\n      attachDescriptorRecursively(entry, descriptor);\n    }\n    return;\n  }\n\n  for (const child of Object.values(value as Record<string, unknown>)) {\n    attachDescriptorRecursively(child, descriptor);\n  }\n}\n"]}