|
import get from 'lodash.get'; |
|
|
|
const variableRegExp = /({{step\.[\da-zA-Z-]+(?:\.[^.}{]+)+}})/g; |
|
|
|
export default function computeParameters(parameters, executionSteps) { |
|
const entries = Object.entries(parameters); |
|
return entries.reduce((result, [key, value]) => { |
|
if (typeof value === 'string') { |
|
const parts = value.split(variableRegExp); |
|
|
|
const computedValue = parts |
|
.map((part) => { |
|
const isVariable = part.match(variableRegExp); |
|
if (isVariable) { |
|
const stepIdAndKeyPath = part.replace(/{{step.|}}/g, ''); |
|
const [stepId, ...keyPaths] = stepIdAndKeyPath.split('.'); |
|
const keyPath = keyPaths.join('.'); |
|
const executionStep = executionSteps.find((executionStep) => { |
|
return executionStep.stepId === stepId; |
|
}); |
|
const data = executionStep?.dataOut; |
|
const dataValue = get(data, keyPath); |
|
return dataValue; |
|
} |
|
|
|
return part; |
|
}) |
|
.join(''); |
|
|
|
return { |
|
...result, |
|
[key]: computedValue, |
|
}; |
|
} |
|
|
|
if (Array.isArray(value)) { |
|
return { |
|
...result, |
|
[key]: value.map((item) => computeParameters(item, executionSteps)), |
|
}; |
|
} |
|
|
|
return { |
|
...result, |
|
[key]: value, |
|
}; |
|
}, {}); |
|
} |
|
|