| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- /** 语句:random 生成随机数 */
- const types = ['random']
- function parse(action, parseContext) {
- const { extractVarName } = parseContext
- const parsed = { type: 'random', integer: action.integer !== undefined ? action.integer : true }
- if (action.inVars && Array.isArray(action.inVars) && action.inVars.length >= 2) {
- parsed.min = action.inVars[0]
- parsed.max = action.inVars[1]
- } else {
- parsed.min = action.min
- parsed.max = action.max
- }
- if (action.outVars && Array.isArray(action.outVars) && action.outVars.length > 0) {
- parsed.variable = action.outVars[0]
- } else parsed.variable = action.variable
- return Object.assign({}, action, parsed)
- }
- async function execute(action, ctx) {
- const { variableContext, extractVarName } = ctx
- let varName
- if (action.outVars && action.outVars.length > 0) {
- varName = extractVarName(action.outVars[0])
- } else if (action.variable) {
- varName = extractVarName(action.variable)
- } else {
- return { success: false, error: 'random 操作缺少 variable 或 outVars 参数' }
- }
- let min, max
- if (action.inVars && action.inVars.length >= 2) {
- min = Number(action.inVars[0])
- max = Number(action.inVars[1])
- } else {
- min = action.min !== undefined ? Number(action.min) : 0
- max = action.max !== undefined ? Number(action.max) : 100
- }
- const integer = action.integer !== undefined ? action.integer : true
- if (isNaN(min) || isNaN(max)) return { success: false, error: 'random 操作的 min 和 max 必须是数字' }
- if (min > max) return { success: false, error: 'random 操作的 min 不能大于 max' }
- const randomValue = integer
- ? Math.floor(Math.random() * (max - min + 1)) + min
- : Math.random() * (max - min) + min
- variableContext[varName] = randomValue
- return { success: true }
- }
- module.exports = { types, parse, execute }
|