UNPKG

mlld

Version:

mlld: a modular prompt scripting language

1 lines 23.9 kB
{"version":3,"sources":["../interpreter/eval/expression.ts"],"names":["isTruthy","value","variable","isTextLike","str","toLowerCase","isArrayVariable","length","isObjectVariable","Object","keys","isCommandResult","trim","isPipelineInput","text","undefined","isNaN","Array","isArray","evaluateExpression","node","env","context","process","MLLD_DEBUG","console","log","type","operator","evaluateBinaryExpression","evaluateTernaryExpression","evaluateUnaryExpression","Error","left","right","leftType","rightType","identifier","expressionContext","isExpression","leftResult","evaluate","leftTruthy","rightResult","isVariable","rightTruthy","leftIsVariable","rightIsVariable","equal","isEqual","leftNum","toNumber","rightNum","condition","trueBranch","falseBranch","condResult","condTruthy","operand","operandResult","operandTruthy","a","b","aValue","extractValue","bValue","numA","Number","numB","NaN","num"],"mappings":"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","file":"expression-CKCH5HUL.mjs","sourcesContent":["import type { Environment } from '../env/Environment';\nimport type { EvalResult } from '../core/interpreter';\nimport type { MlldNode, BinaryExpression, TernaryExpression, UnaryExpression } from '@core/types';\nimport type { Variable } from '@core/types/variable';\nimport { evaluate } from '../core/interpreter';\nimport { \n isTextLike, \n isArray as isArrayVariable, \n isObject as isObjectVariable, \n isCommandResult, \n isPipelineInput \n} from '@core/types/variable';\n\n/**\n * Determines if a value is truthy according to mlld rules\n * (copied from when.ts to avoid circular dependencies)\n */\nexport function isTruthy(value: any): boolean {\n // Handle Variable types\n if (value && typeof value === 'object' && 'type' in value && 'name' in value) {\n const variable = value as Variable;\n \n // Type-specific truthiness for Variables\n if (isTextLike(variable)) {\n // Check for mlld falsy string values\n const str = variable.value;\n if (str === '' || str.toLowerCase() === 'false' || str === '0') {\n return false;\n }\n return true;\n } else if (isArrayVariable(variable)) {\n return variable.value.length > 0;\n } else if (isObjectVariable(variable)) {\n return Object.keys(variable.value).length > 0;\n } else if (isCommandResult(variable)) {\n // Command results are truthy if they have output\n return variable.value.trim().length > 0;\n } else if (isPipelineInput(variable)) {\n return variable.value.text.length > 0;\n }\n \n // For other variable types, use their value\n return isTruthy(variable.value);\n }\n \n // Handle direct values\n if (value === null || value === undefined) {\n return false;\n }\n \n if (typeof value === 'boolean') {\n return value;\n }\n \n if (typeof value === 'number') {\n return value !== 0 && !isNaN(value);\n }\n \n if (typeof value === 'string') {\n // Wildcard is always true\n if (value === '*') {\n return true;\n }\n // Empty string is false\n if (value === '') {\n return false;\n }\n // String \"false\" is false (case insensitive)\n if (value.toLowerCase() === 'false') {\n return false;\n }\n // String \"0\" is false\n if (value === '0') {\n return false;\n }\n // All other strings are true\n return true;\n }\n \n if (Array.isArray(value)) {\n return value.length > 0;\n }\n \n if (typeof value === 'object') {\n return Object.keys(value).length > 0;\n }\n \n // Default to JavaScript truthiness\n return !!value;\n}\n\n/**\n * Evaluate expression nodes (BinaryExpression, TernaryExpression, UnaryExpression)\n */\nexport async function evaluateExpression(\n node: BinaryExpression | TernaryExpression | UnaryExpression,\n env: Environment,\n context?: { isExpression?: boolean }\n): Promise<EvalResult> {\n if (process.env.MLLD_DEBUG === 'true') {\n console.log('[DEBUG] evaluateExpression called with node type:', node.type);\n if (node.type === 'BinaryExpression') {\n console.log('[DEBUG] Binary operator:', (node as BinaryExpression).operator);\n }\n }\n \n if (node.type === 'BinaryExpression') {\n return evaluateBinaryExpression(node, env, context);\n } else if (node.type === 'TernaryExpression') {\n return evaluateTernaryExpression(node, env, context);\n } else if (node.type === 'UnaryExpression') {\n return evaluateUnaryExpression(node, env, context);\n }\n \n throw new Error(`Unknown expression type: ${(node as any).type}`);\n}\n\n/**\n * Evaluate binary expressions (&&, ||, ==, !=, <, >, <=, >=)\n */\nasync function evaluateBinaryExpression(node: BinaryExpression, env: Environment, context?: { isExpression?: boolean }): Promise<EvalResult> {\n let { operator, left, right } = node;\n \n // Handle operator being an array (from PEG.js negative lookahead)\n if (Array.isArray(operator)) {\n operator = operator[0];\n }\n \n if (process.env.MLLD_DEBUG === 'true') {\n console.log('[DEBUG] evaluateBinaryExpression called with operator:', operator);\n console.log('[DEBUG] evaluateBinaryExpression:', {\n operator,\n leftType: left.type,\n rightType: right.type,\n left: left.type === 'VariableReference' ? (left as any).identifier : left,\n right: right.type === 'VariableReference' ? (right as any).identifier : right\n });\n }\n \n // Short-circuit evaluation for logical operators\n const expressionContext = { isExpression: true, ...context };\n \n if (operator === '&&') {\n const leftResult = await evaluate(left, env, expressionContext);\n const leftTruthy = isTruthy(leftResult.value);\n \n // Short-circuit: if left is falsy, return left value\n if (!leftTruthy) {\n return { value: leftResult.value, env };\n }\n \n // Otherwise evaluate and return right\n const rightResult = await evaluate(right, env, expressionContext);\n return { value: rightResult.value, env };\n }\n \n if (operator === '||') {\n const leftResult = await evaluate(left, env, expressionContext);\n const leftTruthy = isTruthy(leftResult.value);\n \n if (process.env.MLLD_DEBUG === 'true') {\n console.log('[DEBUG] || operator left side:', {\n left: leftResult.value,\n leftTruthy,\n leftType: typeof leftResult.value,\n isVariable: leftResult.value && typeof leftResult.value === 'object' && 'type' in leftResult.value\n });\n }\n \n // Short-circuit: if left is truthy, return left value\n if (leftTruthy) {\n return { value: leftResult.value, env };\n }\n \n // Otherwise evaluate and return right\n const rightResult = await evaluate(right, env, expressionContext);\n if (process.env.MLLD_DEBUG === 'true') {\n console.log('[DEBUG] || operator right side:', {\n right: rightResult.value,\n rightTruthy: isTruthy(rightResult.value)\n });\n }\n return { value: rightResult.value, env };\n }\n \n // Comparison operators - evaluate both sides\n const leftResult = await evaluate(left, env, expressionContext);\n const rightResult = await evaluate(right, env, expressionContext);\n \n if (process.env.MLLD_DEBUG === 'true') {\n console.log('[DEBUG] Evaluated operands:', {\n leftResult: leftResult.value,\n rightResult: rightResult.value,\n leftIsVariable: leftResult.value && typeof leftResult.value === 'object' && 'type' in leftResult.value,\n rightIsVariable: rightResult.value && typeof rightResult.value === 'object' && 'type' in rightResult.value\n });\n }\n \n if (operator === '==') {\n const equal = isEqual(leftResult.value, rightResult.value);\n if (process.env.MLLD_DEBUG === 'true') {\n console.log('[DEBUG] == comparison:', {\n left: leftResult.value,\n leftType: typeof leftResult.value,\n right: rightResult.value,\n rightType: typeof rightResult.value,\n equal\n });\n }\n return { value: equal, env };\n }\n \n if (operator === '!=') {\n const equal = isEqual(leftResult.value, rightResult.value);\n return { value: !equal, env };\n }\n \n // Numeric comparison operators\n if (operator === '<') {\n const leftNum = toNumber(leftResult.value);\n const rightNum = toNumber(rightResult.value);\n console.log('[DEBUG] < comparison:', leftResult.value, '<', rightResult.value, '=', leftNum < rightNum);\n return { value: leftNum < rightNum, env };\n }\n \n if (operator === '>') {\n const leftNum = toNumber(leftResult.value);\n const rightNum = toNumber(rightResult.value);\n return { value: leftNum > rightNum, env };\n }\n \n if (operator === '<=') {\n const leftNum = toNumber(leftResult.value);\n const rightNum = toNumber(rightResult.value);\n return { value: leftNum <= rightNum, env };\n }\n \n if (operator === '>=') {\n const leftNum = toNumber(leftResult.value);\n const rightNum = toNumber(rightResult.value);\n return { value: leftNum >= rightNum, env };\n }\n \n throw new Error(`Unknown binary operator: ${operator}`);\n}\n\n/**\n * Evaluate ternary expressions (condition ? trueBranch : falseBranch)\n */\nasync function evaluateTernaryExpression(node: TernaryExpression, env: Environment, context?: { isExpression?: boolean }): Promise<EvalResult> {\n const { condition, trueBranch, falseBranch } = node;\n \n // Evaluate condition\n const condResult = await evaluate(condition, env, { isExpression: true, ...context });\n const condTruthy = isTruthy(condResult.value);\n \n // Evaluate and return appropriate branch\n if (condTruthy) {\n return evaluate(trueBranch, env, { isExpression: true, ...context });\n } else {\n return evaluate(falseBranch, env, { isExpression: true, ...context });\n }\n}\n\n/**\n * Evaluate unary expressions (!)\n */\nasync function evaluateUnaryExpression(node: UnaryExpression, env: Environment, context?: { isExpression?: boolean }): Promise<EvalResult> {\n const { operator, operand } = node;\n \n if (operator === '!') {\n const operandResult = await evaluate(operand, env, { isExpression: true, ...context });\n const operandTruthy = isTruthy(operandResult.value);\n return { value: !operandTruthy, env };\n }\n \n throw new Error(`Unknown unary operator: ${operator}`);\n}\n\n/**\n * mlld equality comparison\n * Follows mlld's type coercion rules:\n * - \"true\" == true\n * - \"false\" == false \n * - null == undefined\n * - Numbers are compared numerically\n * - Strings are compared as strings\n */\nexport function isEqual(a: unknown, b: unknown): boolean {\n // Extract Variable values\n const aValue = extractValue(a);\n const bValue = extractValue(b);\n \n // Handle null/undefined equality\n if (aValue === null || aValue === undefined) {\n return bValue === null || bValue === undefined;\n }\n if (bValue === null || bValue === undefined) {\n return false;\n }\n \n // Handle boolean string coercion\n if (typeof aValue === 'string' && typeof bValue === 'boolean') {\n return (aValue === 'true' && bValue === true) || (aValue === 'false' && bValue === false);\n }\n if (typeof bValue === 'string' && typeof aValue === 'boolean') {\n return (bValue === 'true' && aValue === true) || (bValue === 'false' && aValue === false);\n }\n \n // Handle numeric string comparison\n if (typeof aValue === 'string' && typeof bValue === 'number') {\n const numA = Number(aValue);\n return !isNaN(numA) && numA === bValue;\n }\n if (typeof bValue === 'string' && typeof aValue === 'number') {\n const numB = Number(bValue);\n return !isNaN(numB) && numB === aValue;\n }\n \n // Default to strict equality\n return aValue === bValue;\n}\n\n/**\n * Extract the raw value from a Variable or return the value as-is\n */\nfunction extractValue(value: unknown): unknown {\n if (value && typeof value === 'object' && 'type' in value && 'value' in value) {\n const variable = value as Variable;\n return variable.value;\n }\n return value;\n}\n\n/**\n * Convert a value to a number for numeric comparisons\n * Follows mlld's type coercion rules:\n * - Parse strings to numbers\n * - true → 1, false → 0\n * - null → 0, undefined → NaN\n * - Non-numeric strings → NaN\n */\nexport function toNumber(value: unknown): number {\n // Handle Variable objects by extracting their value\n if (value && typeof value === 'object' && 'type' in value && 'value' in value) {\n const variable = value as Variable;\n return toNumber(variable.value);\n }\n \n // Handle null and undefined\n if (value === null) {\n return 0;\n }\n if (value === undefined) {\n return NaN;\n }\n \n // Handle booleans\n if (typeof value === 'boolean') {\n return value ? 1 : 0;\n }\n \n // Handle numbers\n if (typeof value === 'number') {\n return value;\n }\n \n // Handle strings\n if (typeof value === 'string') {\n // Special case for boolean strings\n if (value === 'true') {\n return 1;\n }\n if (value === 'false') {\n return 0;\n }\n // Try to parse as number\n const num = Number(value);\n return num;\n }\n \n // For objects and arrays, return NaN\n return NaN;\n}"]}