| 12345678910111213141516171819202122232425262728293031323334353637 |
- /** 语句: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 }
|