mlld
Version:
mlld: llm scripting language
1 lines • 28.3 kB
Source Map (JSON)
{"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"]}