20 lines
755 B
JavaScript
20 lines
755 B
JavaScript
import resolve, { toString } from '/imports/parser/resolve.js';
|
|
|
|
export default function evaluateCalculation(calculation, scope, givenContext){
|
|
const parseNode = calculation.parseNode;
|
|
const fn = calculation._parseLevel;
|
|
const calculationScope = {...calculation._localScope, ...scope};
|
|
const {result: resultNode, context} = resolve(fn, parseNode, calculationScope, givenContext);
|
|
calculation.errors = context.errors;
|
|
if (resultNode?.parseType === 'constant'){
|
|
calculation.value = resultNode.value;
|
|
} else if (resultNode?.parseType === 'error'){
|
|
calculation.value = null;
|
|
} else {
|
|
calculation.value = toString(resultNode);
|
|
}
|
|
// remove the working fields
|
|
delete calculation._parseLevel;
|
|
delete calculation._localScope;
|
|
}
|