eval.js

import vm from 'node:vm';
import { quote } from '@kitmi/utils';

/**
 * Interpolate a string with variables.
 * @function module:eval.interpolate
 * @param {Srting} str - Text to interpolate
 * @param {*} [variables] - Variables to interpolate
 * @returns {*}
 */
export function interpolate(str, variables) {
    return vm.runInNewContext(quote(str, '`'), variables);
}

/**
 * Evaluate an expression.
 * @function module:eval.evaluate
 * @param {String} expr - Expression to evaluate
 * @param {*} [variables] - Variables as local scope
 * @returns {*}
 */
export function evaluate(expr, variables) {
    return vm.runInNewContext('() => (' + expr + ')', variables)();
}