/** 语句:set 设置变量 */ const types = ['set'] function parse(action, parseContext) { const { extractVarName, resolveValue } = parseContext const parsed = { type: 'set', variable: action.variable, value: resolveValue(action.value, parseContext.variableContext || {}), } return Object.assign({}, action, parsed) } async function execute(action, ctx) { const { variableContext, extractVarName, resolveValue, evaluateExpression } = ctx if (!action.variable) return { success: true } const varName = extractVarName(action.variable) let finalValue = action.value if (typeof action.value === 'string' && /[+\-*/]/.test(action.value)) { finalValue = evaluateExpression(action.value, variableContext) } else if (typeof action.value === 'string') { const varPattern = /\{([\w-]+)\}/g let hasVariables = false finalValue = action.value.replace(varPattern, (match, vn) => { hasVariables = true const val = variableContext[vn] return val === undefined || val === null ? match : String(val) }) if (!hasVariables) finalValue = resolveValue(action.value, variableContext) } else { finalValue = resolveValue(action.value, variableContext) } variableContext[varName] = finalValue return { success: true } } module.exports = { types, parse, execute }